imagemagick Bilder auf ein bestimmtes Seitenverhältnis zuschneiden?

8

Wie verwende ich bei einem Bild den Imagemagick, um die Größe auf ein bestimmtes Seitenverhältnis zu ändern? zum Beispiel auf ein Seitenverhältnis von2:1

Kleines Kind
quelle

Antworten:

11

Zwei Dinge zu beachten:

  1. Einfache Größenänderung mit oder ohne Seitenverhältniskonvertierung
  2. Zuschneiden mit Seitenrationsumrechnung

Ich spreche nacheinander an:

1. Einfache Größenänderung mit oder ohne Seitenverhältniskonvertierung

imagemagickStandardmäßig wird das bereits vorhandene Seitenverhältnis eines Bildes während der Konvertierung beibehalten. Verwenden dieses Testbildes:

Geben Sie hier die Bildbeschreibung ein

Bei einer Größe von 100 x 100 schlägt ein Versuch, die Größe mit dieser Syntax auf 300 x 150 zu ändern, im Hintergrund fehl :

convert test.png -resize 300x150 300_test.png

und erzeugt ein 150x150 Bild:

Geben Sie hier die Bildbeschreibung ein

Um zu erzwingen imagemagick, dass Ihr Bild mit einem Seitenverhältnis von 2: 1 tatsächlich erstellt wird, ist die folgende geringfügig andere Syntax erforderlich:

convert test.png -resize 300x150\! distort.png

Und dies erreicht ein Seitenverhältnis von 2: 1, wobei natürlich das Originalbild verzerrt wird:

Geben Sie hier die Bildbeschreibung ein

2. Zuschneiden mit Seitenrationsumrechnung

Wenn Sie es vorziehen, ein Bild einfach und automatisch auf ein bestimmtes Seitenverhältnis zuzuschneiden, verwenden Sie am einfachsten eines der ImageMagick-Skripte von Fred: 'Aspectcrop' . Die Verwendung auf unserem Testbild ist einfach:

./aspectcrop -a 2:1 test.png Fred_wins.png

und das resultierende Bild wurde erfolgreich auf ein Verhältnis von 2: 1 zugeschnitten:

Geben Sie hier die Bildbeschreibung ein

Die andere zu manipulierende Option -g gravitydefiniert, welcher Teil des Bildes zum Zuschneiden verwendet wird. Der Standardwert ist Mitte. Alle Optionen sind:

  1. Mitte (c)
  2. Norden (n)
  3. Süden
  4. Osten (e)
  5. Westen (w)
  6. Nordwesten (nw)
  7. Nordosten (ne)
  8. Südwesten, (sw)
  9. Südosten (se)

Um ein Beispiel dafür mit Nord zu geben :

./aspectcrop -a 2:1 -g n test.png north.png

Die Ergebnisse sind:

Geben Sie hier die Bildbeschreibung ein

Wenn Sie dieses Skript für eine Stapelladung von Bildern in einem einzelnen Verzeichnis verwenden müssen, können Sie eine Bash-for-Schleife verwenden. Platzieren Sie das Skript zuerst richtig und setzen Sie es auf ausführbar:

sudo mv aspectcrop /usr/local/bin
sudo chmod +x /usr/local/bin/aspectcrop

Dies erleichtert die Verwendung des Skripts erheblich. Führen Sie dann die 'for'-Schleife aus einem Verzeichnis von Bildern aus:

for i in *.png
do 
aspectcrop -a 2:1 -g n "$i" "${i%.png}_cropped.png"
done

Diese Schleife kann je nach Art der Eingabe- und Ausgabedateien, verschiedenen Speicherorten usw. variiert werden. Sie können auch eine ähnliche Syntax erstellen, die rekursiv nach Bildern sucht. Viele Möglichkeiten ...

Ich finde das alles ziemlich cool :)

Verweise:

andrew.46
quelle
0

Hier ist ein Skript für alle JPGs im Ordner, um den 4: 3-Aspekt zu überprüfen.

#!/bin/sh

EXTENSION="*.jpg"

for file in $EXTENSION
do
        currAspect=$(identify -format "%[fx:w/h]" "$file")
        roundFloat=$(printf '%.*f\n' 3 "$currAspect")

        if [ $roundFloat != 1.333 ]
                then
                        echo "name: $file aspect: $currAspect rounded: $roundFl$
                fi
done
Anton Yu yushkevich_anton
quelle