Transparencia en PNGs con reportlab 2.3

Tengo dos PNG que estoy intentando combinar en un PDF utilizando ReportLab 2.3 en Python 2.5. Cuando uso canvas.drawImage (ImageReader) para escribir PNG en el canvas y guardar, la transparencia se vuelve negra. Si uso PIL (1.1.6) para generar una nueva imagen, luego pegue () cualquiera de los dos PNG en la imagen de PIL, la composición está bien. He verificado 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 pueda aparecer mi google-fu.

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

Pasar el parámetro de máscara con un valor de ‘auto’ a drawImage soluciona esto para mí.

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

Más información sobre la función drawImage.

He encontrado que mask='auto' ha dejado de funcionar para mí con reportlab 3.1.8. En la documentación dice que se deben pasar los valores que desea enmascarar. Entonces, lo que me funciona ahora es mask=[0, 2, 0, 2, 0, 2, ] . Básicamente se ve así: `mask = [red_start, red_end, green_start, green_end, blue_start, blue_end,]

El parámetro de máscara te permite crear imágenes transparentes. Toma 6 números y define el rango de valores RGB que se enmascararán o tratarán como transparentes. Por ejemplo, con [0,2,40,42,136,139], ocultará cualquier píxel 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) . Actualmente es su trabajo saber qué color es el “transparente” o el de fondo.

ACTUALIZACIÓN: Eso enmascara cualquier cosa que sea rgb(0, 0, 0) o rgb(1, 1, 1) que obviamente no sea la solución correcta. Mi problema era que la gente subía imágenes png con un espacio de color gris. Así que todavía tengo que encontrar una manera de detectar el espacio de color de la imagen. y solo aplicar esa máscara en imágenes de espacios grises.

ReportLab utiliza PIL para administrar 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.