我知道我可以使用自动程序批量修剪图像以达到水平方向 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,因为我从未使用过该程序,但它可能可以做到。