如何使用自动化程序批量修剪图像左侧的 50%?

如何使用自动化程序批量修剪图像左侧的 50%?

我知道我可以使用自动程序批量修剪图像以达到水平方向 50% 的效果,但这样一来两边都会被修剪...我需要只在左侧/右侧修剪 50% 的效果。

答案1

我不了解 Automator;我会使用 bash(在命令行上)来做这种事。

如果你安装了 ImageMagick(你可以从自制), 你可以使用转换切掉图像的一侧或另一侧。

这将为您提供图像的左侧(因此它将切掉右半部分):

convert input.png -crop 50%x100%+0+0 output.png

禁止剪裁变成左手边

这将为您提供右侧图像(切掉图像的左半部分):

convert input.png -gravity east -crop 50%x100%+0+0 output.png

禁止剪裁变成右侧

要对给定目录中以 结尾的每个文件执行操作.png,您可以将其放在 bash 中为了环形:

for f in *.png; do convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"; done

要以递归方式执行此操作(*.png工作目录中的每个以及*.png任何子目录中的每个),请使用 globstar:

shopt -s globstar; for f in **/*.png; do convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"; done

所有这些都将创建一个单独的输出文件(在这些示例中,每个file.png文件都将创建一个file-cropped.png)。若要在不创建单独输出的情况下处理文件,请使用mogrify(的配套工具convert)。当然,这个将覆盖你现有的文件,因此使用时要小心。Mogrify 能够从命令行获取多个输入,因此无需使用为了循环至此处:

mogrify -crop 50%x100%+0+0 *.png
##  Recursively:
shopt -s globstar; mogrify -crop 50%x100%+0+0 **/*.png

如果如果你正在处理大量的文件(数千个),上面的 glob 可能会阻塞;在这种情况下,你应该使用find

##  For convert:
find . -type f -name '*.png' -execdir bash -c 'convert "$0" -crop 50%x100%+0+0 "${0%.*}-cropped.png"' '{}' \;

##  For mogrify:
find . -type f -name '*.png' -execdir mogrify -crop 50%x100%+0+0 '{}' \;

你可以将其中任何内容放入 bash 脚本中,如下所示:

#!/usr/bin/env bash
for f in *.png; do convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"; done
exit 0

或者,一个更好看的版本:

#!/usr/bin/env bash
for f in *.png; do
  convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"
done
exit 0

...将其保存在名为以下内​​容的纯文本文件中,crop-left.sh并将其设置为可执行文件:

chmod u+x crop-left.sh

要从命令行使用它,它将是

./crop-left.sh

我不知道如何将其放入 Automator,因为我从未使用过该程序,但它可能可以做到。

相关内容