python设置图片盲水印

NO.1
水印用途

保护版权

数字水印,此处应用为盲水印,效果为隐藏式水印,无法被显式的看见,数据被编码后不易被破解,可以追踪数据来源.

使用场景

  1. 摄影师,设计师,画家,在作用中加入水印,作为数字取证

  2. 加密文件分发,不同的人加上不同的水印,标识名称,时间等信息,如果资料被流出复制,可根据水印找到责任人.

  3. 加密信息,也称为隐写术,传递不希望被别人看到的资料和信息等,图片本身只是信息载体

img

NO.2
项目地址

github仓库

https://github.com/guofei9987/blind_watermark

NO.3
环境搭建

下载git仓库

git clone git@github.com:guofei9987/blind_watermark.git

进入项目文件夹

cd blind_watermark

安装依赖

pip install -r requirements.txt

NO.4
加密图片

encry.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 引入模块
from blind_watermark import WaterMark
# 实例化模块
bwm1 = WaterMark(password_wm=1, password_img=1)
# 读取原图
bwm1.read_img('./origin.jpg')
# 读取水印
bwm1.read_wm('./watermark.png')
# 打上盲水印并输出到指定文件
bwm1.embed('./embedded.png')

img

NO.5
解密图片

解密水印不需要原图,但是需要知道水印图的宽高

所以在加密的时候,建议统一水印图的宽高,方便后续的解密.

decrypt.py

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
# 引入模块
from blind_watermark import WaterMark
# 实例化模块
bwm1 = WaterMark(password_wm=1, password_img=1)
# 注意需要设定水印的长宽wm_shape(也就是加密的时候要记录水印的宽高信息)
bwm1.extract(filename='embedded.png', wm_shape=(128, 128),
             out_wm_name='wm_extracted.png', )

img

NO.6
图片编辑

经过仓库脚本设置的图片工具后,可以正常提取出水印

如旋转图片,遮挡部分图片,裁剪部分图片,缩放图片等

img

在实际场景中,又测试了以下应用

google的squoosh图片压缩,正常提取水印

img

微信发送非原图,或者win上snipaste截屏,提出的水印就是一大片雪花

img

END.