使用 reportlab 2.3 实现 PNG 的透明度

发布于 2024-08-03 07:40:36 字数 310 浏览 8 评论 0原文

我有两个 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

将值为“auto”的 ma​​sk 参数 传递给 drawImage 可以解决这个问题。

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

有关drawImage函数的更多信息

Passing the mask parameter with a value of 'auto' to drawImage fixes this for me.

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

More information on the drawImage-function

潦草背影 2024-08-10 07:40:36

我发现 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, ]

遮罩参数可让您创建透明图像。需要 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 图像。所以我仍然需要找出一种方法来检测图像的色彩空间。并且仅在灰色空间图像上应用该蒙版。

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 is mask=[0, 2, 0, 2, 0, 2, ]. Basically it looks like this `mask=[red_start, red_end, green_start, green_end, blue_start, blue_end, ]

The mask parameter lets you create transparent images. It takes 6
numbers and defines the range of RGB values which will be masked out
or treated as transparent. For example with [0,2,40,42,136,139], it
will mask out any pixels with a Red value from 0 or 1, Green from 40
or 41 and Blue of 136, 137 or 138 (on a scale of 0-255). It's
currently your job to know which color is the 'transparent' or
background one.

UPDATE: That masks out anything that is rgb(0, 0, 0) or rgb(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.

我乃一代侩神 2024-08-10 07:40:36

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文