开发者

Reducing colors in a PNG image is making the file size bigger

开发者 https://www.devze.com 2023-01-26 01:26 出处:网络
I am using ImageMagick to programmatically reduce the size of a PNG image by reducing the colors in the image. I get the images unique-colors and divide this by 2. Then I assign this value to the -col

I am using ImageMagick to programmatically reduce the size of a PNG image by reducing the colors in the image. I get the images unique-colors and divide this by 2. Then I assign this value to the -colors option as follows:

variable = unique-colors / 2

convert image.png -colors variable -depth 8

I thought this would substantially reduce the size of the image but instead it increases the images size on disk. Can anyone shed any light on this.

Thanks.

EDIT: Turns out the problem was dithering. Dithering helps your reduced color images look more like the originals but adds to the image size. To remove dithering in ImageMagick add +dither to your command. Example

convert 开发者_StackOverflowCandyBar.png +dither -colors 300 -depth 8 smallerCandyBar.png


Imagemagick probably uses some dithering algorithm to make image appear as though it has original amount of colors. This increases image data "randomness" (single pixels are recolored at some places to blend into other colors) and this image data no longer packs as well. Research further into how the convert command does the dithering. You can also see this effect by adding second image as a layer in gimp/equivalent program and tuning transparency.


You should use pngquant for this.

You don't need to guess number of colors, it has actual --quality setting:

pngquant --verbose --quality=70 image.png

The above will automatically choose number of colors needed to match given quality in the same scale as JPEG quality (100 = perfect, 70 = OK, 20 = awful).

pngquant has substantially better quantization algorithm, and the better the quantization the better quality/filesize ratio.

And pngquant doesn't dither areas that look good without dithering, and this avoids adding unnecessary noise/randomness to the file.


The "new" PNG's compression is not as good as the one of the original.

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号