Sostituire la trasparenza nelle immagini PNG con sfondo bianco
-
22-09-2019 - |
Domanda
Ho alcune immagini PNG con trasparenza, e ho bisogno di creare versioni con lo strato di immagine composta su uno sfondo bianco. Ho provato diverse cose con ImageMagick "convertire" le operazioni, ma o non succede niente affatto o ottengo un errore. Io non voglio andare in una forma intermedia JPG, perché non voglio che i manufatti. Naturalmente è facile fare questo in Gimp o Photoshop o qualsiasi altra cosa, ma mi piacerebbe molto, piuttosto lo script dalla riga di comando, perché ci sono molte di queste cose.
Un esempio di un comando non funzionante ImageMagick è:
convert img1.png -background white -flatten img1-white.png
che si traduce in un errore.
Grazie!
Soluzione
Questo funziona per me:
convert -flatten img1.png img1-white.png
riferimenti Documentazione:
-
-flatten
opzione della riga di comando -
-layers
opzione della riga di comando (-flatten
è equivalente a-layers flatten
)
Altri suggerimenti
-background white -alpha remove -alpha off
Esempio:
convert image.png -background white -alpha remove -alpha off white.png
Sentitevi liberi di sostituire white
con qualsiasi altro colore che si desidera. documentazione Imagemagick dice circa la -alpha remove
funzionamento:
Questa operazione è semplice e veloce, e fa il lavoro senza bisogno di qualsiasi uso memoria aggiuntiva, o altri effetti collaterali che possono essere associati con tecniche di rimozione di trasparenza alternative. E 'quindi la modo preferito di rimozione di trasparenza dell'immagine.
Appiattimento immagine e l'applicazione di immagine di sfondo è dritto in avanti in ImageMagick
Tuttavia, ordine dei comandi è molto importante
Per applicare qualsiasi sfondo su un'immagine trasparente e appiattirla, applicare prima il fondo di appiattirlo. Il contrario non funziona.
$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png
L'unico che ha funzionato per me è stato un mix di tutte le risposte:
convert in.png -background white -alpha remove -flatten -alpha off out.png
Utilizzando -flatten mi ha fatto completamente pazzo perché -flatten in combinazione con la coltura mogrify e ridimensionare semplicemente non funziona. Il funzionario e per me unico modo corretto è quello di "rimuovere" il canale alfa.
alfa-alfa rimuovere off (non necessario con JPG)
Vedere documention: http://www.imagemagick.org/Usage/masking/#remove
Ecco come sostituire la stessa immagine in tutte le cartelle in una directory con il bianco invece di trasparente:
mogrify -background white -flatten */*.png
Il Alpha Rimuovere sezione della Guida all'uso ImageMagick suggerisce di utilizzare l'opzione -alpha remove
, ad esempio:
convert in.png -background white -alpha remove out.png
... utilizzando il colore -background
di tua scelta.
La guida afferma:
Questa operazione è semplice e veloce, e fa il lavoro senza bisogno di alcun uso della memoria in più, o altri effetti collaterali che possono essere associati con tecniche di rimozione alternativa di trasparenza. E 'quindi il modo preferito di rimuovere trasparenza dell'immagine.
Si aggiunge inoltre la nota:
Si noti che mentre la trasparenza viene 'rimosso' il canale alfa rimarrà acceso, ma sarà ora completamente opaca. Se non è più necessario il canale alfa è quindi possibile utilizzare Alpha Off per disattivarlo.
Quindi, se non è necessario il canale alfa è possibile rendere le dimensioni dell'immagine in uscita più piccolo aggiungendo l'opzione -alpha off
, per esempio:
convert in.png -background white -alpha remove -alpha off out.png
Non ci sono ulteriori dettagli su altre tecniche, spesso utilizzati per la rimozione di trasparenza descritto nella Rimozione Trasparenza da immagini sezione.
Incluso in quella sezione è menzione di un avvertimento importante per l'utilizzo di -flatten
come tecnica per la rimozione di trasparenza:
Tuttavia questo non funzionerà con "mogrify" o con una sequenza di immagini multiple, fondamentalmente perché l'operatore "-flatten" è realmente progettato per unire più immagini in una singola immagine.
Quindi, se si sta convertendo più immagini contemporaneamente, ad esempio, generare le miniature da un file PDF, -flatten
non farà ciò che si vuole (sarà appiattire tutte le immagini di tutte le pagine in una sola immagine). D'altra parte, utilizzando la tecnica -alpha remove
produrrà ancora più immagini, ciascuno avendo trasparenza rimosso.
Sembra che il tuo comando è corretto in modo che il problema potrebbe essere dovuto al supporto mancante per PNG (). È possibile controllare con convert -list configure
o semplicemente provare quanto segue:
sudo yum install libpng libpng-devel
Questa non è esattamente la risposta alla tua domanda, ma ho trovato la tua domanda durante il tentativo di capire come rimuovere il canale alfa, così ho deciso di aggiungere questa risposta qui:
Se si desidera rimuovere canale alfa usando ImageMagick, è possibile utilizzare questo comando:
mogrify -alpha off ./*.png
Welp sembra che la mia decisione di installare "grafica Magick" over "ImageMagick" ha alcuni spigoli -. Quando reinstallo genuino crufty vecchio "ImageMagick", quindi il comando precedente funziona perfettamente
modifica , molto tempo dopo - Uno di questi giorni mi controllare per vedere se "la grafica Magick" ha risolto questo problema.
Avevo bisogno di uno: sia -alpha background
e -flatten
, o -fill
Ho fatto un nuovo PNG con sfondo trasparente e un puntino rosso in mezzo.
convert image.png -background green -alpha off green.png
fallito: ha prodotto un'immagine con sfondo nero
convert image.png -background green -alpha background -flatten green.png
ha prodotto un'immagine con lo sfondo verde corretta.
Naturalmente, con un altro file che ho rinominato image.png
, non è riuscito a fare nulla. Per quel file, ho scoperto che il colore dei pixel trasparenti è stato "# d5d5d5" così ho riempito quel colore con il verde:
convert image.png -fill green -opaque "#d5d5d5" green.png
sostituito i pixel trasparenti con il verde corretta.
questo crea un'immagine semplicemente posizionando il primo con la trasparenza sulla parte superiore del 2 °
composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png
originariamente trovato il suggerimento su questo post
Per rimuovere effettivamente il canale alfa dal file, utilizzare il alfa opzione off :
convert in.png -background white -alpha off out.png
Ho visto questa domanda e le risposte che in realtà mi aiuti, ma poi mi è stato bisogno di farlo per un sacco di file, quindi in caso si dispone di più immagini (immagini PNG) in una cartella e vi voglio farlo per tutti:
find ./ -name "*.png" -exec convert {} -flatten {} \;
E 'alfa off, NON -alpha rimuovere! iOS caricare app store non riesce quando c'è un canale alfa a qualsiasi icona !!
Ecco come fare: mogrify -alfa off * .png