转换后如何将图像保存到文件夹? [英] How do I save an image to a folder after converting it?
问题描述
我正在尝试将图像保存到内存并转换后保存到文件夹中。我无法找到如何完成这件事。
我尝试了什么:
私有静态图像ScaleImage(图像,int maxHeight)
{
双刻度;
if(image.Height > = maxHeight){scale = maxHeight /(double)image.Height; }
else {scale = 1; }
位图bmp =新位图(图像,Convert.ToInt32(image.Width * scale),Convert.ToInt32(image.Height * scale));
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters jpgEncoderParameters = new EncoderParameters(1);
jpgEncoderParameters .Param [0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality,100L);
MemoryStream ms = new MemoryStream();
bmp.Save(ms,jpgEncoder,jpgEncoderParameters);
返回Image.FromStream(ms);
}
私有静态ImageCodecInfo GetEncoder(ImageFormat格式)
{
ImageCodecInfo [] codecs = ImageCodecInfo.GetImageDecoders();
foreach(编码解码器中的ImageCodecInfo编解码器) )
{
if(codec.FormatID == format.Guid){return codec; }
}
返回null;
}
#endregion
private static void Job_UpdateStaffDBPics(string loc)
{
DirectoryInfo diSource = new DirectoryInfo(loc);
byte [] Pic = null;
byte [] StaffPicThumb = null;
foreach(文件信息在diSource中) .GetFiles())
{
试试
{
FileStream fs = fi.OpenRead();
Image imgSource = Image.FromStream(fs);
ImageConverter converter = new ImageConverter();
Pic =(byte [])converter。 ConvertTo(ScaleImage(imgSource,600),typeof(byte []));
StaffPicThumb =(byte [])converter.ConvertTo(ScaleImage(imgSource,128), typeof(byte []));
MemoryStream ms = new MemoryStream(StaffPicThumb);
Image returnImage = Image.FromStream(ms) ;
returnImage.Save(ConvertedImage,ImageFormat.Jpeg);
//文件。复制(returnImage)
foreach(图片中的var项目)
{
}
MessageBox.Show(测试);
}
catch(Exception ex) {MessageBox.Show(ex.Message); }
}
}
}
I'm trying to save an image to a folder after having it in memory and converted. I can't find out how to get that done.
What I have tried:
private static Image ScaleImage(Image image, int maxHeight)
{
double scale;
if (image.Height >= maxHeight) { scale = maxHeight / (double)image.Height; }
else { scale = 1; }
Bitmap bmp = new Bitmap(image, Convert.ToInt32(image.Width * scale), Convert.ToInt32(image.Height * scale));
ImageCodecInfo jpgEncoder = GetEncoder(ImageFormat.Jpeg);
EncoderParameters jpgEncoderParameters = new EncoderParameters(1);
jpgEncoderParameters.Param[0] = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, 100L);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, jpgEncoder, jpgEncoderParameters);
return Image.FromStream(ms);
}
private static ImageCodecInfo GetEncoder(ImageFormat format)
{
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageDecoders();
foreach (ImageCodecInfo codec in codecs)
{
if (codec.FormatID == format.Guid) { return codec; }
}
return null;
}
#endregion
private static void Job_UpdateStaffDBPics(string loc)
{
DirectoryInfo diSource = new DirectoryInfo(loc);
byte[] Pic = null;
byte[] StaffPicThumb = null;
foreach (FileInfo fi in diSource.GetFiles())
{
try
{
FileStream fs = fi.OpenRead();
Image imgSource = Image.FromStream(fs);
ImageConverter converter = new ImageConverter();
Pic = (byte[])converter.ConvertTo(ScaleImage(imgSource, 600), typeof(byte[]));
StaffPicThumb = (byte[])converter.ConvertTo(ScaleImage(imgSource, 128), typeof(byte[]));
MemoryStream ms = new MemoryStream(StaffPicThumb);
Image returnImage = Image.FromStream(ms);
returnImage.Save("ConvertedImage", ImageFormat.Jpeg);
//File.Copy(returnImage)
foreach (var item in Pic)
{
}
MessageBox.Show("Test");
}
catch (Exception ex) { MessageBox.Show(ex.Message); }
}
}
}
推荐答案
你可以这样做:< br $> b $ b
You could do:
returnImage.Save("C:\image.ext", ImageFormat.Jpeg);
或绕过此位并将流直接写入文件
or bypass this bit and write the stream straight to a file
using (var fileStream = File.Create("C:\image.ext"))
{
ms.InputStream.Seek(0, SeekOrigin.Begin);
ms.InputStream.CopyTo(fileStream);
}
这篇关于转换后如何将图像保存到文件夹?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!