web-dev-qa-db-ja.com

オートマトンを使用して画像を左に50%バッチトリミングするにはどうすればよいですか?

オートマトンを使用して画像を50%水平にバッチトリミングできることは知っていますが、両側でトリミングされます...左側/右側だけで50%トリミングする必要があります。

1
mesqueeb

Automatorについては知りません。この種のことには(コマンドラインで)bashを使用します。

ImageMagickがインストールされている場合( homebrew から取得できるはずです)、 convert を使用して画像の片側または別の側を切り取ることができます。

これにより、画像の左側が表示されます(したがって、右半分が切り取られます)。

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

No cropping になります Left-hand side

これにより、右側が表示されます(画像の左半分を切り取ります)。

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

No cropping になります Right-hand side

指定されたディレクトリ内の.pngで終わるすべてのファイルを処理するには、bashforループに入れます。

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が作成されます)。個別の出力を作成せずにファイルを操作するには、 mogrifyconvertのコンパニオンツール)を使用します。もちろん、これは既存のファイルを上書きするので、使用には注意してください。 Mogrifyはコマンドラインから複数の入力を受け取ることができるため、ここでforループを使用する必要はありません。

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

本当に膨大な数のファイル(数千)で作業している場合、上記のグロブが詰まる可能性があります。その場合は、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に合わせる方法がわかりませんが、おそらくそれは可能です。

3
evilsoup