ImageMagick 旋转和裁剪批量图像

ImageMagick rotate and crop batch images

我正在尝试使用 ImageMagick 来模拟 Gimp 的旋转和裁剪功能,以便在一批图像上使用它。

我会在 Gimp 中做的是打开 .jpg 图像,使用具有以下选项的旋转工具:0.2°、三次插值和按原始图像比例裁剪。之后,在图像边界周围再裁剪一下,过程就完成了,我可以将图像另存为 .png

我没有使用 Gimp,因为内置过程 gimp-drawable-transform-rotate-default 只接受带两位小数的弧度。我试图找到一种方法来编辑该 procudere 并创建我自己的,但我无法这样做

我也建议使用 ImageMagick,因为批处理非常大(50k+ 图像),因此,你能帮我用控制台命令来模拟我用 Gimp 做什么吗?特别重要的部分是原始图像比例

的裁剪

编辑:

当您旋转图像时,如果 ° 不是 90-180-270 等,图像的大小会增加,因此必须创建新的像素。以下作物必须:

  1. 删除旋转过程中添加的所有像素以填充空白
  2. 最终比例必须尽可能接近初始比例
  3. 原始图像中出现的要裁剪的内容(裁剪必须居中)必须尽可能少

基本上你不应该仅仅通过查看就能看出原始图像和编辑图像之间的差异

我为 Gimp 描述的过程已经完成了所有工作,但它一次只能处理一张图像

这是一个使用 ImageMagick 6 的例子。

首先,我获取并打印输入纵横比。然后我将它旋转了 0.2 度。然后我trim把它去掉黑边。然后我将其裁剪为输入纵横比并打印输出纵横比。 Unix 语法如下。

输入:

aspect=`convert barn.jpg -format "%w:%h" info:`
convert barn.jpg -format "input_aspect=%[fx:w/h]\n" -write info: -background black -rotate 0.2 barn_rotated.png

input_aspect=1.33779


convert barn_rotated.png -fuzz 16% -define trim:percent-background=0% -trim +repage \
-gravity center -crop "$aspect" +repage -format "output_aspect=%[fx:w/h]\n" -write info: barn_cropped.jpg

output_aspect=1.33969


如果使用 ImageMagick 7,您可以在一个命令行中完成所有操作:

magick barn.jpg -set option:aspect "%w:%h" -format "input_aspect=%[fx:w/h]\n" -write info: \
-background black -rotate 0.2 +write barn_rotated.png \
-fuzz 16% -define trim:percent-background=0% -trim +repage \
-gravity center -crop "%[aspect]" \
+repage -format "output_aspect=%[fx:w/h]\n" -write info: \
barn_cropped.jpg


模糊值将取决于图像。

这也许是一个更好的方法(使用 ImageMagick 6)。与其依赖于 trim 旋转图像黑色边框的模糊值,不如根据旋转角度和图像尺寸计算需要从每一侧剃掉的量。 (Unix 语法)

输入(原创)

angle=0.2
convert barn.jpg -background black -rotate $angle barn_rotated.png


旋转图像:

WxH=`convert barn.jpg -format "%wx%h" info:`
ww=`echo "$WxH" | cut -dx -f1`
hh=`echo "$WxH" | cut -dx -f2`
aspect="${ww}:${hh}"
xshave=`convert xc: -format "%[fx:ceil($hh*sin($angle*pi/180))+1]" info:`
yshave=`convert xc: -format "%[fx:ceil($ww*sin($angle*pi/180))+1]" info:`
convert barn_rotated.png -shave ${xshave}x${yshave} \
-gravity center -crop "$aspect" +repage barn_rotated_shaved_cropped.png


剃光并裁剪成纵横比图像:

如果使用 ImageMagick 7,请将 convert 替换为 magick。