使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢!

文章目录

    • 使用 Pillow 库为图片添加半透明水印
    • 使用 blind_watermark 库为图片添加盲水印
      • 安装
      • 嵌入水印
      • 提取水印

如何给图片添加水印呢?在 Python 的世界里,有多种方法可以为图片添加水印。

其中一种方法,可以使用大名鼎鼎 Pillow 库,简简单单就能为图片加上水印。或简单的文字水印或 logo 图片水印都没问题,为了不影响观感,还能把水印设置为半透明的效果。

对于版权保护,还能给图片添加隐形的水印,即盲水印,又称隐水印。给图片加盲水印的 Python 库,有来自国内的阿里巴巴安全团队开发的 blind_watermark 库。盲水印的好处是图片有水印但人眼看不出来,需要通过程序才能提取水印,相当于隐形“盖章”,可以用在数据泄露溯源、版权保护等场景。

以下,分别使用两种方法为图片添加水印,一种是使用 Pillow 库,一种是使用 blind_watermark 库,如果你需要版权保护,可添加盲水印。其中,方法一原图如下,是一位漂亮的小姐姐:

方法二使用的原图,同样也是一位漂亮的小姐姐:
使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢!_第1张图片

使用 Pillow 库为图片添加半透明水印

关于 Pillow 库,在我早前的 CSDN 文章 《Python 实现 GIF 动态图片分解 , 多帧动态图分解成多张静态图片》 中有过简单的介绍,安装使用起来都非常简单,也没什么需要避坑的,所以就不再多作介绍了,直接开始。简单地,我们需要导入 Pillow 库中的 “Image”, “ImageDraw”“ImageFont” 三个模块即可实现为图片添加半透明的水印。以下是简单的 Demo 参考代码,真正应用还需再调整优化,完善完善,使其更 Pythonic

from PIL import Image, ImageDraw, ImageFont


def create_watermark():

    with Image.open("girl_362.png").convert("RGBA") as base:

        txt = Image.new("RGBA", base.size, (255,255,255,0))
    
        fnt = ImageFont.truetype("SIMLI.TTF", 40)
    
        d = ImageDraw.Draw(txt)
        d.text((10,10), "水印", font=fnt, fill=(255,255,255,128))
    
        out = Image.alpha_composite(base, txt)
        out.show()
        
        
if __name__=='__main__':
    create_watermark()

最终效果如下图所示,注意左上角:

使用 blind_watermark 库为图片添加盲水印

blind_watermark 库的使用也非常简单,首先是安装,然后就是嵌入水印和提取水印。

安装

使用 pip 安装 blind_watermark 库:

pip install blind-watermark

如果在使用 blind_watermark 时出现错误,错误信息为:ModuleNotFoundError: No module named 'pywt' ,那么需要把 pywt 也安装上:

pip install PyWavelets

使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢!_第2张图片

嵌入水印

待嵌入的水印,可以是一个 logo 图片,或是一个二维码图片,当然也支持嵌入字符串,甚至,隐水印还可以是二进制数据,以下以嵌入图片为例子。

代码:

from blind_watermark import WaterMark

bwm1 = WaterMark(password_wm=1, password_img=1)

bwm1.read_img('girl_unsplash.jpg')

bwm1.read_wm('logo.png')

bwm1.embed('girl_362_logo.png')

运行效果如下:

使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢!_第3张图片

嵌入水印后的图片,和上面原图“完全一样”吧,人眼根本无法看得出来:
使用 Python 给图片添加水印,其中一种还是隐形的盲水印呢!_第4张图片

提取水印

提取出来的水印就不贴出来了,有兴趣可自行运行代码试试。其实是一个二维码,这是由谷歌 Chrome 浏览器生成的,谷歌 Chrome 浏览器自 88 版本后,推出了二维码共享网页功能,我把我自己的 Demo 个人网站生成的二维码作为水印嵌入到了原图中,提取出来后扫码即可访问。

bwm1 = WaterMark(password_wm=1, password_img=1)

bwm1.extract(filename='girl_362_logo.png', wm_shape=(120, 120), out_wm_name='watermark.png', )

你可能感兴趣的:(Python,新星计划,python,图片添加水印,经验分享,图片处理)