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 isinstance判断对象类型
Sep 06 Python
利用Python学习RabbitMQ消息队列
Nov 30 Python
python中OrderedDict的使用方法详解
May 05 Python
python基础练习之几个简单的游戏
Nov 10 Python
python将回车作为输入内容的实例
Jun 23 Python
详解Python发送email的三种方式
Oct 18 Python
不归路系列:Python入门之旅-一定要注意缩进!!!(推荐)
Apr 16 Python
PyQt5通信机制 信号与槽详解
Aug 07 Python
Numpy的简单用法小结
Aug 28 Python
python numpy之np.random的随机数函数使用介绍
Oct 06 Python
python高阶函数map()和reduce()实例解析
Mar 16 Python
浅谈多卡服务器下隐藏部分 GPU 和 TensorFlow 的显存使用设置
Jun 30 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 和 MySQL 开发的 8 个技巧
2006/10/09 PHP
php trim 去除空字符的定义与语法介绍
2010/05/31 PHP
PHP防CC攻击实现代码
2011/12/29 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
PHP解码unicode编码的中文字符代码分享
2014/08/13 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php获取文件类型和文件信息的方法
2015/07/10 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
Jquery判断$(&quot;#id&quot;)获取的对象是否存在的方法
2013/09/25 Javascript
js中直接声明一个对象的方法
2014/08/10 Javascript
jQuery Mobile操作HTML5的常用函数总结
2016/05/17 Javascript
Vue-resource实现ajax请求和跨域请求示例
2017/02/23 Javascript
jQuery Form插件使用详解_动力节点Java学院整理
2017/07/17 jQuery
Vue项目中使用Vux的安装过程
2018/05/01 Javascript
vue项目中添加单元测试的方法
2018/07/21 Javascript
vue实现打印功能的两种方法
2018/09/07 Javascript
react native基于FlatList下拉刷新上拉加载实现代码示例
2018/09/30 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
只有 20 行的 JavaScript 模板引擎实例详解
2020/05/11 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
python查询mysql中文乱码问题
2014/11/09 Python
Python使用scrapy采集时伪装成HTTP/1.1的方法
2015/04/08 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
代码分析Python地图坐标转换
2018/02/08 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Tensorflow 自定义loss的情况下初始化部分变量方式
2020/01/06 Python
Django Channel实时推送与聊天的示例代码
2020/04/30 Python
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
银河香水:Galaxy Perfume
2019/03/25 全球购物
秋季红领巾广播稿
2014/01/27 职场文书
企业道德讲堂实施方案
2014/03/19 职场文书
就业协议书范本
2014/10/08 职场文书
Python面向对象之内置函数相关知识总结
2021/06/24 Python
Redis实现一个账号只能登录一个设备
2022/04/19 Redis