2009-08-20 70 views
20

Tengo dos PNG que estoy tratando de combinar en un PDF usando ReportLab 2.3 en Python 2.5. Cuando uso canvas.drawImage (ImageReader) para escribir PNG en el lienzo y guardar, la transparencia sale en negro. Si utilizo PIL (1.1.6) para generar una nueva imagen, pego() PNG en la imagen PIL, se compila muy bien. He comprobado dos veces en Gimp y ambas imágenes tienen canales alfa en funcionamiento y se están guardando correctamente. No recibo un error y parece que no hay nada que mi google-fu pueda aparecer.Transparencia en PNG con reportlab 2.3

¿Alguien ha compuesto un PNG transparente en un lienzo de ReportLab, con la transparencia funcionando correctamente? ¡Gracias!

Respuesta

47

Al pasar el parámetro de máscara con un valor de 'auto' a drawImage se soluciona esto por mí.

drawImage(......., mask='auto') 

More information on the drawImage-function

+0

Funcionó para mí también, ¡gracias! –

+0

Sí, eso lo hace. ¡Gracias! –

+1

FYI los documentos 'drawImage' están disponibles aquí: http://www.reportlab.com/apis/reportlab/dev/pdfgen.html#reportlab.pdfgen.canvas.Canvas.drawImage – dkamins

0

ReportLab utiliza PIL para gestionar imágenes. Actualmente, el tronco PIL tiene un parche aplicado para admitir PNG transparentes, pero tendrá que esperar una versión 1.1.6 si necesita un paquete estable.

1

he encontrado que mask='auto' ha dejado de funcionar para mí con reportlab 3.1.8. En los documentos dice pasar los valores que desea enmascarados. Entonces, lo que funciona para mí ahora es mask=[0, 2, 0, 2, 0, 2, ]. Básicamente parece que este `máscara = [red_start, red_end, green_start, green_end, blue_start, blue_end,]

El parámetro máscara le permite crear imágenes transparentes. Toma 6 números y define el rango de valores RGB que se ocultará o se tratará como transparente. Por ejemplo, con [0,2,40,42,136,139], enmascara los píxeles con un valor Rojo de 0 o 1, Verde de 40 o 41 y Azul de 136, 137 o 138 (en una escala de 0- 255). Es actualmente su trabajo para saber qué color es el de fondo 'transparente' o .

ACTUALIZACIÓN: que enmascara cualquier cosa que es rgb(0, 0, 0) o rgb(1, 1, 1) que, obviamente, no puede ser la solución correcta. Mi problema era que las personas subían imágenes png con un espacio de color gris. Así que aún necesito encontrar una forma de detectar el espacio de color de la imagen. y solo aplica esa máscara en las imágenes espaciales grises.

+0

Estoy usando una imagen en blanco y negro. Parece que no puede encontrar una solución, así que simplemente Photoshopped la imagen para tener un fondo blanco. Muy, mucho, mucho más rápido. – varagrawal

+0

@varagrawal Si abre su imagen original en photoshop, debe verificar qué espacio de color está usando. Probablemente sea una escala de grises. Si tuviera que cambiar el espacio de color a RGB, la imagen se vería igual, pero sería un poco grande, pero funcionaría y podría mantener la transparencia. – teewuane

Cuestiones relacionadas