Wie ändere ich die Leinwandgröße eines PNG mit ImageMagick (GraphicsMagick)? (Wie mit Transparenz auffüllen?)

10969
Pistos

Alternativ: Wie nehme ich eine nicht quadratische PNG-Datei und fülle den "Rest" des Bildes mit Transparenz aus, so dass das resultierende quadratische Bild das ursprüngliche Bild im Quadrat zentriert hat?

ULTIMATIV, was ich möchte, ist, ein beliebiges Bild mit beliebigem GM-Format und einer beliebigen Größe aufzunehmen und ein verkleinertes PNG-Bild (z. B. maximal 40 Pixel für jede Dimension) zu erstellen, wobei das Seitenverhältnis beibehalten und das Transparenzverhältnis für nicht quadratisch aufgefüllt wird Originalbilder UND mit einer bereits vorbereiteten 40x40 PNG-Transparenzmaske.

Ich weiß bereits, wie ich das Seitenverhältnis verkleinern und beibehalten kann. Ich habe bereits den Befehl zum Anwenden meines Composits. Mein einziges fehlendes Stück ist das Quadrieren von nicht quadratischen Bildern (Auffüllen mit Transparenz).

Einzelbefehl bevorzugt; Multi-Befehlskette akzeptabel.

(bearbeiten)

Zusätzliche Informationen: Hier ist der zusammengesetzte Befehl, den ich verwende:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png 

Dabei hat mask.png weiße Pixel für das, was ich von source-and-target.png behalten möchte, und transparente Pixel für das, was ich von source-and-target.png entfernen (und transparent werden möchte).

9

3 Antworten auf die Frage

7
Paul

Dieser Befehl nimmt jede Eingabedatei an und passt sie am besten an ein 40x40-Quadrat und ein Pad mit Transparenz an:

convert \ original.png \ -thumbnail '40x40>' \ -background transparent \ -gravity center \ -extent 40x40 \ -compose Copy_Opacity \ -composite mask.png \ original-resized.png 

Die gravityOption stellt sicher, dass das Bild in beide Richtungen zentriert transparentist und überall dort verwendet wird, wo keine Pixel vorhanden sind. Dann ist das Compositing mit dermask.png

Also können wir es nicht mit "Composite" machen? Pistos vor 12 Jahren 0
@Pistos Ich weiß nicht, was Sie mit dem Composite machen - es ist nur eine Transparenzmaske, um Teile der Miniaturansicht nach der Größenänderung ein- / auszublenden / anzuzeigen. Können Sie die Befehlsfolge, die Sie bis jetzt haben, [bearbeiten] und hinzufügen, damit wir sehen können, ob sie kombiniert werden kann? Paul vor 12 Jahren 0
Erledigt. Vielen Dank für Ihre bisherige Hilfe. Pistos vor 12 Jahren 0
@Pistos Ich denke, der beste Ansatz ist, das Compositing mit -convert zu machen und nicht umgekehrt. Ich habe meine Antwort oben aktualisiert. Paul vor 12 Jahren 0
Nah dran, aber nicht ganz. Ihr Befehl funktionierte nicht wie er ist und selbst mit Anpassungen hat er nicht funktioniert. Es ist okay, ich mache es in zwei Schritten. Ich werde die Dinge hier aktualisieren, nachdem ich die letzten CLI-Schritte abgeschlossen habe. Danke noch einmal. Pistos vor 12 Jahren 0
Ich würde "-filter Catrom" vor der Option "thumbnail" hinzufügen, da er aus meiner Erfahrung in der Regel Bilder mit höherer Qualität erzeugt. thdoan vor 10 Jahren 0
5
uı6ʎɹnɯ ꞁəıuɐp

One command to convert all PNGs from one folder:

mogrify \ -resize 50x50 \ -background transparent \ -gravity center \ -extent 50x50 \ -format png \ -path resized \ *.png 

mogrify is a command from ImageMagick package. You have to create output directory first.

Schön. Übrigens, wenn Sie sich abenteuerlustig fühlen, können Sie "-path sizeized" weglassen, um die Dateien an Ort und Stelle zu bearbeiten. aaronk6 vor 7 Jahren 0
1
Pistos

Hier ist was ich letztendlich gemacht habe. Ein zweistufiger Prozess:

gm convert \ -thumbnail '40x40>' \ -background transparent \ -gravity center \ -extent 40x40 \ original.png \ intermediate.png  gm composite \ -compose in \ intermediate.png \ mask.png \ out.png 

Wobei mask.png weiße Pixel für das ist, was ich behalten wollte, und transparente Pixel für das, was ich maskieren wollte (verwerfen).