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多线程编程方式分析示例详解
Dec 06 Python
python发布模块的步骤分享
Feb 21 Python
Python写的Socks5协议代理服务器
Aug 06 Python
python爬虫常用的模块分析
Aug 29 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
Python单体模式的几种常见实现方法详解
Jul 28 Python
Python学习pygal绘制线图代码分享
Dec 09 Python
在python3.5中使用OpenCV的实例讲解
Apr 02 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
python腾讯语音合成实现过程解析
Aug 01 Python
django项目中新增app的2种实现方法
Apr 01 Python
Python3与fastdfs分布式文件系统如何实现交互
Jun 23 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基础知识:类与对象(5) static
2006/12/13 PHP
PHP中定义数组常量(array常量)的方法
2014/11/17 PHP
laravel 创建命令行命令的图文教程
2019/10/23 PHP
ExtJs3.0中Store添加 baseParams 的Bug
2010/03/10 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
12306验证码破解思路分享
2015/03/25 Javascript
js+HTML5实现canvas多种颜色渐变效果的方法
2015/06/05 Javascript
简介JavaScript中的unshift()方法的使用
2015/06/09 Javascript
jquery UI Datepicker时间控件的使用方法(加强版)
2015/11/07 Javascript
Jquery promise实现一张一张加载图片
2015/11/13 Javascript
Javascript页面跳转常见实现方式汇总
2015/11/28 Javascript
vue-cli如何添加less 以及sass
2017/07/06 Javascript
Vue组件通信实践记录(推荐)
2017/08/15 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
Node.js利用断言模块assert进行单元测试的方法
2017/09/28 Javascript
Bootstrap 树控件使用经验分享(图文解说)
2017/11/06 Javascript
利用Console来Debug的10个高级技巧汇总
2018/03/26 Javascript
layer插件实现在弹出层中弹出一警告提示并关闭弹出层的方法
2019/09/24 Javascript
vue项目接口域名动态获取操作
2020/08/13 Javascript
[00:27]DOTA2战队VP、Secret贺新春
2018/02/11 DOTA
python八大排序算法速度实例对比
2017/12/06 Python
Python面向对象class类属性及子类用法分析
2018/02/02 Python
Python对List中的元素排序的方法
2018/04/01 Python
python实现多线程网页下载器
2018/04/15 Python
python中的句柄操作的方法示例
2019/06/20 Python
python plotly绘制直方图实例详解
2019/07/22 Python
Pytorch中accuracy和loss的计算知识点总结
2019/09/10 Python
浅析matlab中imadjust函数
2020/02/27 Python
ZINVO手表官网:男士和女士手表
2019/03/10 全球购物
Aosom西班牙:家具在线商店
2020/06/11 全球购物
英语商务邀请函范文
2014/01/16 职场文书
2014年建筑工作总结
2014/11/26 职场文书
成人成长感言如何写?
2019/08/16 职场文书
pycharm debug 断点调试心得分享
2021/04/16 Python
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS