PIL:如何将图像透明度按百分比设置

3

我该如何使水印图片透明?例如,60% 的透明度。我尝试使用 putalpha,但似乎并没有按预期工作。

from PIL import Image


temp_image = Image.open('test1.jpg')
watermark = Image.open('watermark.png')

x, y = temp_image.size

image_with_watermark = Image.new('RGBA', (x, y), (0, 0, 0, 0))
image_with_watermark.paste(temp_image, (0, 0))
image_with_watermark.paste(watermark, (0, 0), mask=watermark)
image_with_watermark.show()

编辑:

好的,这个可以工作,需要弄清如何使用百分号进行设置。

from PIL import Image


temp_image = Image.open('test1.jpg')
watermark = Image.open('watermark.png')

x, y = temp_image.size

watermask = watermark.convert("L").point(lambda x: min(x, 50))
watermark.putalpha(watermask)

image_with_watermark = Image.new('RGBA', (x, y), (0, 0, 0, 0))
image_with_watermark.paste(temp_image, (0, 0))
image_with_watermark.paste(watermark, (0, 0), mask=watermark)
image_with_watermark.show()

不好意思,水印质量在以下操作后变得非常低:

watermask = watermark.convert("L").point(lambda x: min(x, 50))
watermark.putalpha(watermask)

我需要达成目标的最佳方法是什么?

1个回答

11

以下是一种可适用于RGB和RGBA水印图像的解决方案:

from PIL import Image

TRANSPARENCY = 65       # percentage

temp_image = Image.open('test1.jpg')
watermark = Image.open('watermark.png')    

if watermark.mode!='RGBA':
    alpha = Image.new('L', watermark.size, 255)
    watermark.putalpha(alpha)

paste_mask = watermark.split()[3].point(lambda i: i * TRANSPARENCY / 100.)
temp_image.paste(watermark, (0,0), mask=paste_mask)
temp_image.save('res.png')

示例图像(作者-Neil Howard):

新加坡

示例水印(背景透明):

Stack Overflow 标题

示例结果:

新加坡 + Stack Overflow 水印


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接