转换后如何将图像保存到文件夹? [英] How do I save an image to a folder after converting it?

查看:94
本文介绍了转换后如何将图像保存到文件夹?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将图像保存到内存并转换后保存到文件夹中。我无法找到如何完成这件事。



我尝试了什么:



私有静态图像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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