2009-08-20 16 views
20

Python 2.5 üzerinde ReportLab 2.3 kullanarak PDF'ye birleştirmeye çalıştığım iki PNG var. Tuval üzerine PNG yazmak ve kaydetmek için canvas.drawImage (ImageReader) kullandığımda, saydamlık siyah çıkıyor. Yeni bir Görüntü oluşturmak için PIL (1.1.6) kullanırsam, PIL görüntüsüne PNG'yi yapıştırın(). Gimp'te iki kez kontrol ettim ve her iki görüntüde de alfa kanalı çalışıyor ve doğru şekilde kaydediliyor. Bir hata almadım ve google-fu'mın açabileceği bir şey yok gibi görünüyor.Raporlar içeren PNG'lerde saydamlık 2.3

Saydamlık düzgün bir şekilde çalıştığı için dışarıda bir kimse bir ReportLab tuval üzerine şeffaf bir PNG oluşturdu mu? Teşekkürler!

cevap

47

Maske parametresi parametresini drawImage için 'auto' değerine getirerek bunu benim için giderir.

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

More information on the drawImage-function

+0

Benim için de çalıştım - teşekkürler! –

+0

Yup, bunu yapar. Teşekkürler! –

+1

FYI 'drawImage' belgelerini şu adreste bulabilirsiniz: http://www.reportlab.com/apis/reportlab/dev/pdfgen.html#reportlab.pdfgen.canvas.Canvas.drawImage – dkamins

0

ReportLab, görüntüleri yönetmek için PIL'i kullanır. Şu anda, PIL trunk, şeffaf PNG'leri desteklemek için uygulanan bir yamaya sahiptir, ancak kararlı bir pakete ihtiyacınız varsa, bir 1.1.6 sürümü beklemek zorunda kalacaksınız.

1

Ben mask='auto' ReportLab 3.1.8 benim için çalışmayı durdurdu olduğunu tespit ettik. Dokümanlarda, maskelenmesini istediğiniz değerleri iletmesi gerekir. Yani şimdi benim için çalışan mask=[0, 2, 0, 2, 0, 2, ]. Temel olarak bu `maske = [red_start, red_end, green_start, green_end, blue_start, blue_end,]

maske parametresi şeffaf görüntüler oluşturmanızı sağlar gibi görünüyor. 6 numaralarını alır ve maskelenecek veya saydam olarak işlenecek olan RGB değerlerini tanımlar. Örneğin, [0,2,40,42,13,13,139] ile , 0 veya 1'den Kırmızı, 40 'dan Yeşil veya 136 ve 137'den Mavi veya 138'den 138'e kadar olan herhangi bir pikselin maskelenmesini sağlar. 255). şu anda hangi işinizin 'şeffaf' veya arka plan olduğunu bilmek sizin göreviniz.

GÜNCELLEME: Açıkçası rgb(0, 0, 0) veya rgb(1, 1, 1) olduğu maskeler dışarı şey doğru çözüm olmayabilir Yani. Sorunum, png görüntüleri gri renk alanıyla yükleyen insanlardı. Bu yüzden görüntünün renk alanını tespit etmenin bir yolunu bulmaya ihtiyacım var. ve sadece bu maskeyi gri uzay görüntülerine uygulayın.

+0

Siyah beyaz bir görüntü kullanıyorum. Düzeltmeyi anlayamıyorum, bu yüzden sadece beyaz bir arka plana sahip olmak için resmi çektim. Yol, yol, daha hızlı. – varagrawal

+0

@varagrawal Orijinal resminizi photoshop'ta açarsanız hangi renk alanını kullandığınızı kontrol etmelisiniz. Muhtemelen gri skaladır. Renk uzayını RGB olarak değiştirecekseniz, görüntü aynı görünecektir, ancak dosya büyüklüğü biraz daha büyük olacaktır, ancak bu işe yarar ve saydamlığı koruyabilirsiniz. – teewuane

İlgili konular