1

我正在使用内存流通过 FileUpload 控件调整图像大小。在它调整大小后,我希望它保存到我的文件系统中"~/images/2012/" + filename

如何从内存流中保存图像?

System.Drawing.Image imageLarge = System.Drawing.Image.FromStream(stream);
System.Drawing.Image imageLarge1 = ResizeImage(imageLarge, 200, 300);

MemoryStream memolarge = new MemoryStream();
imageLarge1.Save(memolarge, System.Drawing.Imaging.ImageFormat.Jpeg);
System.Drawing.Image returnImage = System.Drawing.Image.FromStream(memolarge);

Encoder myEncoder;
EncoderParameter myEncoderParameter;
EncoderParameters myEncoderParameters;
myEncoder = Encoder.Quality;
myEncoderParameter = new EncoderParameter(myEncoder, 100L);
myEncoderParameters.Param[0] = myEncoderParameter;

string convertedImage = returnImage.ToString();
returnImage.Save("~/images/2012/" + filename, 
    ImageFormat.Jpeg, myEncoderParameters);

这是我与重载方法错误相处的错误:

无法从“System.Drawing.Imaging.ImageFormat”转换为 System.Drawing.Imaging.ImageCodecInfo

4

3 回答 3

4

查看 的重载Image.Save

只有最后两个接受EncoderParameters,而且他们都不接受ImageFormat- 都接受ImageCodecInfo

能够自己诊断此类问题非常重要:

  • 仔细看编译错误
  • 阅读文档
  • 检查您拨打的电话是否有意义

这与特别保存到 a 无关MemoryStream- 事实上,尚不清楚为什么要保存 anImage然后立即Image从同一流中加载 an 。Position(无论如何,如果您真的想继续这样做,我建议您在这样做之前将其设置为 0。)

于 2012-10-03T18:52:58.033 回答
2

试试这条线:

returnImage.Save(
    "~/images/2012/" + filename,
    ImageCodecInfo.GetImageEncoders()
        .Where(i => i.MimeType == "image/jpeg")
        .First(),
    myEncoderParameters);
于 2012-10-03T18:51:54.747 回答
0

请参阅在 c# 中从 memorystream 中保存为 jpeg后, 它的功能与您正在寻找的内容非常相似。

还要正确更改编解码器 http://msdn.microsoft.com/en-us/library/ytz20d80.aspx

于 2012-10-03T18:59:14.467 回答