toc777
toc777

Reputation: 2697

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

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 CandyBar.png +dither -colors 300 -depth 8 smallerCandyBar.png

Upvotes: 1

Views: 3327

Answers (3)

Kornel
Kornel

Reputation: 100120

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.

Upvotes: 1

Pasi Savolainen
Pasi Savolainen

Reputation: 2500

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.

Upvotes: 3

Daniel
Daniel

Reputation: 28084

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

Upvotes: 0

Related Questions