imagemagick 将图像裁剪为特定的纵横比?

imagemagick 将图像裁剪为特定的纵横比?

给定一个图像,如何使用 imagemagick 将其调整为特定的纵横比?例如,调整为2:1

答案1

需要考虑两件事:

  1. 可轻松调整大小,有或没有宽高比转换
  2. 按照纵横比转换进行裁剪

我依次讨论一下:

1. 可简单调整大小,有或无宽高比转换

imagemagick默认情况下,将在转换过程中保持图像的预先存在的纵横比。使用此测试图像:

在此处输入图片描述

它的尺寸恰好为 100x100,尝试使用此语法调整为 300x150 将会默默地失败

convert test.png -resize 300x150 300_test.png

并将产生150x150图像:

在此处输入图片描述

为了强制imagemagick实际生成 2:1 宽高比的图像,需要使用以下略有不同的语法:

convert test.png -resize 300x150\! distort.png

这样就实现了 2:1 的宽高比,当然原始图像会失真:

在此处输入图片描述

2. 按照长宽比转换进行裁剪

如果您希望简单而自动地将图像裁剪为指定的纵横比,最简单的方法是使用以下方法之一Fred 的 ImageMagick 脚本:“Aspectcrop”在我们的测试图像上的用法很简单:

./aspectcrop -a 2:1 test.png Fred_wins.png

并且生成的图像已成功裁剪为 2:1 的比例:

在此处输入图片描述

另一个需要操作的选项是-g gravity定义图像的哪一部分用于裁剪。默认是中心,所有选项为:

  1. 中心(c)
  2. 北 (n)
  3. 東 (e)
  4. 西 (w)
  5. 西北
  6. 东北
  7. 西南, (sw)
  8. 东南 (se)

举个例子

./aspectcrop -a 2:1 -g n test.png north.png

结果是:

在此处输入图片描述

如果您需要使用此脚本批量加载单个目录中的图像,则可以使用 bash“for”循环。首先正确放置脚本并将其设置为可执行文件:

sudo mv aspectcrop /usr/local/bin
sudo chmod +x /usr/local/bin/aspectcrop

这使得使用脚本变得容易得多。然后从图像目录中运行“for”循环:

for i in *.png
do 
aspectcrop -a 2:1 -g n "$i" "${i%.png}_cropped.png"
done

此循环可以根据输入和输出文件的类型、不同的位置等而变化。您还可以生成类似的语法,以递归方式搜索图像。可能性很多...

我认为这一切都非常酷:)

参考:

答案2

这是用于检查文件夹中所有 jpg 的 4:3 比例的脚本。

#!/bin/sh

EXTENSION="*.jpg"

for file in $EXTENSION
do
        currAspect=$(identify -format "%[fx:w/h]" "$file")
        roundFloat=$(printf '%.*f\n' 3 "$currAspect")

        if [ $roundFloat != 1.333 ]
                then
                        echo "name: $file aspect: $currAspect rounded: $roundFl$
                fi
done

相关内容