[英]C# Image Compression - Causing Image to Crop
我正在壓縮使用Telerik RadAsyncUpload控件上傳的圖像。
在后端,我獲取上載的文件輸入流(Stream類),並將其傳遞給此壓縮方法:
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文件夾等。
我一輩子都無法弄清楚為什么它會裁剪圖像而不是壓縮圖像。 字節較小,寬度和高度相同,並且只是不顯示圖像的任何部分。
有任何想法嗎?
我終於讓它工作了。 我將方法移入字節列表(也就是上傳的文件)的傳遞位置,並將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();
}
}
}
感謝您的建議!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.