【问题标题】:Drawing Polygons of Varying Transparency Over the Top of Each Other in Python Pillow / PIL在 Python Pillow / PIL 中绘制不同透明度的多边形
【发布时间】:2013-08-19 09:34:53
【问题描述】:

我有以下代码:

im = Image.new("RGBA", (800,600))
draw = ImageDraw.Draw(im,"RGBA")
draw.polygon([(10,10),(200,10),(200,200),(10,200)],(20,30,50,125))
draw.polygon([(60,60),(250,60),(250,250),(60,250)],(255,30,50,0))
del draw 
im.show()

但多边形之间的 alpha/透明度没有任何差异。是否可以使用这些多边形来做到这一点,或者 alpha 级别是否仅适用于合成图像(我知道这个解决方案,但只看到基于 PIL 的 cmets,并认为我已经在 Pillow 中看到了这个问题)。

如果这样的东西不可用,是否有一种很好、简单、有效的方法可以将这样的东西放入库中?

【问题讨论】:

    标签: python python-imaging-library pillow


    【解决方案1】:

    这可能会有所帮助:

    How do you draw transparent polygons with Python?

    要为最终图像添加 Alpha 通道,您可以使用 Image.putalpha(alpha)

    【讨论】:

      【解决方案2】:

      根据文档http://effbot.org/imagingbook/image.htm

      im.show()

      显示图像。此方法主要用于调试 目的

      在 Unix 平台上,此方法将图像保存到临时 PPM 文件,并调用 xv 实用程序。

      据我所知,PPM file format支持透明度(“alpha 通道”)。


      所以...当您调用 im.show() 时不会出现透明度 - 但如果您使用 支持 支持的格式保存文件,它将被应用透明度:

      from PIL import Image,ImageDraw
      
      im = Image.new("RGBA", (800,600))
      draw = ImageDraw.Draw(im,"RGBA")
      draw.polygon([(10,10),(200,10),(200,200),(10,200)],(20,30,50,125))
      draw.polygon([(60,60),(250,60),(250,250),(60,250)],(255,30,50,120))
      del draw
      
      im.save("out.png") # Save to file
      

      【讨论】:

      • 即使 PPM 确实支持透明度,如果您在纯灰色窗口上显示具有部分透明度的图像……您只会得到部分灰色像素。
      • 无论如何,有一个 PPM-with-transparency 异常,但它从来没有去任何地方,就像 16bpp 扩展一样。如果您想要任何花哨的东西,则必须改用 PAM。没有人这样做,因为使用 PNG 之类的东西进行交换和使用自定义格式进行内部存储更容易。
      • 此方法只对最终图像应用 alpha,即在另一个透明方块的顶部绘制一个透明方块,但下方的方块仍然被遮挡。虽然至少现在我有透明度谢谢。
      • 我在透明度没有正确应用于两个多边形时遇到问题,将图像类型更改为“RGB”修复了它:im = Image.new("RGB", (800,600))跨度>
      猜你喜欢
      • 1970-01-01
      • 2021-09-05
      • 2010-09-26
      • 1970-01-01
      • 1970-01-01
      • 2014-09-04
      • 2014-07-28
      • 1970-01-01
      相关资源
      最近更新 更多