2012-09-17 14 views
10

Este es mi problema:PIL modo de imagen "P" -> "RGBA"

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

Bueno, con mi imagen se puede ver la diferencia.
Mi pregunta es: ¿cómo la convierto correctamente?

Image: original

Resultado: result

NOTA: La imagen original tiene un brillo semi-transparente, el resultado tiene un sólido verde "resplandor"

+0

Podría explicar cuál es el problema, tal vez? – mwcz

+0

en realidad no dices cuál es la diferencia. ¿La imagen que incluye es antes o después? –

+0

Probado. No vi ninguna diferencia. ¿Qué versión de python y pil usas? –

Respuesta

0

Su problema es que no lo hace proporcionar información sobre lo que PIL debe usar como fuente del canal ALPHA.

PIL por sí solo no agrega transparencia a su imagen.

¿Qué parte de su imagen quiere que sea transparente?

+0

La parte que es transparente y/o semitransparente en la imagen "P" original: P Y autodetección también, ya que esta no es la única imagen que necesito para convertir ... – mDroidd

+0

Lo siento pero para mí ambas imágenes se ven idénticas. ¿Puedes marcar en la tercera imagen partes que deberían ser transparentes con rojo? –

3

Desafortunadamente, su imagen PNG es un tipo que PIL no maneja muy bien: una imagen con paleta con un canal alfa. Cuando abre la imagen, el alfa se descarta y no hay forma de recuperarlo.

Esto es diferente de la transparencia de la paleta habitual, donde un índice de la paleta se utiliza para denotar píxeles totalmente transparentes.

+0

Lugares relevantes para buscar: [PngImagePlugin tRNS loader] (https://github.com/python-imaging/Pillow/blob/master/PIL/PngImagePlugin.py#L527-529) donde solo lee 1 byte en lugar de alfa block, y [PNG tRNS spec] (http://www.libpng.org/pub/png/spec/1.2/PNG-Chunks.html#C.tRNS) mostrando que debería leer un bloque, no un solo valor – jterrace

0

Usted podría utilizar scipy.misc.imread:

img = scipy.misc.imread(filename, mode='RGBA') 
img = Image.fromarray(img) 
Cuestiones relacionadas