700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 使用 Python 给图片添加水印 其中一种还是隐形的盲水印呢!

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

时间:2024-03-25 17:19:52

相关推荐

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

文章目录

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

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

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

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

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

方法二使用的原图,同样也是一位漂亮的小姐姐:

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

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

from PIL import Image, ImageDraw, ImageFontdef 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

嵌入水印

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

代码:

from blind_watermark import WaterMarkbwm1 = WaterMark(password_wm=1, password_img=1)bwm1.read_img('girl_unsplash.jpg')bwm1.read_wm('logo.png')bwm1.embed('girl_362_logo.png')

运行效果如下:

嵌入水印后的图片,和上面原图“完全一样”吧,人眼根本无法看得出来:

提取水印

提取出来的水印就不贴出来了,有兴趣可自行运行代码试试。其实是一个二维码,这是由谷歌 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', )

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。