【发布时间】:2014-02-06 00:50:17
【问题描述】:
我在网站上进行了一项裁剪图像的操作,但是最终的裁剪图像在文件大小方面明显变大(原始图像为 24k,裁剪图像为 650k)。所以我发现我需要在保存之前对图像进行一些压缩。我想出了以下几点:
public static System.Drawing.Image CropImage(System.Drawing.Image image, Rectangle cropRectangle, ImageFormat format)
{
var croppedImage = new Bitmap(cropRectangle.Width, cropRectangle.Height);
using (var g = Graphics.FromImage(croppedImage))
{
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.DrawImage(
image,
new Rectangle(new Point(0,0), new Size(cropRectangle.Width, cropRectangle.Height)),
cropRectangle,
GraphicsUnit.Pixel);
return CompressImage(croppedImage, format);
}
}
public static System.Drawing.Image CompressImage(System.Drawing.Image image, ImageFormat imageFormat)
{
var bmp = new Bitmap(image);
var codecInfo = EncoderFactory.GetEncoderInfo(imageFormat);
var encoder = System.Drawing.Imaging.Encoder.Quality;
var parameters = new EncoderParameters(1);
var parameter = new EncoderParameter(encoder, 10L);
parameters.Param[0] = parameter;
using (var ms = new MemoryStream())
{
bmp.Save(ms, codecInfo, parameters);
var resultImage = System.Drawing.Image.FromStream(ms);
return resultImage;
}
}
我将质量设置为低只是为了看看是否有任何变化。没有。作物在外观上被正确保存,但压缩并不令人愉快。如果我完全绕过 CompressImage(),文件大小和图像质量似乎都没有任何不同。
所以,有 2 个问题。为什么什么都没有发生?有没有一种更简单的方法可以将生成的图像压缩为“网络优化”,类似于 Photoshop 保存网络图像的方式(我认为它只是从中剥离了很多信息以减小尺寸)。
【问题讨论】:
-
您正在读取和保存什么图像格式? BMP 几乎不压缩。 PNG 或 JPG 压缩得更好。我可以轻松地将 giong 从 24k PNG 成像到 650k BMP。
-
我正在使用 png/jpg 格式阅读。 Bitmap 只是一个中间对象
-
问题不在于你在读什么……而是你在保存什么。请检查 condecInfo 和 paramets 对象的正确设置...也许您保存的图像质量比原始图像更高...
标签: c# image-compression