Search code examples
imagemagickpngimagemagick-convert

How to create PNG image with color_type=3 and bit_depth=1


The source is an RGBA PNG image (color_type=6 and bit_depth=8).

I need an image with indexed color and 2 palette items (color_type=3, bit_depth=1).

I tried with ImageMagick, but was able to reach only 1bit grayscale image (color_type=0, bit_depth=1) or 2bit indexed color image (color_type=3, bit_depth=2) in which only 2 colors are in use.

According to the PNG specification such image is possible, but how to create it?

Here is an image I am trying to convert:

enter image description here

The result of "convert input.png -type palette -depth 1 output.png":

enter image description here

The result of "convert input.png -type palette -depth 1 -colors 2 output.png"

enter image description here

Both results have bit_depth=2, but the second one uses only 2 colors of 4 possible.


Solution

  • convert input.png -background white -type palette -depth 1 -colors 2 output.png

    works for me.

    (Why -depth=1 is not enough? No idea.)

    BTW, the tweakpng tool is useful for checking this kind of things.

    Update: if the images have transparency, you might play safer by removing it explicitly:

    convert input.png -background white -flatten -type palette -depth 1 -colors 2 output.png

    (You can replace white for your preference)