【问题标题】:How to scale and crop a folder of images?如何缩放和裁剪图像文件夹?
【发布时间】:2019-10-30 17:07:31
【问题描述】:

我一直在查看 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

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

【问题讨论】:

    标签: image-processing


    【解决方案1】:

    使用 Imagemagick,您必须使用转换。 Mogrify 不能处理括号过程和克隆,也不能为给定输入编写多个输出。 ^ 是正确的方式, -gravity center 是正确的。您将不得不遍历每个输入图像。我认为您不能使用通配符通过这种类型的命令一次处理多个图像。我认为 -path 仅适用于 mogrify。

    我会在每个输入图像上编写一个循环(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,因为我不确定您是否将纵横比从输出更改为输出是否会导致问题。您可以尝试两种方式,看看哪种方式看起来最好。

    【讨论】:

    • 我把它放在一个 .sh 文件中,调整了文件路径,允许它运行,它运行完美。太感谢了!我会按照你的建议尝试 +clone 到 -clone 0 ......只是好奇,它们之间有什么区别?
    • +clone 复制镜像链中的前一个镜像。 -clone 0 复制图像链中的第一个图像。 -clone X 复制映像链中的第 X 个映像。使用 +clone,您可以从前一个调整大小的图像开始处理每个新图像。使用 -clone zero,您可以从输入图像调整大小以制作每个输出大小的图像。
    猜你喜欢
    • 2017-06-18
    • 1970-01-01
    • 2012-07-21
    • 2015-04-20
    • 1970-01-01
    • 2011-11-16
    • 2016-08-29
    • 1970-01-01
    • 2011-01-30
    相关资源
    最近更新 更多