如何将 ImageCodecInfo 转换为 byte[] 或 Stream
How to convert ImageCodecInfo to byte[] or Stream
我想上传优化后的图片到亚马逊。
所以我找到了这个 article,它解释了如何使用压缩级别优化图像。
问题是这个例子将图像保存到磁盘,我需要将它保存到亚马逊存储。
我有这个代码:
public static ImageCodecInfo OptimizeImage(Image image, string fileName, long compression, string type)
{
var encoderParams = new EncoderParameters(1)
{
Param = {[0] = new EncoderParameter(Encoder.Quality, compression)}
};
return GetEncoderInfo(type);
}
private static ImageCodecInfo GetEncoderInfo(string mime_type)
{
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int i = 0; i <= encoders.Length; i++)
{
if (encoders[i].MimeType == mime_type)
return encoders[i];
}
return null;
}
我应该有一个 Stream
或 byte[]
对象,以便将其作为参数发送到 UploadImageToAmazon
方法。
所以,我有一个 Image 对象及其 ImageCodecInfo,如何将其转换为 Stream
或 byte[]
?
或者如果你能建议我如何优化图片并上传到亚马逊也很好。
谢谢。
您可以使用 Image.Save Method (Stream, ImageFormat)
将图像对象保存到流中
编辑:
如果我回顾一下您链接的示例中提供的代码:
private void SaveJpg(Image image, string file_name, long compression)
{
try
{
EncoderParameters encoder_params = new EncoderParameters(1);
encoder_params.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, compression);
ImageCodecInfo image_codec_info =
GetEncoderInfo("image/jpeg");
File.Delete(file_name);
using(var imageStream = new Stream()){
// save to stream
image.Save(imageStream, image_codec_info, encoder_params);
// upload
UploadImageToAmazon(imageStream);
}
}
catch (Exception ex)
{
MessageBox.Show("Error saving file '" + file_name +
"'\nTry a different file name.\n" + ex.Message,
"Save Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}
我想上传优化后的图片到亚马逊。
所以我找到了这个 article,它解释了如何使用压缩级别优化图像。
问题是这个例子将图像保存到磁盘,我需要将它保存到亚马逊存储。
我有这个代码:
public static ImageCodecInfo OptimizeImage(Image image, string fileName, long compression, string type)
{
var encoderParams = new EncoderParameters(1)
{
Param = {[0] = new EncoderParameter(Encoder.Quality, compression)}
};
return GetEncoderInfo(type);
}
private static ImageCodecInfo GetEncoderInfo(string mime_type)
{
ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
for (int i = 0; i <= encoders.Length; i++)
{
if (encoders[i].MimeType == mime_type)
return encoders[i];
}
return null;
}
我应该有一个 Stream
或 byte[]
对象,以便将其作为参数发送到 UploadImageToAmazon
方法。
所以,我有一个 Image 对象及其 ImageCodecInfo,如何将其转换为 Stream
或 byte[]
?
或者如果你能建议我如何优化图片并上传到亚马逊也很好。
谢谢。
您可以使用 Image.Save Method (Stream, ImageFormat)
将图像对象保存到流中编辑:
如果我回顾一下您链接的示例中提供的代码:
private void SaveJpg(Image image, string file_name, long compression)
{
try
{
EncoderParameters encoder_params = new EncoderParameters(1);
encoder_params.Param[0] = new EncoderParameter(
System.Drawing.Imaging.Encoder.Quality, compression);
ImageCodecInfo image_codec_info =
GetEncoderInfo("image/jpeg");
File.Delete(file_name);
using(var imageStream = new Stream()){
// save to stream
image.Save(imageStream, image_codec_info, encoder_params);
// upload
UploadImageToAmazon(imageStream);
}
}
catch (Exception ex)
{
MessageBox.Show("Error saving file '" + file_name +
"'\nTry a different file name.\n" + ex.Message,
"Save Error", MessageBoxButtons.OK,
MessageBoxIcon.Error);
}
}