Python PIL:如何使用这样的版权徽标填充图像?

发布于 2024-11-18 13:09:58 字数 774 浏览 4 评论 0原文

我需要通过在照片中填充版权标志来保护它们。我的操作系统是 Ubuntu 10.10 和 Python 2.6。我打算使用 PIL

假设我有一个像这样的版权标志(你可以在 Photoshop 中轻松做到这一点) :

water mark logo

和这样的图片:

原始图片

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

Copyrighted Picture

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

Final Result

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

多谢!

I need to protect my photos by filling them with copyright logos. My OS is Ubuntu 10.10 and Python 2.6. I intend to use PIL.

Supposed I have a copyright logo like this (You can do this in Photoshop easily):

water mark logo

and a picture like this:

Original Picture

I want to use PIL to get copyrighted pictures like the following (Fill the original pic with pattern):

Copyrighted Picture

and Final Result by altering the opacity of logos:

Final Result

Is there any function in PIL that can do this? Any hint?

Thanks a lot!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

弄潮 2024-11-25 13:09:58

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

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

这应该会给你足够的信息来帮助你继续前进——如果你遇到了障碍,发布代码显示你到目前为止所得到的,并询问一个关于你遇到困难的具体问题。

PIL is certainly capable of this. First you'll want to create an image that contains the repeated text. It should be, oh, maybe twice the size of the image you want to watermark (since you'll need to rotate it and then crop it). You can use Image.new() to create such an image, then ImageDraw.Draw.text() in a loop to repeatedly plaster your text onto it, and the image's rotate() method to rotate it 15 degrees or so. Then crop it to the size of the original image using the crop() method of the image.

To combine it first you'll want to use ImageChops.multiply() to superimpose the watermark onto a copy of the original image (which will have it at 100% opacity) then ImageChops.blend() to blend the watermarked copy with the original image at the desired opacity.

That should give you enough information to get going -- if you run into a roadblock, post code showing what you've got so far, and ask a specific question about what you're having difficulty with.

不必你懂 2024-11-25 13:09:58

只是一个示例:

#!/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()

Just a sample:

#!/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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文