PIL:使图像在百分比上透明

2024-10-02 20:38:28 发布

您现在位置:Python中文网/ 问答频道 /正文

如何使watermark图像透明?例如,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()

编辑:

好的,这行得通,需要弄清楚如何使用%

^{pr2}$

嗯,在以下情况下,水印的质量很低:

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

实现我所需要的最好方法是什么?在


Tags: from图像imageimportpilwithopentemp
1条回答
网友
1楼 · 发布于 2024-10-02 20:38:28

以下是一个既适用于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):

Singapore

水印示例(背景为透明):

Stack Overflow caption

样品结果:

Singapore + Stack Overflow watermark

相关问题 更多 >