【问题标题】:Python PIL: How to FIll a Image with a copyright logo like this?Python PIL:如何用这样的版权标志填充图像?
【发布时间】:2011-07-06 17:34:52
【问题描述】:

我需要用版权标志来保护我的照片。我的操作系统是 Ubuntu 10.10 和 Python 2.6。我打算使用PIL

假设我有这样的版权标志 (You can do this in Photoshop easily):

还有这样的图片:

我想使用 PIL 来获取如下版权图片(用图案填充原始图片):

通过改变徽标的不透明度获得最终结果:

PIL 中是否有任何功能可以做到这一点?有什么提示吗?

非常感谢!

【问题讨论】:

标签: python image-processing python-imaging-library photoshop copyright-display


【解决方案1】:

PIL 当然可以做到这一点。首先,您需要创建一个包含重复文本的图像。它应该是,哦,可能是您想要添加水印的图像大小的两倍(因为您需要旋转它然后裁剪它)。您可以使用Image.new() 创建这样的图像,然后在循环中使用ImageDraw.Draw.text() 将文本反复粘贴到其上,然后使用图像的rotate() 方法将其旋转15 度左右。然后使用图片的crop()方法将其裁剪成原始图片的大小。

首先要结合它,您需要使用ImageChops.multiply() 将水印叠加到原始图像的副本上(它将具有 100% 的不透明度),然后使用ImageChops.blend() 将水印副本与原始图像混合在所需的不透明度。

这应该可以为您提供足够的信息以帮助您继续前进 - 如果您遇到障碍,请发布代码以显示您到目前为止所获得的内容,并就您遇到的困难提出一个具体问题。

【讨论】:

  • 有没有办法在显示时临时添加水印而不是保存副本
【解决方案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()

【讨论】:

    猜你喜欢
    • 2014-08-01
    • 2021-12-16
    • 2013-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-09
    相关资源
    最近更新 更多