水平方向の中央に配置されているが、垂直方向の中央には配置されていない画像をトリミングする方法はありますか?たとえば、画像を切り抜く方法は次のとおりです。
ただし、コマンドmogrify -crop 250x250 -gravity North cat.jpg
を使用すると、次のようになります。
注これは、サイズの異なる約10,000枚の画像を使用してバッチで実行するため、トリミングする正確な領域を明示的に選択することはできません。 。
私の頭のてっぺんから、数学的には左上の0,0
(別名:ImageMagickの用語ではNorthWest
)から始まる座標を扱う必要があるので、クロップボックス領域をこのようなものになります:
(width of image - width of crop area) / 2
したがって、例のmogrify
コマンドを使用して、概念的に次のようなことを行うことができます。
mogrify -crop 250x250+[(width of image - 250)/2]+0 -gravity NorthWest cat.jpg
これはかなり素晴らしい概念ですが、有用な現実ではありません。しかし、私は少し実験して、これを単一のテスト画像で機能させることができました。
CROP_W=250
CROP_H=250
IMG_W=$(identify -format %w test.jpg)
X_OFFSET=$((($IMG_W-$CROP_W)/2))
mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 -gravity NorthWest test.jpg
ImageMagickの-gravity
のデフォルトはとにかくNorthWest
なので、次のように-gravity
オプションを完全に削除することで簡略化できます。
CROP_W=250
CROP_H=250
IMG_W=$(identify -format %w test.jpg)
X_OFFSET=$((($IMG_W-$CROP_W)/2))
mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 test.jpg
そして、その概念をテストした後、このBashスクリプトを作成しましたが、期待どおりに機能します。 DIRECTORY
値を変更して、操作する予定の実際のディレクトリに一致させます。そして、そのecho mogrify
を使用すると、コマンドが実行された場合に何が起こるかを正確に確認できます。そのecho
を削除し、満足のいく結果が得られたら、スクリプトをそのままにします。
#!/bin/bash
# Set the crop width and height.
CROP_W=250
CROP_H=250
# Set the directory to act on.
DIRECTORY='/path/to/images'
# Use find to find all of the images; in this case JPEG images.
find ${DIRECTORY} -type f \( -name "*.jpg" -o -name "*.JPG" \) |\
while read FULL_IMAGE_PATH
do
# Get the image width with identify.
IMG_W=$(identify -format %w ${FULL_IMAGE_PATH})
# Calculate the X offset for the crop.
X_OFFSET=$((($IMG_W-$CROP_W)/2))
# Run the actual mogrify command.
# mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 ${FULL_IMAGE_PATH}
echo mogrify -crop ${CROP_W}x${CROP_H}+${X_OFFSET}+0 ${FULL_IMAGE_PATH}
done
JakeGouldは実用的な解決策を提供しましたが、はるかに簡単な解決策は、スクリプトを作成するのではなく、2段階の変換を使用することだと思います。まず、North重力で高さを250ピクセルに減らし、次にCenter重力で幅を250ピクセルに減らします。
mogrify -gravity North -crop x250+0+0 cat.jpg
mogrify -gravity Center -crop 250x250+0+0 cat.jpg
または、jpg以外の中間画像で変換を使用して、jpgへの余分な変換による品質の低下を防ぐこともできます。
convert -gravity North -crop x250+0+0 cat.jpg png:- | convert -gravity Center -crop 250x250+0+0 png:- cat.jpg