Come posso modificare le dimensioni della tela di un PNG con ImageMagick (GraphicsMagick)? (Come riempire con la trasparenza?)


9

In alternativa: come posso prendere un PNG non quadrato e "riempire" il "resto" dell'immagine con trasparenza in modo che l'immagine quadrata risultante abbia l'immagine originale centrata nel quadrato?

ULTIMATAMENTE, quello che voglio è prendere qualsiasi immagine di qualsiasi formato supportato da GM di qualsiasi dimensione e creare un PNG ridimensionato (diciamo, massimo 40 pixel per entrambe le dimensioni), con le proporzioni mantenute, con trasparenza trasparente per non quadrate immagini originali E con una maschera di trasparenza 40x40 PNG già preparata applicata.

So già come ridimensionare e mantenere le proporzioni; Ho già il comando per applicare il mio composito. Il mio unico pezzo mancante sono le immagini non quadrate di alizing quadrato (imbottitura con trasparenza).

Preferito comando singolo; accettabile catena multi-comando.

(modificare)

Informazioni extra: ecco il comando composito che sto usando:

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

dove mask.png ha pixel bianchi per ciò che voglio mantenere di source-and-target.png e pixel trasparenti per ciò che voglio rimuovere (e diventare trasparente) di source-and-target.png.

Risposte:


7

Questo comando prenderà qualsiasi file di input di dimensioni e lo adatterà meglio a un quadrato 40x40 e pad con trasparenza:

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

L' gravityopzione garantisce che l'immagine sia centrata in entrambe le direzioni e transparentviene utilizzata ovunque non ci siano pixel. Quindi la composizione viene eseguita conmask.png


Quindi non possiamo farlo in un colpo solo con composite?
Pistos

@Pistos Non sono chiaro su cosa stai facendo con il composito: è solo una maschera di trasparenza per nascondere / mostrare parti della miniatura dopo il ridimensionamento? Puoi modificare e aggiungere la sequenza di comandi che hai finora, così possiamo vedere se può essere combinato?
Paul,

@Pistos Penso che l'approccio migliore sia fare il compositing con -convert piuttosto che il contrario. Ho aggiornato la mia risposta sopra.
Paul,

Chiudi, ma non del tutto. Il tuo comando non ha funzionato così com'è, e anche con le regolazioni, non ha funzionato. Va bene, lo farò in due passaggi. Aggiornerò le cose qui dopo che avrò i passaggi finali della CLI funzionanti. Grazie ancora.
Pistos

Vorrei aggiungere -filter Catromprima l' thumbnailopzione perché dalla mia esperienza generalmente produce immagini di qualità superiore.
thdoan

6

Un comando per convertire tutti i PNG da una cartella:

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

mogrify è un comando dal pacchetto ImageMagick. Devi prima creare la directory di output.


Ben fatto. A proposito, se ti senti avventuroso, puoi omettere -path resizeddi modificare i file sul posto.
aaronk6,

Questo è fantastico Nella mia installazione (OSX, 1.3.35) è gm mogrifye invece di -path resizedusare-create-directories -output-directory resized
Blake

1

Ecco cosa alla fine sono andato con. Un processo in due fasi:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

Dove mask.png sono pixel bianchi per ciò che volevo mantenere e pixel trasparenti per ciò che volevo mascherare (scartare).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.