2012-09-17 16 views
10

Questo è il mio problema:PIL modalità immagine "P" -> "RGBA"

import Image 
im = Image.open("1.png") 
im.show() 
print im.mode 
im.convert("RGBA").save("2.png") 

Bene, con la mia immagine si può vedere la differenza.
La mia domanda è: come posso convertirlo correttamente?

Image: original

Risultato: result

NOTA: L'immagine originale ha un bagliore semi-trasparente, il risultato ha una solida verde "glow"

+0

Potrebbe spiegare qual è il problema, forse? – mwcz

+0

in realtà non dici qual è la differenza. L'immagine che includi è prima o dopo? –

+0

Provato. Non ho visto alcuna differenza. Che versione di pitone e pil usi? –

risposta

0

Il tuo problema è che non si fa fornire informazioni su ciò che PIL dovrebbe utilizzare come fonte del canale ALPHA.

PIL non aggiunge da solo la trasparenza all'immagine.

Quale parte della tua immagine vuoi essere trasparente?

+0

La parte che è trasparente e/o semitrasparente nell'immagine originale "P": P Anche rilevamento automatico, in quanto questa non è l'unica immagine che devo convertire ... – mDroidd

+0

Scusa ma per me entrambe le immagini sembrano identiche. Puoi segnare sulle 3 parti dell'immagine che dovrebbero essere trasparenti con il rosso? –

3

Sfortunatamente l'immagine PNG è un tipo che PIL non gestisce molto bene: un'immagine a tavolo con un canale alfa. Quando apri l'immagine, l'alfa viene buttata via e non c'è modo di riaverla.

Questo è diverso dalla solita trasparenza della tavolozza in cui viene utilizzato un indice della tavolozza per indicare i pixel completamente trasparenti.

+0

Luoghi pertinenti da cercare: [PngImagePlugin tRNS loader] (https://github.com/python-imaging/Pillow/blob/master/PIL/PngImagePlugin.py#L527-529) dove legge solo 1 byte anziché un alfa blocco e [PNG tRNS spec] (http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.tRNS) che mostra che dovrebbe leggere un blocco, non un singolo valore – jterrace

0

Potreste usare scipy.misc.imread:

img = scipy.misc.imread(filename, mode='RGBA') 
img = Image.fromarray(img) 
Problemi correlati