2014-11-06 63 views
0

我正在壓縮使用Telerik RadAsyncUpload控件上傳的圖像。C#圖像壓縮 - 導致圖像產生作用

在後端我得到的上傳的文件輸入流(流類),並把它傳遞給該壓縮方法:

private byte[] GetCompressedImage(Stream stream, ImageFormat format) 
    { 
     ImageCodecInfo imgCodec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid); 

     EncoderParameters codecParams = new EncoderParameters(1); 
     codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L); 

     using (Bitmap bitmap = new Bitmap(stream)) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       bitmap.Save(ms, imgCodec, codecParams); 
       return ms.ToArray(); 
      } 
     } 
    } 

我然後將字節添加到字節的列表表示上傳的每個文件(這個控制允許倍數)。然後我們將它傳遞到FTP文件夾等。

我不能爲我的生活弄清楚爲什麼它裁剪圖像而不是壓縮。字節較小,寬度和高度相同,只是不顯示圖像的任何部分。

任何想法?

+0

您能否顯示「將字節添加到字節列表的代碼?」 – 2014-11-06 17:50:37

+0

您是否嘗試過做一個bitmap.Save文件到您的web服務器上,或者返回原始圖像字節,以排除您的FTP代碼是原因。 – WhoIsRich 2014-11-06 18:06:04

回答

0

我終於搞定了。我將該方法移入我們在字節列表(即上傳的文件)中傳遞的位置,並將Image對象傳遞給方法而不是流。

/// <summary> 
    /// Compress the image 
    /// </summary> 
    /// <param name="stream">Image stream</param> 
    /// <param name="format">Image format</param> 
    /// <returns>Byte array representing the image</returns> 
    public static byte[] GetCompressedImage(Image original, ImageFormat format) 
    { 
     ImageCodecInfo imgCodec = ImageCodecInfo.GetImageEncoders().First(c => c.FormatID == format.Guid); 

     EncoderParameters codecParams = new EncoderParameters(1); 
     codecParams.Param[0] = new EncoderParameter(Encoder.Quality, 70L); 

     using (var bitmap = new Bitmap(original)) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       bitmap.Save(ms, imgCodec, codecParams); 
       return ms.ToArray(); 
      } 
     } 
    } 

感謝您的建議!