[英]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.