【问题标题】:PIL - Add semi-transparent polygon to JPEGPIL - 将半透明多边形添加到 JPEG
【发布时间】:2014-06-12 09:14:06
【问题描述】:

我正在尝试使用此this approach 将半透明多边形添加到图像中。问题是图像是JPEG。我知道 JPEG 没有 alpha 通道,所以我希望有一种方法可以让 PIL 接收 JPEG,将其转换为具有 alpha 通道的形式,添加半透明蒙版,然后合并用图像遮罩并将其转换回 JPEG 以进行保存。 PIL 能做到这一点吗?如果没有,我还能怎么做呢?谢谢!

【问题讨论】:

    标签: python image python-imaging-library alpha-transparency


    【解决方案1】:

    这很容易。只需将 jpeg 粘贴到新的 rgba Image()

    #!/usr/bin/env python3
    
    from PIL import Image
    from PIL import ImageDraw
    
    im = Image.open("existing.jpg")
    logo = Image.open("python-32.png")
    
    back = Image.new('RGBA', im.size)
    back.paste(im)
    poly = Image.new('RGBA', (512,512))
    pdraw = ImageDraw.Draw(poly)
    pdraw.polygon([(128,128),(384,384),(128,384),(384,128)],
              fill=(255,255,255,127),outline=(255,255,255,255))
    
    back.paste(poly, (0,0), mask=poly)
    back.paste(logo, (im.size[0]-logo.size[0], im.size[1]-logo.size[1]), mask=logo)
    
    back.show()
    

    这会额外为图像添加一个 png(具有透明度)。

    【讨论】:

    • 干得好!我可以问一个问题吗?我刚刚使用了你的代码(没有logo),我发现如果我想保存back,我必须使用pngjpg 会引发错误)。但是,back 的大小是原始图像的 5 倍。我们有办法最小化back 的大小吗?
    • @Yves 无法重现您所描述的内容。当我用back.save('back.jpg', 'JPEG') 替换back.show() 时,图像会按预期保存。也许您应该打开一个包含完整错误描述的新问题。(您可以添加一条以@tnt 开头的评论,以便我收到通知。)
    • 似乎是新次要版本引入的新功能失败:将我的pillow 4.1.1升级到4.2.1后我也得到了异常(新question的答案中的解决方案)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-09
    • 1970-01-01
    相关资源
    最近更新 更多