How can imagemagick determine the bit depth of a image need

Questions and postings pertaining to the development of ImageMagick, feature enhancements, and ImageMagick internals. ImageMagick source code and algorithms are discussed here. Usage questions which are too arcane for the normal user list should also be posted here.
Post Reply
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

I have a png image which is 8 bit depth, when I scale it to 80%, the bit depth become 16.

convert -resize 80% 58a40d9d85367.png 58a40d9d85367.im.png

Image
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: How can imagemagick determine the bit depth of a image need

Post by fmw42 »

Your syntax is wrong, but IM 6 is forgiving. IM 7 will not be forgiving. ImageMagick does not follow the usual Unix syntax, but expects you to read a raster input image before applying processing commands to it, and then write the output.

See https://imagemagick.org/Usage/basics/#why

When I do (IM 6.9.10.15 Q16 or IM 7.0.8.15 Q16 HDRI Mac OSX Sierra):

Code: Select all

convert 58a40d9d85367.png -resize 80% tmp.png
identify -verbose tmp.png
Image: tmp.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 640x640+0+0
Units: Undefined
Colorspace: sRGB
Type: TrueColorAlpha
Base type: Undefined
Endianess: Undefined
Depth: 8-bit
Channel depth:
red: 8-bit
green: 8-bit
blue: 8-bit
alpha: 8-bit
....

It is still 8-bit depth. What is your IM version and platform? Please always provide that when asking questions.

____________________


Please, always provide your IM version and platform when asking questions, since syntax may differ.

Also provide your exact command line and your images, if possible.

See the top-most post in this forum "IMPORTANT: Please Read This FIRST Before Posting" at http://www.imagemagick.org/discourse-se ... f=1&t=9620

If using Imagemagick 7, then see http://imagemagick.org/script/porting.php#cli


For novices, see

http://www.imagemagick.org/discourse-se ... f=1&t=9620
http://www.imagemagick.org/script/comma ... essing.php
http://www.imagemagick.org/Usage/reference.html
http://www.imagemagick.org/Usage/
https://github.com/ImageMagick/usage-markdown
https://imagemagick.org/script/porting.php#cli
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

I try your command both in macos and centos7.2, both reuslt png is 16 bit depth

$ uname -a
Darwin MBA.local 18.2.0 Darwin Kernel Version 18.2.0: Fri Oct 5 19:41:49 PDT 2018; root:xnu-4903.221.2~2/RELEASE_X86_64 x86_64
$ convert -version
Version: ImageMagick 7.0.8-12 Q16 x86_64 2018-10-15 https://imagemagick.org
Copyright: © 1999-2018 ImageMagick Studio LLC
License: https://imagemagick.org/script/license.php
Features: Cipher DPC HDRI Modules
Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff webp xml zlib

Image: tmp.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 640x640+0+0
Units: Undefined
Colorspace: sRGB
Type: TrueColorAlpha
Base type: Undefined
Endianess: Undefined
Depth: 16-bit
Channel depth:
Red: 16-bit
Green: 16-bit
Blue: 16-bit
Alpha: 16-bit
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

It result in a bigger size png when resize.

and version in centos7.2
Version: ImageMagick 7.0.8-12 Q16 x86_64

$ uname -a
Linux 3.10.0-862.2.3.el7.x86_64 #1 SMP Wed May 9 18:05:47 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
$ identify -verbose tmp.png
Image: tmp.png
Format: PNG (Portable Network Graphics)
Mime type: image/png
Class: DirectClass
Geometry: 640x640+0+0
Units: Undefined
Colorspace: sRGB
Type: TrueColorAlpha
Base type: Undefined
Endianess: Undefined
Depth: 16-bit
Channel depth:
Red: 16-bit
Green: 16-bit
Blue: 16-bit
Alpha: 16-bit
Channel statistics:
Last edited by tczf1128 on 2019-02-26T02:57:07-07:00, edited 2 times in total.
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: How can imagemagick determine the bit depth of a image need

Post by fmw42 »

Can you try upgrading to the latest version. If not add -depth 8 to your command.
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

It works when I upgrade imagemagick from 7.0.8-12 to 7.0.8-14, but the size of resized image is bigger than the original one.
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: How can imagemagick determine the bit depth of a image need

Post by fmw42 »

On IM 7.0.8.15 Q16 Mac OSX Sierra, the result is smaller by about half (125K for the result vs 216K for the original)

Code: Select all

magick 58a40d9d85367.png -resize 80% tmp.png
magick identify 58a40d9d85367.png tmp.png
58a40d9d85367.png PNG 800x800 800x800+0+0 8-bit sRGB 216289B 0.000u 0:00.000
tmp.png PNG 640x640 640x640+0+0 8-bit sRGB 124812B 0.000u 0:00.000
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

try this png
http://test-1257746263.picsh.myqcloud.c ... e7c984.png

Code: Select all

convert  7a063c32e5c29a16fda4c02842e7c984.png -resize 80% tmp.png
-rw-r--r-- 1 tczf staff 45K 12 3 22:44 7a063c32e5c29a16fda4c02842e7c984.png
-rw-r--r--@ 1 tczf staff 211K 12 3 19:31 58a40d9d85367.png
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

And another question.
16 bit depth png to be resized 60%, its depth still 16 bit?
I try this imagehttp://test-1257746263.picsh.myqcloud.c ... Snap20.png and the result is 16 depth
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: How can imagemagick determine the bit depth of a image need

Post by fmw42 »

tczf1128 wrote: 2018-12-05T22:24:23-07:00 try this png
http://test-1257746263.picsh.myqcloud.c ... e7c984.png

Code: Select all

convert  7a063c32e5c29a16fda4c02842e7c984.png -resize 80% tmp.png
-rw-r--r-- 1 tczf staff 45K 12 3 22:44 7a063c32e5c29a16fda4c02842e7c984.png
-rw-r--r--@ 1 tczf staff 211K 12 3 19:31 58a40d9d85367.png
This input image is 8-bit palette (pseudo color), when you resize you get more colors introduced which in this case is more the 256 colors so the result is converted to 24-bit color. To prevent this, write it as

Code: Select all

convert  7a063c32e5c29a16fda4c02842e7c984.png -resize 80% PNG8:tmp.png
To convert back to palette type.
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: How can imagemagick determine the bit depth of a image need

Post by fmw42 »

tczf1128 wrote: 2018-12-06T00:00:11-07:00 And another question.
16 bit depth png to be resized 60%, its depth still 16 bit?
I try this imagehttp://test-1257746263.picsh.myqcloud.c ... Snap20.png and the result is 16 depth
16-bit images will convert to 16-bit images unless you specify -density 8

try

Code: Select all

convert LeftSnap20.png -resize 80% -depth 8 result.png
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

So how can I know a 16 depth png can convert a 8 bit depth png without distortion. I'm using the magickWand api
User avatar
fmw42
Posts: 25562
Joined: 2007-07-02T17:14:51-07:00
Authentication code: 1152
Location: Sunnyvale, California, USA

Re: How can imagemagick determine the bit depth of a image need

Post by fmw42 »

tczf1128 wrote: 2018-12-06T00:19:07-07:00 So how can I know a 16 depth png can convert a 8 bit depth png without distortion. I'm using the magickWand api
You will always lose some quality going from 16-bit to 8-bit, but it may not be visually noticeable. You have to decide what you want to do here.
tczf1128
Posts: 28
Joined: 2018-12-04T22:47:49-07:00
Authentication code: 1152

Re: How can imagemagick determine the bit depth of a image need

Post by tczf1128 »

Thanks so much
Post Reply