Wie füge ich mit imagemagick Leerzeichen ein?

15

Welche Parameter benötigt "convert" (?), Um diesen OUTPUT von diesem INPUT zu erhalten?

EINGANG:

Geben Sie hier die Bildbeschreibung ein

AUSGABE:

Geben Sie hier die Bildbeschreibung ein

gasko peter
quelle

Antworten:

8

Da ich nicht wollte, dass die Bilder mit der rechten Seite bündig sind, musste ich einen anderen Ansatz verwenden (ImageMagicks compositeTool):

convert -size 500x500 xc:white canvas.png
convert canvas.png in.png -geometry +200+200 -composite out.png

-sizesollte die endgültige Bildgröße sein, die Sie möchten, canvas.pngist eine leere weiße Leinwand, in.pngwäre das Bild, das Sie auffüllen möchten, und -geometryist der Positionierungsversatz.

mustafa.0x
quelle
15

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 convertSie die Werte, an die Sie übergeben müssen, -extentfü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 520x352Wert 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 -formatBefehl 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.%eTeil des Befehls durch %t.png...

Kurt Pfeifle
quelle
8

Dokumentation: http://www.imagemagick.org/Usage/crop/#extent

convert in.png -gravity east -extent 500x352 out.png
kev
quelle
Vielen Dank!! Aber was ist, wenn mein Bild nicht 500x352 ist - weil die Größe variiert?
Gasko Peter
1
Ich zeige dir nur, wie es geht.
Kev
@kev: Dein Befehl macht nicht genau das, was @gasko Peter wollte. Du hättest verwenden sollen -extend 520x352. +1 für die 'richtige Richtung' :-P
Kurt Pfeifle
sed 's # -extend # -extent # g'
Kurt Pfeifle
Ich musste hinzufügen -background transparent, um einen transparenten Hintergrund zu erhalten.
Tremby
0

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 
Jonathan H.
quelle