【问题标题】:Transparency in PNGs with reportlab 2.3使用reportlab 2.3 实现PNG 的透明度
【发布时间】:2010-11-21 11:27:09
【问题描述】:

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

有没有人将透明的 PNG 合成到 ReportLab 画布上,并且透明度工作正常?谢谢!

【问题讨论】:

    标签: python python-imaging-library reportlab


    【解决方案1】:

    将值为 'auto' 的 ma​​sk 参数 传递给 drawImage 为我解决了这个问题。

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

    More information on the drawImage-function

    【讨论】:

    • 仅供参考,drawImage 文档可在此处获得:reportlab.com/apis/reportlab/dev/…
    • 使用 Sphinx 生成的在线文档是非常糟糕的文档。相反,我发现用户指南 pdf reportlab.com/docs/reportlab-userguide.pdf 更有用。对于这个特定问题,请参阅第 2 章“使用 pdfgen 的图形和文本”中的“图像方法”部分。他们解释了 mask param 关键字。
    【解决方案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 图像。所以我仍然需要找到一种方法来检测图像的色彩空间。并且只在灰色空间图像上应用该蒙版。

    【讨论】:

    • 我使用的是黑白图像。似乎无法找到解决办法,所以我只是对图像进行了Photoshop处理,使其具有白色背景。方式,方式,方式更快。
    • @varagrawal 如果您在 Photoshop 中打开原始图像,您应该检查它使用的色彩空间。应该是灰度。如果您将颜色空间更改为 RGB,图像看起来会相同,但文件大小会有点大,但这会起作用并且您可以保持透明度。
    【解决方案3】:

    ReportLab 使用 PIL 来管理图像。目前,PIL trunk 已经打了补丁来支持透明 PNG,但是如果你需要稳定的包,你将不得不等待 1.1.6 版本。

    【讨论】:

      猜你喜欢
      • 2010-09-23
      • 2010-10-16
      • 2013-04-11
      • 1970-01-01
      • 1970-01-01
      • 2016-01-23
      • 2011-09-16
      • 2010-10-07
      相关资源
      最近更新 更多