imagemagick:如何缩放和裁剪图像文件夹?

时间:2018-08-09 11:07:59

标签: image-processing

我一直在查看imagemagick的文档,并查看其他人制作的脚本示例,但是我无法使它正常工作。

目标是使imagemagick缩放,裁切并保存(将尺寸附加到文件名中)多个具有各种纵横比的调整大小的图像。

例如,包含Image1.png和Image2.png的文件夹将导致:

Image1_1571x2646.png, Image1_1350x2150.png, Image1_1281x2039.png

Image2_1571x2646.png, Image2_1350x2150.png, Image2_1281x2039.png

视觉辅助:

Animated example of batch scaling and cropping

上面的动画显示了最简单的示例:1:1正方形,垂直矩形和水平矩形。

图像应缩放以适合矩形的最长尺寸,然后裁剪所有剩余的像素。缩放和裁剪应相对于图像中心进行。

这是我到目前为止(使用macOS Terminal)所拥有的,但是它不起作用:

convert *.png -path /Users/user/Resized \
          \( +clone -resize "1571x2646^” -gravity center -crop 1571x2646+0+0 +repage resultimage -write 1571x2646.png +delete \) \
          \( +clone -resize "1350x2150^” -gravity center -crop 1350x2150+0+0 +repage resultimage -write 1350x2150.png +delete \) \
                    -resize "1281x2039^” -gravity center -crop 1281x2039+0+0 +repage resultimage        1281x2039.png

我不确定我应该使用 mogrify 还是 convert ,但是如果我使用mogrify clone ,则会出现错误。我也不确定是否需要将多行指令放入.sh文件或其他内容。 ^ 表示应优先处理的维度(较大的维度)。我相信重心应该相对于图像中心保持缩放和裁剪。许多谜团。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:1)

对于Imagemagick,必须使用convert。 Mogrify无法处理括号过程和克隆,也无法为给定输入编写多个输出。 ^是正确的方式,-重心是正确的。您将必须遍历每个输入图像。我认为您无法使用通配符通过这种类型的命令一次处理多个图像。我认为-path仅用于移植。

我会在每个输入图像上写一个循环(bash unix语法):

cd
cd /Users/user/Resized/
list=`ls`
for img in $list; do
name=`convert "$img" -format "%t" info:`
convert "$img" \
\( -clone 0 -resize "1571x2646^" -gravity center -crop 1571x2646+0+0 +repage +write ${name}_1571x2646.png +delete \) \
\( -clone 0 -resize "1350x2150^" -gravity center -crop 1350x2150+0+0 +repage +write ${name}_1350x2150.png +delete \) \
\( -clone 0 -resize "1281x2039^" -gravity center -crop 1281x2039+0+0 +repage +write ${name}_1281x2039.png +delete \) \
null:
done


以上假设您输入的图像名称中没有空格。

我已经从+ clone更改为-clone 0,因为我不确定是否将宽高比从输出更改为输出是否会导致问题。您可以尝试两种方式,看看哪种看起来最好。