如何调整png格式c#的大小

时间:2015-12-19 00:19:25

标签: c# resize compression png bytearray

我需要做的是调整ImageFormat为PNG的Image。

现在我这样做:

 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方法会让它变得更重,有什么想法吗?

@for示例在我截取桌面(1366x768)并使用imageTobyteArray后需要60,000个字节,然后我调整它(例如1200x768)并且在byteArray中需要150,000个字节。调整大小后不应少于6万?如果我的想法错了,请纠正我

1 个答案:

答案 0 :(得分:2)

您似乎将图像复杂性与图像大小混淆。

查看原始1366x768图像中的实际像素。请注意图像看起来有多干净?事物的边缘是如何美观和锐利,颜色数量相当低等等?这是因为这些图像(相对)简单。

现在使用您喜欢的任何方法调整图像大小,然后再次查看像素。通过调整大小过程,边缘变得模糊,模糊。颜色计数很好,等等。总之,图像复杂性增加了。

图像中的平滑渐变压缩非常,大量的颜色计数等等。这就是为什么你的较小但很多更复杂的图像压缩PNG的原因很差。如果您想要复杂图像的小文件大小,请使用JPEG并使用压缩工件。