ImageMagick identify — 查看图片信息
用 ImageMagick identify 读取图片尺寸、格式、色深、EXIF 和页数。含格式字符串占位符和适合写进脚本的一行命令。
identify 只读文件头而不解码整张图,所以对上千个文件批量跑也很便宜。ImageMagick 7 上写作 magick identify,IM6 上直接是 identify。
快速摘要
identify photo.jpg
photo.jpg JPEG 1600x900 1600x900+0+0 8-bit sRGB 62790B 0.000u 0:00.000
第二个几何值是画布尺寸 —— 对裁切过的图,它会暴露出那个用 +repage 才能清掉的虚拟画布。
只看你要的字段
identify -format '%f %wx%h %m %b\n' *.jpg
这是写进脚本时该用的形式 —— 一个文件一行,干净,不用解析。
常用占位符
| 占位符 | 含义 |
|---|---|
%f | 文件名 |
%w / %h | 宽 / 高(像素) |
%m | 格式(JPEG、PNG……) |
%b | 文件体积 |
%n | 帧数或页数 |
%Q | JPEG 保存时的质量 |
%[colorspace] | 色彩空间 |
%z | 位深 |
%A | 是否有 alpha 通道 |
%[EXIF:*] | 全部 EXIF 标签 |
不装别的工具直接读 EXIF
identify -format '%[EXIF:*]' photo.jpg
identify -format '%[EXIF:DateTimeOriginal] %[EXIF:Model]\n' photo.jpg
统计 PDF 页数或 GIF 帧数
identify -format '%n\n' document.pdf
identify -format '%n\n' animation.gif
查看全部信息
identify -verbose photo.jpg
输出很长,建议接 grep 或 head。里面包含颜色直方图,在量化之前想知道一张图实际用了多少种颜色时很有用。
反查 JPEG 的保存质量
identify -format '%Q\n' photo.jpg
ImageMagick 是从量化表估算的。用比原始质量更高的数值重新编码不会恢复画质,只会让文件更大。保持相同或略低即可。
找出不符合规则的图片
# 宽度超过 3000 像素的
identify -format '%w %f\n' *.jpg | awk '$1 > 3000 {print $2}'
# 不是 sRGB 的
identify -format '%[colorspace] %f\n' *.jpg | grep -v '^sRGB'
检查文件是不是扩展名声称的那种格式
identify -format '%m %f\n' *.png | grep -v '^PNG'
批量处理之前先跑一下很有用,对用户上传也算一个便宜的初步检查 —— 但它本身不构成安全防护。