ImageMagick 旋转与翻转
用 ImageMagick 旋转和翻转图片。用 -auto-orient 修正手机拍出来横躺的照片,任意角度旋转,以及 -flip 与 -flop 的区别。
修正横躺的照片
手机是按传感器方向存图,再用一个 EXIF 标签告诉看图软件该转多少度。有些软件认这个标签,有些不认 —— 所以同一个文件在这个 app 里是正的,在另一个里就躺着。
magick input.jpg -auto-orient output.jpg
-auto-orient 把旋转真正写进像素并清掉标签,这样所有看图软件的表现就一致了。
一定要在裁切之前做。 先裁的话,你的坐标是针对没转正的图算的,裁出来的位置会莫名其妙。
直角旋转
magick input.jpg -rotate 90 output.jpg # 顺时针
magick input.jpg -rotate 270 output.jpg # 逆时针
magick input.jpg -rotate 180 output.jpg
直角旋转在像素层面是无损的,但重新编码 JPEG 依然会损失一代画质。如果在意,用 jpegtran -rotate 90,它不重新编码。
任意角度旋转
magick input.jpg -background white -rotate 15 output.jpg
非直角旋转会撑大画布,新出现的角落用 -background 填充。想让这些角落透明就设成 none 并输出 PNG:
magick input.png -background none -rotate 15 output.png
-flip 和 -flop 的区别
| 参数 | 效果 |
|---|---|
-flip | 垂直翻转 —— 上下颠倒 |
-flop | 水平镜像 —— 左右互换 |
几乎所有人第一次都会记反。想做「镜子里的自拍」那种效果,你要的是 -flop。
转置与转轴
magick input.jpg -transpose output.jpg # flip 加旋转 90
magick input.jpg -transverse output.jpg # flop 加旋转 90
把扫描件摆正
ImageMagick 可以自动估算并修正轻微的倾斜:
magick input.jpg -background white -deskew 40% +repage output.jpg
那个百分比是阈值,不是角度。白纸黑字的扫描件从 40% 起步比较合适。后面再加 -fuzz 5% -trim 可以把产生的白边裁掉。
批量修正整个文件夹的朝向
mkdir -p out
for f in *.jpg; do magick "$f" -auto-orient "out/$f"; done