examples - reportlab python 3
Transparencia en PNGs con reportlab 2.3 (3)
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 parece a este `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 todo lo que es rgb(0, 0, 0)
o rgb(1, 1, 1)
que, obviamente, podría no ser 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.
Tengo dos PNG que intento combinar en un PDF utilizando ReportLab 2.3 en Python 2.5. Cuando uso canvas.drawImage (ImageReader) para escribir PNG en el lienzo 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 no parece haber nada que pueda aparecer mi google-fu.
¿Alguien por ahí compuso un PNG transparente en un lienzo de ReportLab, con la transparencia funcionando correctamente? ¡Gracias!
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.
Pasar el parámetro de máscara con un valor de ''auto'' a drawImage
soluciona esto para mí.
drawImage(......., mask=''auto'')