Sostituisci la trasparenza nelle immagini PNG con sfondo bianco


294

Ho alcune immagini PNG con trasparenza e ho bisogno di creare versioni con il livello immagine composto su uno sfondo bianco. Ho provato varie cose con le operazioni di "conversione" di Image Magick, ma o non succede nulla o ricevo un errore. Non voglio andare a un modulo JPG intermedio perché non voglio i manufatti. Ovviamente è facile farlo in Gimp o Photoshop o altro, ma preferirei davvero scriverlo dalla riga di comando perché ci sono molte di queste cose.

Un esempio di comando Image Magick non funzionante è:

convert img1.png -background white -flatten img1-white.png

Ciò provoca un errore.

Grazie!


Nel mio caso specifico il livello di trasparenza in PNG è in conflitto quando si passa attraverso un processore FO (Apache) per creare un PDF / A. PDF / A non consente la trasparenza. L'hack che ho usato è invece passare a JPG.
— Wivani,

3
"Ciò provoca un errore." Qual è il messaggio di errore?
— Aaron McDaid,

Tale comando dovrebbe funzionare correttamente. In caso contrario, potresti avere un'installazione errata di Imagemagick o libpng o le tue versioni di entrambi sono troppo vecchie. Qual è la tua versione di Imagemagick e libpng?
— fmw42,

Risposte:


255

Questo funziona per me:

convert -flatten img1.png img1-white.png

Riferimenti alla documentazione:


3
In qualche modo questo non funziona per me ... Ho provato "bianco trasparente-colore", ma ho ricevuto un'eccezione / avviso.
— William Niu,

1
Si scopre che devo impostare anche lo sfondo per il bianco. Ho anche dovuto scaricare il colors.xml, che mancava.
— William Niu,

9
Dai un'occhiata alla mia risposta qui sotto. È stato aggiunto 2 anni dopo questo.
— Rok Kralj,

42
NON tentare di convertire documenti con più pagine con -flatten. Appiattirà le pagine in una pagina.
— Tim S.,

8
Se vuoi farlo su tutti i file dalla tua cartella puoi farlo in questo modo: mogrify -flatten *.pngper ogni evenienza, non dimenticare di fare il backup. Maggiori informazioni qui: imagemagick.org/script/mogrify.php
— troyane il

372
-background white -alpha remove -alpha off

Esempio:

convert image.png -background white -alpha remove -alpha off white.png

Sentiti libero di sostituire whitecon qualsiasi altro colore che desideri. La documentazione di Imagemagick dice questo -alpha removesull'operazione:

Questa operazione è semplice e veloce e fa il lavoro senza l'uso di memoria aggiuntiva o altri effetti collaterali che possono essere associati a tecniche di rimozione della trasparenza alternative. È quindi il modo preferito di rimuovere la trasparenza dell'immagine.


3
Sembra che -background whitenon sia necessario (probabilmente per altri colori).
— Skippy le Grand Gourou,

5
@SkippyleGrandGourou: è necessario, poiché il colore di fallback della trasparenza per PNG non è sempre bianco.
— Rok Kralj,

3
meglio della risposta accettata (che in caso di più di un livello non fa la cosa giusta)
— axkibe,

5
L'immagine risultante avrà ancora un canale alfa. Sarà vuoto ma sarà ancora lì. Per rimuovere completamente il canale aggiungi -alpha off.
— Jose

2
Non funziona Ho realizzato un nuovo PNG con uno sfondo trasparente e un punto rosso al centro. Produceva sempre uno sfondo nero, indipendentemente dal colore specificato. convert image.png -background white -alpha off white.pngprodotto un'immagine con uno sfondo nero. convert image.png -background "#00ff33" -alpha off 00ff33.pngha prodotto uno sfondo nero
— McNulty il

46

Appiattire l'immagine e applicare l'immagine di sfondo è semplice in ImageMagick

Tuttavia, l'ordine dei comandi è molto importante

Per applicare uno sfondo a un'immagine trasparente e appiattirlo, applicare prima lo sfondo anziché appiattirlo. Il contrario non funziona.

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

Per qualsiasi motivo, questo ha funzionato bene per me. Non sono sicuro del motivo per cui il tuo tentativo originale non ha funzionato.
— Anthony,

23

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

4
Bene, ha funzionato. In realtà avevo bisogno di un altro colore rispetto al bianco e puoi usare ... -background "#010203" ...invece di usare il bianco.
— Alexis Wilke,

ecco come sostituire la stessa immagine in tutte le cartelle in una directorymogrify -background white -flatten */*.png
— Julian,

-alpha removeè stato quello che ha fatto per me
— Stefan Dragnev il

13

ecco come sostituire la stessa immagine in tutte le cartelle in una directory con bianco anziché trasparente:

mogrify -background white -flatten */*.png


10

L'uso di -flatten mi ha reso completamente pazzo perché -flatten in combinazione con il ritaglio mogrify e il ridimensionamento semplicemente non funziona. Il modo ufficiale e per me solo corretto è "rimuovere" il canale alfa.

-alpha remove -alpha off (non necessario con JPG)

Vedi documentazione: http://www.imagemagick.org/Usage/masking/#remove


quindi come diventerebbe il comando? questo non ha funzionato qui:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
— Aquarius Power il

Volevo solo rimuovere l'alfa. Convertito in JPG, è stato facile e facile. Grazie per il consiglio.
— Roger CS Wernersson,

Questa è l'unica soluzione di cui sopra che ha funzionato per me. Ora l'iTunes Store è soddisfatto della mia immagine.
— Bill Cheswick il

