使用 reportlab 2.3 实现 PNG 的透明度
我有两个 PNG,正在尝试使用 Python 2.5 上的 ReportLab 2.3 将它们合并为 PDF。当我使用 canvas.drawImage(ImageReader) 将 PNG 写入画布并保存时,透明度显示为黑色。如果我使用 PIL (1.1.6) 生成一个新图像,然后将任一 PNG 粘贴到 PIL 图像上,它就可以很好地合成。我已经在 Gimp 中仔细检查过,两个图像都有有效的 Alpha 通道并且正在正确保存。我没有收到错误,而且我的 google-fu 似乎没有显示任何内容。
有没有人将透明的 PNG 合成到 ReportLab 画布上,并且透明度正常工作?谢谢!
I have two PNGs that I am trying to combine into a PDF using ReportLab 2.3 on Python 2.5. When I use canvas.drawImage(ImageReader) to write either PNG onto the canvas and save, the transparency comes out black. If I use PIL (1.1.6) to generate a new Image, then paste() either PNG onto the PIL Image, it composits just fine. I've double checked in Gimp and both images have working alpha channels and are being saved correctly. I'm not receiving an error and there doesn't seem to be anything my google-fu can turn up.
Has anybody out there composited a transparent PNG onto a ReportLab canvas, with the transparency working properly? Thanks!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
将值为“auto”的 mask 参数 传递给
drawImage
可以解决这个问题。有关drawImage函数的更多信息
Passing the mask parameter with a value of 'auto' to
drawImage
fixes this for me.More information on the drawImage-function
我发现
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, ]更新:这掩盖了任何
rgb(0, 0, 0)
或rgb(1, 1, 1)
,这显然可能不是正确的解决方案。我的问题是人们上传带有灰色颜色空间的 png 图像。所以我仍然需要找出一种方法来检测图像的色彩空间。并且仅在灰色空间图像上应用该蒙版。I've found that
mask='auto'
has stopped working for me with reportlab 3.1.8. In the docs it says to pass the values that you want masked out. So what works for me now ismask=[0, 2, 0, 2, 0, 2, ]
. Basically it looks like this `mask=[red_start, red_end, green_start, green_end, blue_start, blue_end, ]UPDATE: That masks out anything that is
rgb(0, 0, 0)
orrgb(1, 1, 1)
which obviously might not be the right solution. My problem was people uploading png images with a gray color space. So I need to still figure out a way to detect the color space of the image. and only apply that mask on gray space images.ReportLab 使用 PIL 来管理图像。目前,PIL trunk 已应用补丁来支持透明 PNG,但如果您需要稳定的软件包,则必须等待 1.1.6 版本。
ReportLab uses PIL for managing images. Currently, PIL trunk has patch applied to support transparent PNGs, but you will have to wait for a 1.1.6 release if you need stable package.