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!

È stato utile?

Soluzione

Questo funziona per me:

convert -flatten img1.png img1-white.png
riferimenti

Documentazione:

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

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top