如何调整png格式c#的大小
本文关键字:格式 png 何调整 调整 | 更新日期: 2023-09-27 18:27:32
我需要做的是调整ImageFormat为PNG的图像大小。
现在我这样做:
public static byte[] ResizeImage(Image image, int width, int height)
{
byte[] result = new byte[65000];
var destRect = new Rectangle(0, 0, width, height);
var destImage = new Bitmap(width, height);
destImage.SetResolution(image.HorizontalResolution, image.VerticalResolution);
using (var graphics = Graphics.FromImage(destImage))
{
graphics.CompositingMode = CompositingMode.SourceCopy;
graphics.CompositingQuality = CompositingQuality.HighQuality;
graphics.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphics.SmoothingMode = SmoothingMode.HighQuality;
graphics.PixelOffsetMode = PixelOffsetMode.HighQuality;
using (var wrapMode = new ImageAttributes())
{
wrapMode.SetWrapMode(WrapMode.TileFlipXY);
graphics.DrawImage(image, destRect, 0, 0, image.Width, image.Height, GraphicsUnit.Pixel, wrapMode);
}
}
using (MemoryStream stream = new MemoryStream())
{
destImage.Save(stream, ImageFormat.Png);
result = stream.ToArray();
return result;
}
}
事情是在"最后阶段",我需要这个字节数组中的图像。这种调整大小的方法效果不佳,因为它会使图像"更重"。
通常我使用这种方法将图像转换为PNG:
public byte[] imageToByteArray(Image imageIn) {
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
return ms.ToArray();
}
但最终的"权重"(在imageTobyteArray之后)并不能满足我的要求,所以我想调整它的大小,使其"更轻"(resize方法)。
但最终结果是,我的Resize方法使它重了两倍,有什么想法吗?
@例如,在我截屏我的桌面(1366x768)并使用imageTobyteArray之后,它需要60000字节,然后我调整它的大小(例如1200x768),它在byteArray中需要150000字节。调整大小后不应该少于60000吗?如果我的想法是错误的,请纠正
您似乎混淆了图像复杂性和图像大小。
请查看原始1366x768图像中的实际像素。注意到图像看起来有多干净吗?东西的边缘是如何好看和锋利的,颜色计数是如何低的,等等?这是因为图像(相对)简单。
现在,使用任何你喜欢的方法调整图像的大小,并再次查看像素。在调整大小的过程中,边缘变得模糊。颜色计数很高,等等。总之,图像的复杂性增加了。
图像中的平滑渐变压缩真的很糟糕,大的颜色计数等等也是如此。这就是为什么你的小但更复杂的图像用PNG压缩得很糟糕的原因。如果您想要复杂图像的小文件大小,请使用JPEG并承受压缩伪影。