最好使用 Imagemagickidentify
命令来判断某个 PNG 是 PNG32、PNG24 还是 PNG8?
或给出样本深度(而不是像素深度),无论 PNG 格式如何,它始终为 8 或 16,而%z
或仅报告。%[depth]
%m
%[magick]
PNG
答案1
在较新的版本(2011-03-30 的 6.6.9-2 及更高版本)中,“identify -verbose”输出 IHDR.bit_depth 和 IHDR.color_type:
识别 -verbose g1.png | grep IHDR
png:IHDR.位深度: 1
png:IHDR.color_type : 0(灰度)
或者
识别 -verbose png24.png |查找 IHDR
png:IHDR.位深度:8
png:IHDR.color_type : 2(真彩色)
或者
识别 -verbose png64.png | grep IHDR
png:IHDR.位深度:16
png:IHDR.颜色类型:6(RGBA)
答案2
为了完成 Kyle 的回答,似乎你必须使用类似这样的方法(使用 IM 6.8.4 测试):
#!/bin/sh
type=$(identify -verbose $1 | sed -n "s/^.*png:IHDR.color_type.*(\(.*\))$/\1/p")
case "$type" in
Indexed)
depth=8
;;
Truecolor)
depth=24
;;
RGBA)
depth=32
;;
esac
echo $depth
答案3
有趣的问题,-verbose 输出 IHDR.color_type 值,更多信息这里。