Python如何为图片添加水印


Posted in Python onNovember 25, 2016

添加水印的主要目的是为了版权保护,使自己的图像不被抄袭或者恶意转载。网上有很多制作水印的工具,本帖介绍怎么使用Python-Pillow库给图片添加水印。

使用ImageMagick添加图片水印-Linux 添加文本水印

在图片右下角添加文字:

from PILimport Image, ImageDraw, ImageFont
 
# 指定要使用的字体和大小;/Library/Fonts/是macOS字体目录;Linux的字体目录是/usr/share/fonts/
font = ImageFont.truetype('/Library/Fonts/Arial.ttf', 24)
 
# image: 图片  text:要添加的文本 font:字体
def add_text_to_image(image, text, font=font):
  rgba_image = image.convert('RGBA')
  text_overlay = Image.new('RGBA', rgba_image.size, (255, 255, 255, 0))
  image_draw = ImageDraw.Draw(text_overlay)
 
  text_size_x, text_size_y = image_draw.textsize(text, font=font)
  # 设置文本文字位置
  print(rgba_image)
  text_xy = (rgba_image.size[0] - text_size_x, rgba_image.size[1] - text_size_y)
  # 设置文本颜色和透明度
  image_draw.text(text_xy, text, font=font, fill=(76, 234, 124, 180))
 
  image_with_text = Image.alpha_composite(rgba_image, text_overlay)
 
  return image_with_text
 
im_before = Image.open("lena.jpg")
im_before.show()
im_after = add_text_to_image(im_before, 'WTF')
im_after.show()
# im.save('im_after.jpg')

Python如何为图片添加水印

添加图片水印

fromPILimportImage, ImageDraw
 
defadd_watermark_to_image(image, watermark):
  rgba_image = image.convert('RGBA')
  rgba_watermark = watermark.convert('RGBA')
 
  image_x, image_y = rgba_image.size
  watermark_x, watermark_y = rgba_watermark.size
 
  # 缩放图片
  scale = 10
  watermark_scale = max(image_x / (scale * watermark_x), image_y / (scale * watermark_y))
  new_size = (int(watermark_x * watermark_scale), int(watermark_y * watermark_scale))
  rgba_watermark = rgba_watermark.resize(new_size, resample=Image.ANTIALIAS)
  # 透明度
  rgba_watermark_mask = rgba_watermark.convert("L").point(lambda x: min(x, 180))
  rgba_watermark.putalpha(rgba_watermark_mask)
 
  watermark_x, watermark_y = rgba_watermark.size
  # 水印位置
  rgba_image.paste(rgba_watermark, (image_x - watermark_x, image_y - watermark_y), rgba_watermark_mask)
 
  return rgba_image
 
im_before = Image.open("lena.jpg")
im_before.show()
 
im_watermark = Image.open("watermark.jpg")
im_after = add_watermark_to_image(im_before, im_watermark)
im_after.show()
# im.save('im_after.jpg')

Python如何为图片添加水印

Python 相关文章推荐
Python中的闭包详细介绍和实例
Nov 21 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
Python Flask前后端Ajax交互的方法示例
Jul 31 Python
pandas 根据列的值选取所有行的示例
Nov 07 Python
python学生管理系统学习笔记
Mar 19 Python
Python利用神经网络解决非线性回归问题实例详解
Jul 19 Python
python使用pygame实现笑脸乒乓球弹珠球游戏
Nov 25 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
Python制作简易版小工具之计算天数的实现思路
Feb 13 Python
Python pip配置国内源的方法
Feb 14 Python
Python如何截图保存的三种方法(小结)
Sep 01 Python
python如何控制进程或者线程的个数
Oct 16 Python
Python pass详细介绍及实例代码
Nov 24 #Python
Python脚本实时处理log文件的方法
Nov 21 #Python
深入理解 Python 中的多线程 新手必看
Nov 20 #Python
详解python的数字类型变量与其方法
Nov 20 #Python
python中异常报错处理方法汇总
Nov 20 #Python
详解MySQL数据类型int(M)中M的含义
Nov 20 #Python
python制作websocket服务器实例分享
Nov 20 #Python
You might like
php 购物车实例(申精)
2009/05/11 PHP
php 用checkbox一次性删除多条记录的方法
2010/02/23 PHP
PHP跨时区(UTC时间)应用解决方案
2013/01/11 PHP
用JavaScript页面不刷新时全选择,全删除(GridView)
2009/04/14 Javascript
JavaScript的parseInt 进制问题
2009/05/07 Javascript
JavaScript 新手24条实用建议[TUTS+]
2009/06/21 Javascript
Javascript+XMLHttpRequest+asp.net无刷新读取数据库数据
2009/08/09 Javascript
javascript getElementsByClassName 和js取地址栏参数
2010/01/02 Javascript
jquery高级编程的最佳实践详解
2014/03/23 Javascript
JavaScript设计模式学习之“类式继承”
2015/03/12 Javascript
Javascript使用post方法提交数据实例
2015/08/03 Javascript
基于 Node.js 实现前后端分离
2016/04/23 Javascript
javascript中Number的方法小结
2016/11/21 Javascript
JavaScript Uploadify文件上传实例
2017/02/28 Javascript
vue实现图书管理demo详解
2017/10/17 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
2018/11/22 Javascript
vue中格式化时间过滤器代码实例
2019/04/17 Javascript
JavaScript的变量声明与声明提前用法实例分析
2019/11/26 Javascript
谈一谈vue请求数据放在created好还是mounted里好
2020/07/27 Javascript
Python基于列表list实现的CRUD操作功能示例
2018/01/05 Python
Python查找两个有序列表中位数的方法【基于归并算法】
2018/04/20 Python
Numpy array数据的增、删、改、查实例
2018/06/04 Python
python中ASCII码字符与int之间的转换方法
2018/07/09 Python
在Python中过滤Windows文件名中的非法字符方法
2019/06/10 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python之yield和Generator深入解析
2019/09/18 Python
Django用数据库表反向生成models类知识点详解
2020/03/25 Python
什么是Linux虚拟文件系统VFS
2015/08/25 面试题
简述Linux文件系统通过i节点把文件的逻辑结构和物理结构转换的工作过程
2012/04/17 面试题
护理自我鉴定范文
2013/10/06 职场文书
工程专业毕业生自荐信范文
2013/12/25 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2016元旦文艺汇演主持词
2015/07/06 职场文书
Java 泛型详解(超详细的java泛型方法解析)
2021/07/02 Java/Android
Python中的嵌套循环详情
2022/03/23 Python
docker compose 部署 golang 的 Athens 私有代理问题
2022/04/28 Servers