2009-08-20 5 views
20

Ho due PNG che sto cercando di combinare in un PDF utilizzando ReportLab 2.3 su Python 2.5. Quando uso canvas.drawImage (ImageReader) per scrivere PNG sulla tela e salvare, la trasparenza viene visualizzata in nero. Se utilizzo PIL (1.1.6) per generare una nuova immagine, quindi incolla() PNG sull'immagine PIL, compila bene. Ho ricontrollato Gimp e entrambe le immagini hanno canali alfa funzionanti e vengono salvate correttamente. Non sto ricevendo un errore e non sembra esserci nulla che il mio google-fu possa generare.Trasparenza in PNG con reportlab 2.3

Qualcuno là fuori ha composto un PNG trasparente su una tela di ReportLab, con il lucido che funziona correttamente? Grazie!

risposta

47

Passare il parametro maschera con un valore di 'auto' a drawImage risolve questo per me.

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

More information on the drawImage-function

+0

Ha funzionato anche per me - grazie! –

+0

Sì, è così. Grazie! –

+1

FYI i documenti 'drawImage' sono disponibili qui: http://www.reportlab.com/apis/reportlab/dev/pdfgen.html#reportlab.pdfgen.canvas.Canvas.drawImage – dkamins

0

ReportLab utilizza PIL per la gestione delle immagini. Attualmente, il trunk PIL ha una patch applicata per supportare PNG trasparenti, ma dovrete aspettare una versione 1.1.6 se avete bisogno di un pacchetto stabile.

1

Ho scoperto che mask='auto' ha smesso di lavorare per me con ReportLab 3.1.8. Nei documenti dice di passare i valori che vuoi mascherati. Quindi quello che funziona per me ora è mask=[0, 2, 0, 2, 0, 2, ]. Fondamentalmente appare come questo `mask = [red_start, red_end, green_start, green_end, blue_start, blue_end,]

Il parametro maschera consente di creare immagini trasparenti. Sono necessari 6 numeri e definisce l'intervallo di valori RGB che verranno mascherati o trattati come trasparenti. Ad esempio con [0,2,4,42,136,139], lo maschererà tutti i pixel con un valore rosso da 0 o 1, verde da 40 o 41 e blu di 136, 137 o 138 (su una scala di 0- 255). È il attualmente il tuo lavoro per sapere quale colore è lo sfondo 'trasparente' o .

UPDATE: Che maschere fuori tutto ciò che è rgb(0, 0, 0) o rgb(1, 1, 1) che ovviamente potrebbe non essere la soluzione giusta. Il mio problema era la gente che caricava immagini png con uno spazio colore grigio. Quindi ho bisogno di capire ancora un modo per rilevare lo spazio cromatico dell'immagine. e applica solo quella maschera sulle immagini dello spazio grigio.

+0

Sto usando un'immagine in bianco e nero. Non riesco a capire una correzione, quindi ho solo photoshoppato l'immagine per avere uno sfondo bianco. Via, via, via più veloce. – varagrawal

+0

@varagrawal Se si apre l'immagine originale in Photoshop, è necessario verificare lo spazio colore utilizzato. Probabilmente è una scala di grigi. Se dovessi cambiare lo spazio colore in RGB, l'immagine sarebbe identica, ma sarebbe un po 'più grande della dimensione del file, ma funzionerebbe e potresti mantenere la trasparenza. – teewuane