簡體   English   中英

使用C#和ASP.NET從Memorystream保存圖像

[英]Save Image from Memorystream using C# and ASP.NET

我正在使用內存流通過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.ImageCodeccInfo

查看Image.Save的重載。

只有最后兩個接受EncoderParameters ,並且它們都不接受ImageFormat都接受ImageCodecInfo

能夠自己診斷此類問題非常重要:

  • 仔細看看編譯器錯誤
  • 閱讀文檔
  • 檢查您撥打的電話是否有意義

特別是,這與保存到MemoryStream沒有關系-實際上,不清楚為什么要保存Image ,然后立即從同一流中加載Image (如果您確實想繼續這樣做,我建議您在將Position設置為0之前還是這樣做。)

嘗試以下這一行:

returnImage.Save(
    "~/images/2012/" + filename,
    ImageCodecInfo.GetImageEncoders()
        .Where(i => i.MimeType == "image/jpeg")
        .First(),
    myEncoderParameters);

請參閱在c#中從memorystream中將另存為jpeg,這與您正在尋找的功能非常相似。

也可以正確更改編解碼器http://msdn.microsoft.com/zh-cn/library/ytz20d80.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM