Python PIL:如何用版权标志填充图像?

6 投票
2 回答
2655 浏览
提问于 2025-04-16 20:57

我想通过在照片上加版权标志来保护我的照片。我的操作系统是Ubuntu 10.10,使用的是Python 2.6。我打算用PIL这个库。

假设我有一个这样的版权标志(在Photoshop里可以很简单地做到):

水印标志

还有一张这样的图片:

原始图片

我想用PIL把原始图片变成带版权的样子(用图案填充原图):

带版权的图片

通过调整标志的透明度,得到的最终效果:

最终效果

PIL里有没有什么函数可以做到这一点?有什么提示吗?

非常感谢!

2 个回答

2

这只是一个示例:

#!/usr/bin/python
# -*- coding: utf-8 -*-

from PIL import Image

def fill_watermark():
    im = Image.open('a.jpg').convert('RGBA')
    bg = Image.new(mode='RGBA', size=im.size, color=(255, 255, 255, 0))
    logo = Image.open('logo.png')  # .rotate(45) if you want, bg transparent
    bw, bh = im.size
    iw, ih = logo.size
    for j in range(bh // ih):
        for i in range(bw // iw):
            bg.paste(logo, (i * iw, j * ih))
    im.alpha_composite(bg)
    im.show()
    
fill_watermark()
6

PIL确实可以做到这一点。首先,你需要创建一个包含重复文本的图片。这个图片的大小应该大约是你想要加水印的图片的两倍(因为你需要旋转它,然后裁剪)。你可以使用 Image.new() 来创建这样的图片,然后用 ImageDraw.Draw.text() 在一个循环中不断地把你的文本贴上去,再用图片的 rotate() 方法把它旋转大约15度。最后,使用图片的 crop() 方法把它裁剪成原始图片的大小。

要把它们合在一起,首先你需要用 ImageChops.multiply() 把水印叠加到原始图片的副本上(这时候副本的透明度是100%),然后用 ImageChops.blend() 把带水印的副本和原始图片按照你想要的透明度混合在一起。

这些信息应该能让你开始动手了——如果遇到问题,可以把你目前的代码发出来,并问一个具体的问题,说明你在哪方面遇到了困难。

撰写回答