嗨大家我正在用C#调整图像大小并将它们保存为.png。
public static Bitmap resize(int x, int y, Image p)
{
Bitmap Img = new Bitmap(x,y);
using (Graphics gr = Graphics.FromImage(Img))
{
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.DrawImage(p, new Rectangle(0, 0, x, y));
}
return Img;
}
问题在于,当用户从诸如galaxys,iphone等高端智能手机上传高质量图像(例如图像)时,所得到的调整大小的图像的文件大小非常高。 我构建了一个调整大小的图像文件大小和像素大小的表。
1) Img1 1280 * 666px => 458 kb
2) Img1 300 * 399px => 221kb
3) Img2 1280 * 1444px => 2.08mb
4) Img2 300 * 451px => 327kb
我知道为了示例目的,我将插值和平滑设置为高质量,并将图像保存为.png以保持透明度。但是我应该更改什么设置才能获得合理质量的图像并且文件化理想的HTML页面。我的最终目标是在图像质量和FileSize之间做出妥协。因此,请指出一些链接,展示Filsesize与质量比较的质量调整图像,以便我自己做出选择。
答案 0 :(得分:3)
您可以使用一个选项PixelFormat
。
using (Bitmap bmp = new Bitmap(x, y,
System.Drawing.Imaging.PixelFormat.Format32bppArgb))
{
using (Graphics gr = Graphics.FromImage(bmp))
{
gr.SmoothingMode = SmoothingMode.HighQuality;
gr.InterpolationMode = InterpolationMode.HighQualityBicubic;
gr.PixelOffsetMode = PixelOffsetMode.HighQuality;
gr.DrawImage(src, new Rectangle(0, 0, x, y));
}
}
仅在需要Alpha通道时才使用32位Argb(例如图像是透明的)。您还可以查询img.PixelFormat
以查看图片是否包含Alpha通道!
在这种情况下,您不必将其保存为PNG,并且可以使用JPG,这将导致更小的文件!
普通jpg通常使用Format24bppRgb
。
答案 1 :(得分:0)
使用JPEG而不是adjust the compression来获得所需的质量。