文章目录

  • 使用 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', )

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

  1. 测试Python下载图片的三种方法

    简 介: 通过Python软件包对网络URL图片链接进行下载,可以加快后期处理.本文测试了urllib, request两个软件包对图片进行下载效果.如果图片原网页有了防止下载机制,是无法下载图片. ...

  2. python给图片添加水印图片_使用Python编写批量添加图片水印程序

    文章目录 一.为什么要为图片添加水印 二.利用Python为图片添加水印 遍历文件夹下所有图片文件 三.利用QT for Python制作图片水印添加程序 一.为什么要为图片添加水印 在互联网写文章最 ...

  3. python读入图片的四种方式

    title: python读入图片的四种方式 date: 2022-07-02 15:11:58 tags: image process python读入图片的四种方式 ''' 多种读入图片并显示,保 ...

  4. 用Python给图片添加水印的3种方法,简单实用

    来源:关于数据分析与可视化 今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多一些,那我们开始 ...

  5. 分享几个用 Python 给图片添加水印的方法,简单实用

    作者 |俊欣 来源 |关于数据分析与可视化 今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多 ...

  6. 【Python】分享几个用Python给图片添加水印的方法,简单实用

    今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多一些,那我们开始吧 opencv模块 首先我 ...

  7. 太妙了!几个用Python给图片添加水印的方法,简单实用!

    今天来分享几种可以给图片添加水印的方法,都是十分的简单实用,大家在看了之后也可以私底下去自己试试,有些方法需要的代码量就比较少,有些方法需要的代码量就稍微多一些,那我们开始吧 opencv模块 首先我 ...

  8. Python实现图片添加水印(支持中文、英文和图片)

    欢迎关注个人公众号 DailyJobOps 阅读大纲 图片水印忽大忽小问题研究 中文水印乱码问题 水印的动态展示 背景 在上次CSDN中发表技术文章的时候,文章中涉及到图片,CSDN会自动上传然后添加 ...

  9. 图像处理五:python读取图片的几种方式

    一.读取图片方式 PIL.opencv.scikit-image: (1)PIL和Pillow只提供最基础的数字图像处理,功能有限: (2)opencv实际上是一个c++库,只是提供了python接口 ...

最新文章

  1. 可视化Spring开发插件 Spring IDE
  2. ES什么时候会平衡分片
  3. 【system generator】基于system generator的整数除法器设计
  4. c#利用反射+特性实现简单的实体映射数据库操作类实现自动增删改查(一)
  5. 01.HTML基础命令笔记
  6. java的多态怎么理解_JAVA多态的理解
  7. 021合并两个链表并排序
  8. LeetCode 647. 回文子串 (动态规划)
  9. novell.directory.ldap获取邮箱活动目录
  10. 公钥与私钥 数字签名是什么?
  11. 计算机网络自顶向下-第 8 版
  12. 网吧相关法律期待完善
  13. 选择比努力重要,与谁同行比要去的远方重要
  14. FinalShell显示文件夹
  15. 习题2_2、韩信点兵
  16. uni-app实现文件管理器(Android)
  17. Spring Boot + Vue 前后端分离开发,前端网络请求封装与配置
  18. python中的aliasing
  19. 龙贝格求积分算法例题_数值分析实习作业之龙贝格求积
  20. mysql数据库实验3查询_mysql数据库(3)-查询

热门文章

  1. 自由天空综合驱动包集合
  2. linux使用佳能ip1188,在Linux下安装打印驱动,以佳能LBP2900+为例
  3. 【OpenGL ES】绘制圆形
  4. oracle挂载磁盘阵列,数据库服务器没正常挂载磁盘阵列导致无法启动(一)
  5. 年终总结——感谢2012
  6. ***基础___探测技术
  7. #1.5与其它理论关系
  8. 打印机调用彩色和黑色JAVA,Java:利用接口实现打印机案例(墨盒有彩色和黑白色,纸张有A4纸和B5纸)...
  9. 【ASP】链接Access2007与Access2003的不同写法
  10. linux c++编程教程,Linux下的C++编程入门教程.ppt