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切片用法实例教程
Sep 08 Python
python中pygame模块用法实例
Oct 09 Python
python查询sqlite数据表的方法
May 08 Python
python 数据的清理行为实例详解
Jul 12 Python
python实现列表中由数值查到索引的方法
Jun 27 Python
使用python语言,比较两个字符串是否相同的实例
Jun 29 Python
解决Python下imread,imwrite不支持中文的问题
Dec 05 Python
对python生成业务报表的实例详解
Feb 03 Python
Pycharm新建模板默认添加个人信息的实例
Jul 15 Python
Ubuntu中配置TensorFlow使用环境的方法
Apr 21 Python
在pycharm中关掉ipython console/PyDev操作
Jun 09 Python
Python如何重新加载模块
Jul 29 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 各种应用乱码问题的解决方法
2010/05/09 PHP
使用迭代器 遍历文件信息的详解
2013/06/08 PHP
PHP微框架Dispatch简介
2014/06/12 PHP
php获取、检查类名、函数名、方法名的函数方法
2015/06/25 PHP
CentOS 7.2 下编译安装PHP7.0.10+MySQL5.7.14+Nginx1.10.1的方法详解(mini版本)
2016/09/01 PHP
PHP如何获取当前主机、域名、网址、路径、端口等参数
2017/06/09 PHP
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
jquery EasyUI的formatter格式化函数代码
2011/01/12 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
2012/05/03 Javascript
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
通过jQuery源码学习javascript(三)
2012/12/27 Javascript
使用jquery hover事件实现表格的隔行换色功能示例
2013/09/03 Javascript
原生js操作checkbox用document.getElementById实现
2013/10/12 Javascript
js验证IP及子网掩码的合法性有效性示例
2014/04/30 Javascript
jQuery入门之层次选择器实例简析
2015/12/11 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
JS返回只包含数字类型的数组实例分析
2016/12/16 Javascript
微信小程序 监听手势滑动切换页面实例详解
2017/06/15 Javascript
nodejs创建简易web服务器与文件读写的实例
2017/09/07 NodeJs
详解vue axios用post提交的数据格式
2018/08/07 Javascript
Vue SPA 初次进入加载动画实现代码
2019/11/14 Javascript
[01:04]DOTA2:伟大的Roshan雕塑震撼来临
2015/01/30 DOTA
神经网络python源码分享
2017/12/15 Python
python实战教程之自动扫雷
2018/07/13 Python
正确理解Python中if __name__ == '__main__'
2019/01/24 Python
Python3实现的反转单链表算法示例
2019/03/08 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
使用CSS3设计地图上的雷达定位提示效果
2016/04/05 HTML / CSS
马来西亚综合购物网站:Lazada马来西亚
2018/06/05 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
2014年迎新年联欢会活动策划方案
2014/02/26 职场文书
2014年母亲节寄语
2014/05/07 职场文书
法人任命书范本
2014/06/04 职场文书
初中政教处工作总结
2015/08/12 职场文书
《悲惨世界》:比天空更广阔的是人的心灵
2020/01/16 职场文书
vue实现移动端div拖动效果
2022/03/03 Vue.js