使用reportlab 2.3在PNG中实现透明度

时间:2009-08-20 20:45:24

标签: python python-imaging-library reportlab

我有两个PNG,我试图在Python 2.5上使用ReportLab 2.3将其组合成PDF。当我使用canvas.drawImage(ImageReader)将PNG写入画布并保存时,透明度变为黑色。如果我使用PIL(1.1.6)生成一个新的图像,然后将(或)PNG粘贴到PIL图像上,它就可以很好地合成。我在Gimp中进行了双重检查,两张图像都有正常的Alpha通道并正确保存。我没有收到错误,似乎没有任何东西我的google-fu可以出现。

有没有人将一个透明的PNG合成到ReportLab画布上,透明度是否正常?谢谢!

3 个答案:

答案 0 :(得分:52)

掩码参数的值设置为“自动”传递给drawImage,以便为我解决此问题。

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

More information on the drawImage-function

答案 1 :(得分:2)

我发现mask='auto'已经停止为reportlab 3.1.8工作了。它在文档中说要传递你想要掩盖的值。那么现在对我有用的是mask=[0, 2, 0, 2, 0, 2, ]。基本上它看起来像`mask = [red_start,red_end,green_start,green_end,blue_start,blue_end,]

  

使用mask参数可以创建透明图像。这需要6   数字并定义将被屏蔽掉的RGB值范围   或视为透明。例如[0,2,40,42,136,139],它   将屏蔽掉任何红色值为0或1,绿色从40的像素   或41和136,137或138的蓝色(0-255的等级)。它的   目前你的工作是知道哪种颜色是'透明'或   背景一。

更新:屏蔽了rgb(0, 0, 0)rgb(1, 1, 1)这些显然可能不是正确解决方案的内容。我的问题是人们上传带有灰色空间的png图像。所以我还需要找出一种方法来检测图像的色彩空间。并且只在灰色空间图像上应用该遮罩。

答案 2 :(得分:1)

ReportLab使用PIL管理图像。目前,PIL trunk已应用补丁以支持透明PNG,但如果需要稳定的包,则必须等待1.1.6版本。