Ganz oben in meinem Kopf sollten Sie sich mathematisch mit Koordinaten befassen, die oben links beginnen 0,0
(alias NorthWest
in ImageMagick-Terminologie), damit Sie den Zuschneidebereich so positionieren möchten, dass er etwa so aussieht:
(width of image - width of crop area) / 2
Sie könnten also mit Ihrem Beispielbefehl etwas Ähnliches machen mogrify
:
mogrify -crop 250x250+[(width of image - 250)/2]+0 -gravity NorthWest cat.jpg
Welches ist ein ziemlich schönes Konzept, aber keine nützliche Realität. Aber ich habe gerade ein bisschen experimentiert und habe das für ein Testbild gemacht:
CROP_W=250 CROP_H=250 IMG_W=$(identify -format %w test.jpg) X_OFFSET=$((($IMG_W-$CROP_W)/2)) mogrify -crop $x$+$+0 -gravity NorthWest test.jpg
Da ImageMagick -gravity
standardmäßig verwendet wird NorthWest
, können Sie dies vereinfachen, indem Sie die -gravity
Option ganz wie folgt entfernen :
CROP_W=250 CROP_H=250 IMG_W=$(identify -format %w test.jpg) X_OFFSET=$((($IMG_W-$CROP_W)/2)) mogrify -crop $x$+$+0 test.jpg
Nachdem ich dieses Konzept getestet hatte, habe ich dieses Bash-Skript ausprobiert und es funktioniert wie erwartet. Ändern Sie einfach den DIRECTORY
Wert so, dass er dem tatsächlichen Verzeichnis entspricht, in dem Sie vorgehen möchten. So echo mogrify
können Sie genau sehen, was passieren würde, wenn der Befehl ausgeführt würde. Entfernen Sie das echo
und lassen Sie das Skript dann los, wenn Sie mit den Ergebnissen zufrieden sind:
#!/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 $ -type f \( -name "*.jpg" -o -name "*.JPG" \) |\ while read FULL_IMAGE_PATH do # Get the image width with identify. IMG_W=$(identify -format %w $) # Calculate the X offset for the crop. X_OFFSET=$((($IMG_W-$CROP_W)/2)) # Run the actual mogrify command. # mogrify -crop $x$+$+0 $ echo mogrify -crop $x$+$+0 $ done