Welche Parameter benötigt "convert" (?), Um diesen OUTPUT von diesem INPUT zu erhalten?
EINGANG:
AUSGABE:
Welche Parameter benötigt "convert" (?), Um diesen OUTPUT von diesem INPUT zu erhalten?
EINGANG:
AUSGABE:
Antworten:
Da ich nicht wollte, dass die Bilder mit der rechten Seite bündig sind, musste ich einen anderen Ansatz verwenden (ImageMagicks composite
Tool):
convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png
-size
sollte die endgültige Bildgröße sein, die Sie möchten, canvas.png
ist eine leere weiße Leinwand, in.png
wäre das Bild, das Sie auffüllen möchten, und -geometry
ist der Positionierungsversatz.
Meine ImageMagick-Version ist '6.7.8-0 2012-07-04 Q16'. Laut Doku sollte die Antwort des @ kev-Befehls funktionieren:
convert in.png -gravity east -extent 520x352 out.png
Wie bei den meisten ImageMagick-Fragen können Sie jedoch dasselbe Ziel mit unterschiedlichen Mitteln erreichen. Sie könnten so verwenden montage
:
montage null: in.png -tile 2x1 -geometry +17+0 out1.png
Dies verwendet das spezielle 'null:' Bild, um es mit dem zu verketten in.png
.
Es ist richtig, dass convert
Sie die Werte, an die Sie übergeben müssen, -extent
für jedes Eingabebild mit einer anderen Größe neu berechnen müssen .
Verwenden Sie zuerst identify -format
, um die Abmessungen des Bildes zu erhalten:
identify -format '%Wx%H' in.png
Dies sollte etwas zurückgeben wie:
449x352
Ok, jetzt müssten Sie Ihre gewünschten 71 Pixel hinzufügen, um den endgültigen 520x352
Wert zu erhalten. Aber Sie müssen diese Berechnung nicht in Ihrem eigenen Gehirn durchführen:
ImageMagick zur Rettung!, Und seine magischen Berechnungsmöglichkeiten ... :-)
Sie können den identify -format
Befehl anweisen, diese Berechnung für Sie durchzuführen:
identify -format '%[fx:W+71]x%H'
Dies sollte Ihnen nun ein Ergebnis geben von:
520x352
Angenommen, Sie möchten nur einen "weißen Streifen" mit einer Breite von 71 Pixel links neben einem Bild auffüllen / hinzufügen, können Sie die folgende einzelne Befehlszeile verwenden:
convert \
in.png \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' in.png) \
out2.png
Voila! Eine Befehlszeile (die, um ehrlich zu sein, 2 Befehle enthält), und Sie können diesen Befehl in all Ihren PNGs, JPEGs, GIFs usw. in einem Verzeichnis loslassen, um automatisch Ihren weißen 71-Pixel-Streifen zu jedem von ihnen hinzuzufügen:
for i in *.png *.jpeg *jpg *.gif; do
convert \
${i} \
-gravity east \
-background white \
-extent $(identify -format '%[fx:W+71]x%H' ${i}) \
$(convert ${i} -format "71-pixels-padded-left---%t.%e" info:)
done
Für jedes Bild bleibt seine Ausgabe der gleiche Dateityp. Natürlich können Sie alle Ausgaben als PNG (oder was auch immer Sie wollen) erzwingen. Ersetzen Sie einfach den %t.%e
Teil des Befehls durch %t.png
...
Dokumentation: http://www.imagemagick.org/Usage/crop/#extent
convert in.png -gravity east -extent 500x352 out.png
-extend 520x352
. +1 für die 'richtige Richtung' :-P
-background transparent
, um einen transparenten Hintergrund zu erhalten.
Ich habe diesen Befehl in meinem definiert .bash_profile
. Die endgültige Bildgröße wird automatisch aus dem gewünschten Abstand in Breite und Höhe berechnet (funktioniert mit Nullen):
# arithmetic with awk
calc() { awk "BEGIN { print $* }"; }
# pad an image
img_pad() {
local width height pw ph
[ $# -lt 3 ] && { echo "Usage: img_pad <Input> <WxH> <Output>"; return; }
# parse current size and padding
IFS=x read width height <<< "$(identify "$1" | awk '{print $3}')"
IFS=x read pw ph <<< "$2"
# new widht and height
width=$(calc "$width + 2*$pw")
height=$(calc "$height + 2*$ph")
echo "Converting '$1' to '$3' with size ${width}x${height} (+w=${pw}, +h=${ph})."
convert "$1" -gravity center -extent "${width}x${height}" "$3"
}
Anwendungsbeispiel:
# pad 50px left and right, no vertical padding
img_pad in.png 50x0 out.png