7

La sezione Alpha Remove della Guida all'utilizzo di ImageMagick suggerisce l'utilizzo -alpha removedell'opzione, ad esempio:

convert in.png  -background white  -alpha remove  out.png

... usando il -backgroundcolore che preferisci.

La guida afferma:

Questa operazione è semplice e veloce e fa il lavoro senza l'uso di memoria aggiuntiva o altri effetti collaterali che possono essere associati a tecniche di rimozione della trasparenza alternative. È quindi il modo preferito di rimuovere la trasparenza dell'immagine.

Aggiunge inoltre la nota:

Si noti che mentre la trasparenza viene "rimossa" il canale alfa rimarrà attivo, ma ora sarà completamente opaco. Se non è più necessario il canale alfa, è possibile utilizzare Alpha Off per disabilitarlo.

Pertanto, se non è necessario il canale alfa, è possibile ridurre le dimensioni dell'immagine di output aggiungendo l' -alpha offopzione, ad esempio:

convert in.png  -background white  -alpha remove  -alpha off  out.png

Sono disponibili ulteriori dettagli su altre tecniche spesso utilizzate per rimuovere la trasparenza descritte nella sezione Rimozione della trasparenza dalle immagini .

In quella sezione è inclusa la menzione di un avvertimento importante per l'uso -flattencome tecnica per rimuovere la trasparenza:

Tuttavia, ciò non funzionerà con "mogrify" o con una sequenza di più immagini, fondamentalmente perché l'operatore "-flatten" è davvero progettato per unire più immagini in una singola immagine.

Quindi, se stai convertendo più immagini contemporaneamente, ad esempio la generazione di miniature da un file PDF, -flattennon farà ciò che desideri (appiattirà tutte le immagini per tutte le pagine in un'unica immagine). D'altra parte, l'uso della -alpha removetecnica produrrà comunque più immagini, ciascuna delle quali avrà la trasparenza rimossa.


5

Sembra che il tuo comando sia corretto, quindi il problema potrebbe essere dovuto alla mancanza di supporto per PNG (). Puoi verificare con convert -list configureo semplicemente provare quanto segue:

sudo yum install libpng libpng-devel

1
Sì grazie; questo (vecchio) problema era un bug in "graphicks magick", che è un fork / riscrivere / qualunque sia di "image magick".
— Pointy

@Pointy vedo! Per curiosità, qual è stata la vera causa del problema (che era solo in una versione)?
— Alastair,

Beh, davvero non so esattamente; era solo un bug. Non sono un manutentore di Graphicks Magick, quindi non ho idea del loro codice. Devo riprovare a un certo punto, immagino.
— Pointy

ubuntu non ce l'ha? qui è libpng12-0 ma continua a non funzionare :(
— Aquarius Power il

Sto usando Ubuntu 13.04 con libpng12-0installato e funzionante. Riesci a vedere PNG se esegui questo? convert -list configure | grep \png
— Alastair,

5

Questa non è esattamente la risposta alla tua domanda, ma ho trovato la tua domanda mentre cercavo di capire come rimuovere il canale alfa, quindi ho deciso di aggiungere questa risposta qui:

Se vuoi rimuovere il canale alfa usando imagemagick, puoi usare questo comando:

mogrify -alpha off ./*.png

3

Spero che la mia decisione di installare "grafica magick" su "image magick" abbia dei bordi irregolari - quando reinstallo la vecchia "image magick" originale, allora il comando sopra funziona perfettamente.

modifica , molto tempo dopo - Uno di questi giorni verificherò se "grafica magick" ha risolto questo problema.


2

Avevo bisogno di entrambi: entrambi -alpha backgrounde -flatten, oppure -fill.

Ho realizzato un nuovo PNG con uno sfondo trasparente e un punto rosso al centro.

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 prodotto un'immagine con lo sfondo verde corretto.

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 era "# d5d5d5", quindi ho riempito quel colore di verde:

convert image.png -fill green -opaque "#d5d5d5" green.png ha sostituito i pixel trasparenti con il verde corretto.


il comando corretto con ImageMagick corrente sarebbe convert image.png -background green -alpha background -alpha off green.pngo convert image.png -background green -alpha background -alpha remove green.pngoppure convert image.png -background green -flatten green.png
— fmw42

1

Opzione da riga di comando: apri il file PNG in Windows Paint e fai clic su Salva.


0

questo crea un'immagine posizionando il primo con trasparenza sopra il secondo

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

originariamente trovato il suggerimento su questo post


0

Per rimuovere effettivamente il canale alfa dal file, utilizzare l' opzione alpha off :

convert in.png -background white -alpha off out.png

1
In realtà, il link che hai fornito dice: "In realtà non elimina o destina il canale alfa attaccato all'immagine, disattiva semplicemente qualsiasi effetto che il canale ha sull'immagine". Per rimuovere davvero il canale alfa, vedi la mia risposta.
— Rok Kralj,

0

Ho visto questa domanda e le risposte che mi aiutano davvero, ma poi mi è stato necessario farlo per molti file, quindi nel caso in cui tu abbia più immagini (immagini PNG) in una cartella e vuoi farlo per tutti:

find ./ -name "*.png" -exec convert {} -flatten {} \;

-1

È -alpha off, NON -alpha remove! Il caricamento dell'app store iOS non riesce quando c'è un canale alfa in qualsiasi icona !!

Ecco come farlo: mogrify -alpha off * .png

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.