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 相关文章推荐
使用70行Python代码实现一个递归下降解析器的教程
Apr 17 Python
Python编程实现的简单神经网络算法示例
Jan 26 Python
Python File readlines() 使用方法
Mar 19 Python
python多线程之事件Event的使用详解
Apr 27 Python
python同时遍历数组的索引和值的实例
Nov 15 Python
解决python给列表里添加字典时被最后一个覆盖的问题
Jan 21 Python
python实现函数极小值
Jul 10 Python
python设计tcp数据包协议类的例子
Jul 23 Python
python3使用Pillow、tesseract-ocr与pytesseract模块的图片识别的方法
Feb 26 Python
python批量修改交换机密码的示例
Sep 22 Python
解决Python import .pyd 可能遇到路径的问题
Mar 04 Python
用python基于appium模块开发一个自动收取能量的小助手
Sep 25 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 zlib压缩和解压缩swf文件的代码
2008/12/30 PHP
PHP 强制性文件下载功能的函数代码(任意文件格式)
2010/05/26 PHP
php使用Cookie实现和用户会话的方法
2015/01/21 PHP
数组任意位置插入元素,删除特定元素的实例
2017/03/02 PHP
JS 常用校验函数
2009/03/26 Javascript
jquery多浏览器捕捉回车事件代码
2010/06/22 Javascript
jquery动画2.元素坐标动画效果(创建一个图片走廊)
2012/08/24 Javascript
动态创建script在IE中缓存js文件时导致编码的解决方法
2014/05/04 Javascript
jQuery制作拼图小游戏
2015/01/12 Javascript
基于JS实现新闻列表无缝向上滚动实例代码
2016/01/22 Javascript
完美的js div拖拽实例代码
2016/09/24 Javascript
Angular中实现树形结构视图实例代码
2017/05/05 Javascript
zTree获取当前节点的下一级子节点数实例
2017/09/05 Javascript
vue使用keep-alive实现数据缓存不刷新
2017/10/21 Javascript
使用jquery DataTable和ajax向页面显示数据列表的方法
2018/08/09 jQuery
在Vue项目中,防止页面被缩放和放大示例
2019/10/28 Javascript
JS实现可视化音频效果的实例代码
2020/01/16 Javascript
Python中多线程thread与threading的实现方法
2014/08/18 Python
在Python的Django框架中编写编译函数
2015/07/20 Python
python中验证码连通域分割的方法详解
2018/06/04 Python
python 在屏幕上逐字显示一行字的实例
2018/12/24 Python
django 通过URL访问上传的文件方法
2019/07/28 Python
python爬虫爬取笔趣网小说网站过程图解
2019/11/18 Python
python实现音乐播放和下载小程序功能
2020/04/26 Python
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
ZWILLING双立人英国网上商店:德国刀具锅具厨具品牌
2018/05/15 全球购物
Nike法国官方网站:Nike.com FR
2018/07/22 全球购物
存储过程和函数的区别
2013/05/28 面试题
Ajax的优点和缺点
2014/11/21 面试题
秋季运动会活动方案
2014/02/05 职场文书
《钱学森》听课反思
2014/03/01 职场文书
财务科科长岗位职责
2014/03/10 职场文书
画展邀请函
2015/01/31 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
Golang表示枚举类型的详细讲解
2021/09/04 Golang
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js