Hi there
I'm having a strange behaviour (or maybe i don't know what i'm doing wrong) in which I try to convert a png image i have from 4bit format to 8bit format
using identify -verbose image.png
Depth: 8/4-bit
Channel depth:
gray: 4-bit
then i use mogrify image.png -depth 8 to change the depth of the image
then i use again identify -verbose image.png to see the results
Depth: 8/4-bit
Channel depth:
gray: 4-bit
but i expected
Depth: 8-bit
Channel depth:
gray: 4-bit
For more info i'm using ImageMagick-6.6.8-10-Q16-windows-x64 version with Windows 7 Ultimate 64
mogrify -depth problem
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: mogrify -depth problem
Mogrify does not work on individual images by name, but on whole folders of images. You either need to change your mogrify command syntax or use convert.then i use mogrify image.png -depth 8 to change the depth of the image
convert image.png -depth 8 resultimage.png
Note that depth is depth per channel. If you want an 8-bit palette image use PNG8:
convert image.png PNG8:resultimage.png
mogrify -format png -depth 8 *.png
see
http://www.imagemagick.org/Usage/basics/#cmdline
http://www.imagemagick.org/Usage/basics/#mogrify
http://www.imagemagick.org/Usage/formats/#png
Re: mogrify -depth problem
still not working properly
convert image.png -depth 8 resultimage.png -> resulted in
Format: PNG (Portable Network Graphics)
Class: PseudoClass
Geometry: 689x1112+0+0
Resolution: 39.37x39.37
Print size: 17.5006x28.2449
Units: PixelsPerCentimeter
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: Gray
Depth: 8/4-bit
Channel depth:
gray: 4-bit
convert image.png PNG8:resultimage.png -> results in
Format: PNG (Portable Network Graphics)
Class: PseudoClass
Geometry: 689x1112+0+0
Resolution: 39.37x39.37
Print size: 17.5006x28.2449
Units: PixelsPerCentimeter
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: RGB
Depth: 8/4-bit
Channel depth:
gray: 4-bit
(this one says 8/4 depth but then if i click properties in windows explorer says 8 bits instead of 4, the thing is that i see that the colorpsace changed from Gray to RGB which i don't know if it's correct or not)
mogrify -format png -depth 8 *.png -> results in
Format: PNG (Portable Network Graphics)
Class: PseudoClass
Geometry: 689x1112+0+0
Resolution: 39.37x39.37
Print size: 17.5006x28.2449
Units: PixelsPerCentimeter
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: Gray
Depth: 8/4-bit
Channel depth:
gray: 4-bit
convert image.png -depth 8 resultimage.png -> resulted in
Format: PNG (Portable Network Graphics)
Class: PseudoClass
Geometry: 689x1112+0+0
Resolution: 39.37x39.37
Print size: 17.5006x28.2449
Units: PixelsPerCentimeter
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: Gray
Depth: 8/4-bit
Channel depth:
gray: 4-bit
convert image.png PNG8:resultimage.png -> results in
Format: PNG (Portable Network Graphics)
Class: PseudoClass
Geometry: 689x1112+0+0
Resolution: 39.37x39.37
Print size: 17.5006x28.2449
Units: PixelsPerCentimeter
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: RGB
Depth: 8/4-bit
Channel depth:
gray: 4-bit
(this one says 8/4 depth but then if i click properties in windows explorer says 8 bits instead of 4, the thing is that i see that the colorpsace changed from Gray to RGB which i don't know if it's correct or not)
mogrify -format png -depth 8 *.png -> results in
Format: PNG (Portable Network Graphics)
Class: PseudoClass
Geometry: 689x1112+0+0
Resolution: 39.37x39.37
Print size: 17.5006x28.2449
Units: PixelsPerCentimeter
Type: Grayscale
Base type: Grayscale
Endianess: Undefined
Colorspace: Gray
Depth: 8/4-bit
Channel depth:
gray: 4-bit
Re: mogrify -depth problem
update: i tried using -verbose to see what the program is doing
C:\soft\prova>mogrify -verbose -format png -depth 8 *.png
1.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 246KB 0.016u 0:00.016
1.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 229KB 0.219u 0:00.108
2.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 246KB 0.031u 0:00.016
2.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 229KB 0.203u 0:00.108
20f5mhh.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 246KB 0.000u 0:00.000
20f5mhh.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 229KB 0.219u 0:00.110
the thing is that everytime i write the instruction i get the same results (246kb to 229kb) like if results do not overwrite the originals
i tried it under another computer running windows XP and i got the same results
C:\soft\prova>mogrify -verbose -format png -depth 8 *.png
1.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 246KB 0.016u 0:00.016
1.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 229KB 0.219u 0:00.108
2.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 246KB 0.031u 0:00.016
2.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 229KB 0.203u 0:00.108
20f5mhh.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 246KB 0.000u 0:00.000
20f5mhh.png PNG 689x1112 689x1112+0+0 8-bit PseudoClass 16c 229KB 0.219u 0:00.110
the thing is that everytime i write the instruction i get the same results (246kb to 229kb) like if results do not overwrite the originals
i tried it under another computer running windows XP and i got the same results
- fmw42
- Posts: 25562
- Joined: 2007-07-02T17:14:51-07:00
- Authentication code: 1152
- Location: Sunnyvale, California, USA
Re: mogrify -depth problem
What are you expecting? If you have 4-bit color in 8-bit format, that is the best you can do. You cannot get more colors that your 16 (4-bits) without dithering. All you can do is represent them as 8-bit values with large gaps of missing colors. Perhaps you can explain further what you really are trying to accomplish.
Re: mogrify -depth problem
PNG8 is 8-bit indexed RGB.
If you want 4-bit grayscale, use the current version (IM-6.6.9)
convert image.png -define PNG:bit-depth=4 -define PNG:color-type=0 image_4bit_gray.png
and hope for the best (PNG color-type 0 is opaque grayscale). This will fail
if you have any pixels that aren't in the 16-bit grayscale palette (#000000, #111111,
..., #ffffff), so be sure to reduce your image to that palette first (I think
you have already done that).
If you want 4-bit grayscale, use the current version (IM-6.6.9)
convert image.png -define PNG:bit-depth=4 -define PNG:color-type=0 image_4bit_gray.png
and hope for the best (PNG color-type 0 is opaque grayscale). This will fail
if you have any pixels that aren't in the 16-bit grayscale palette (#000000, #111111,
..., #ffffff), so be sure to reduce your image to that palette first (I think
you have already done that).
Re: mogrify -depth problem
As of ImageMagick-6.6.9-10, SVN revision r4475, the PNG encoder respects the -depth setting, even for depths 1, 2, 4.
Before processing the image, coders/png.c reduces all pixels, colormap entries, and the background color in its own copy of the image to the specified bit depth by
1) scaling them to 8 bits using ImageMagick's existing scaling macros
2) replacing the low bits using "left-bit-replication" as described in the PNG specificatio
3) expanding back to the Quantum depth using ImageMagick's existing scaling macros.
Depths not in the PNG specification are handled as a valid depth (anything greater than
8 is treated as 16; 5, 6, and 7 as 8; and 3 as 4).
Before processing the image, coders/png.c reduces all pixels, colormap entries, and the background color in its own copy of the image to the specified bit depth by
1) scaling them to 8 bits using ImageMagick's existing scaling macros
2) replacing the low bits using "left-bit-replication" as described in the PNG specificatio
3) expanding back to the Quantum depth using ImageMagick's existing scaling macros.
Depths not in the PNG specification are handled as a valid depth (anything greater than
8 is treated as 16; 5, 6, and 7 as 8; and 3 as 4).