Image processing 如何缩放和裁剪图像文件夹?

Image processing 如何缩放和裁剪图像文件夹?,image-processing,Image Processing,我一直在看imagemagick的文档和其他人制作的脚本示例,但我一直无法让它正常工作 目标是让imagemagick缩放、裁剪和保存(将尺寸添加到文件名中)多个不同纵横比的已调整大小的图像 例如,包含Image1.png和Image2.png的文件夹将导致: Image1_1571x2646.png, Image1_1350x2150.png, Image1_1281x2039.png Image2_1571x2646.png, Image2_1350x2150.png, Image2_12

我一直在看imagemagick的文档和其他人制作的脚本示例,但我一直无法让它正常工作

目标是让imagemagick缩放、裁剪和保存(将尺寸添加到文件名中)多个不同纵横比的已调整大小的图像

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

Image1_1571x2646.png, Image1_1350x2150.png, Image1_1281x2039.png

Image2_1571x2646.png, Image2_1350x2150.png, Image2_1281x2039.png
视觉辅助:

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

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

以下是我到目前为止(使用macOS终端)的情况,但它不起作用:

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

我不确定我是否应该使用mogrifyconvert,但如果我使用mogrifyclone会出现错误。我也不确定是否需要将多行指令放入.sh文件或其他文件中。^表示应优先考虑的维度(较大的维度)。我相信-重心应保持相对于图像中心的缩放和裁剪。

对于Imagemagick,必须使用convert。Mogrify无法处理括号进程和克隆,也无法为给定输入写入多个输出。^是正确的方式,-重心是正确的。您必须在每个输入图像上循环。我不认为您可以使用通配符使用这种类型的命令一次处理多个图像。我认为这条路只适合莫格里菲

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


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


我已从+clone更改为-clone 0,因为我不确定是否将纵横比从输出更改为输出,这是否会导致问题。您可以尝试这两种方法,看看哪一种效果最好。

我将它放在一个.sh文件中,调整了文件路径,授予了它运行权限,它运行起来完美无缺。非常感谢你!我将按照您的建议尝试从+克隆到-克隆0。。。只是好奇,它们之间有什么区别?+克隆复制图像链中的前一个图像-克隆0复制映像链中的第一个映像-克隆X复制映像链中的第X个映像。使用+克隆,您将从上一个调整大小的图像开始处理每个新图像。使用-clone zero,您可以从输入图像调整大小,以使每个输出图像大小相同。
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