原文链接:https://dsx2016.com/?p=1831
公众号:大师兄2016
水印用途
保护版权
数字水印,此处应用为盲水印,效果为隐藏式水印,无法被显式的看见,数据被编码后不易被破解,可以追踪数据来源.
使用场景
-
摄影师,设计师,画家,在作用中加入水印,作为数字取证
-
加密文件分发,不同的人加上不同的水印,标识名称,时间等信息,如果资料被流出复制,可根据水印找到责任人.
-
加密信息,也称为隐写术,传递不希望被别人看到的资料和信息等,图片本身只是信息载体
项目地址
github仓库
https://github.com/guofei9987/blind_watermark
环境搭建
下载git仓库
git clone git@github.com:guofei9987/blind_watermark.git
进入项目文件夹
cd blind_watermark
安装依赖
pip install -r requirements.txt
加密图片
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')
解密图片
解密水印不需要原图,但是需要知道水印图的宽高
所以在加密的时候,建议统一水印图的宽高,方便后续的解密.
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', )
图片编辑
经过仓库脚本设置的图片工具后,可以正常提取出水印
如旋转图片,遮挡部分图片,裁剪部分图片,缩放图片等
在实际场景中,又测试了以下应用
google的squoosh图片压缩,正常提取水印
微信发送非原图,或者win上snipaste截屏,提出的水印就是一大片雪花
END.