python使用PIL模块实现给图片打水印的方法


Posted in Python onMay 22, 2015

本文实例讲述了python使用PIL模块实现给图片打水印的方法。分享给大家供大家参考。具体实现方法如下:

import Image, ImageEnhance
def reduce_opacity(im, opacity):
  """Returns an image with reduced opacity."""
  assert opacity >= 0 and opacity <= 1
  if im.mode != 'RGBA':
    im = im.convert('RGBA')
  else:
    im = im.copy()
  alpha = im.split()[3]
  alpha = ImageEnhance.Brightness(alpha).enhance(opacity)
  im.putalpha(alpha)
  return im
def watermark(im, mark, position, opacity=1):
  """Adds a watermark to an image."""
  if opacity < 1:
    mark = reduce_opacity(mark, opacity)
  if im.mode != 'RGBA':
    im = im.convert('RGBA')
  # create a transparent layer the size of the image and draw the
  # watermark in that layer.
  layer = Image.new('RGBA', im.size, (0,0,0,0))
  if position == 'tile':
    for y in range(0, im.size[1], mark.size[1]):
      for x in range(0, im.size[0], mark.size[0]):
        layer.paste(mark, (x, y))
  elif position == 'scale':
    # scale, but preserve the aspect ratio
    ratio = min(
      float(im.size[0]) / mark.size[0], float(im.size[1]) / mark.size[1])
    w = int(mark.size[0] * ratio)
    h = int(mark.size[1] * ratio)
    mark = mark.resize((w, h))
    layer.paste(mark, ((im.size[0] - w) / 2, (im.size[1] - h) / 2))
  else:
    layer.paste(mark, position)
  # composite the watermark with the layer
  return Image.composite(layer, im, layer)
def test():
  im = Image.open('test.png')
  mark = Image.open('overlay.png')
  watermark(im, mark, 'tile', 0.5).show()
  watermark(im, mark, 'scale', 1.0).show()
  watermark(im, mark, (100, 100), 0.5).show()
if __name__ == '__main__':
  test()

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
分析并输出Python代码依赖的库的实现代码
Aug 09 Python
Python中shutil模块的常用文件操作函数用法示例
Jul 05 Python
Python变量和字符串详解
Apr 29 Python
Python正则表达式常用函数总结
Jun 24 Python
python中pylint使用方法(pylint代码检查)
Apr 06 Python
python自动发送测试报告邮件功能的实现
Jan 22 Python
Python嵌套式数据结构实例浅析
Mar 05 Python
Python学习笔记之列表和成员运算符及列表相关方法详解
Aug 22 Python
python多线程实现TCP服务端
Sep 03 Python
ubuntu上安装python的实例方法
Sep 30 Python
在python中实现求输出1-3+5-7+9-......101的和
Apr 02 Python
python中time tzset()函数实例用法
Feb 18 Python
python实现读取命令行参数的方法
May 22 #Python
Python中返回字典键的值的values()方法使用
May 22 #Python
python复制文件的方法实例详解
May 22 #Python
在Python中操作字典之update()方法的使用
May 22 #Python
python判断图片宽度和高度后删除图片的方法
May 22 #Python
在Python中操作字典之setdefault()方法的使用
May 21 #Python
在Python中用keys()方法返回字典键的教程
May 21 #Python
You might like
php 获取SWF动画截图示例代码
2014/02/10 PHP
Yii使用DeleteAll连表删除出现报错问题的解决方法
2016/07/14 PHP
子窗口、父窗口和Silverlight之间的相互调用
2010/08/16 Javascript
JavaScript 程序编码规范
2010/11/23 Javascript
怎样在JavaScript里写一个swing把数据插入数据库
2012/12/10 Javascript
js中arguments的用法(实例讲解)
2013/11/30 Javascript
JavaScript设计模式之建造者模式介绍
2014/12/28 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
使用jquery实现仿百度自动补全特效
2015/07/23 Javascript
jquery+json实现动态商品内容展示的方法
2016/01/14 Javascript
使用js获取地址栏参数的方法推荐(超级简单)
2016/06/14 Javascript
Vue2.0组件间数据传递示例
2017/03/07 Javascript
老生常谈js-react组件生命周期
2017/05/02 Javascript
开发一个Parcel-vue脚手架工具(详细步骤)
2018/09/22 Javascript
详解解决Vue相同路由参数不同不会刷新的问题
2018/10/12 Javascript
vue动态注册组件实例代码详解
2019/05/30 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
[02:56]DOTA2亚洲邀请赛 VG出场战队巡礼
2015/02/07 DOTA
django 开发忘记密码通过邮箱找回功能示例
2018/04/17 Python
详解pandas使用drop_duplicates去除DataFrame重复项参数
2019/08/01 Python
Python 3 使用Pillow生成漂亮的分形树图片
2019/12/24 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
美国中小型企业领先的办公家具供应商:Office Designs
2016/11/26 全球购物
波兰最大的电商平台:Allegro.pl
2021/02/06 全球购物
什么是makefile? 如何编写makefile?
2012/08/08 面试题
应届毕业生的个人自我鉴定
2013/10/24 职场文书
自主招生自荐信范文
2013/12/04 职场文书
会计主管岗位职责
2014/01/03 职场文书
诉讼代理人授权委托书
2014/04/08 职场文书
作文评语大全
2014/04/23 职场文书
数学兴趣小组活动总结
2014/07/08 职场文书
学校党支部公开承诺书
2015/04/30 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
学习师德师风的心得体会(2篇)
2019/10/08 职场文书
实操Python爬取觅知网素材图片示例
2021/11/27 Python
Python的property属性详细讲解
2022/04/11 Python