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 相关文章推荐
pyv8学习python和javascript变量进行交互
Dec 04 Python
Python版微信红包分配算法
May 04 Python
python实现复制整个目录的方法
May 12 Python
python对DICOM图像的读取方法详解
Jul 17 Python
浅谈Python使用Bottle来提供一个简单的web服务
Dec 27 Python
Python自定义简单图轴简单实例
Jan 08 Python
Numpy数组的保存与读取方法
Apr 04 Python
python实现年会抽奖程序
Jan 22 Python
Python之pymysql的使用小结
Jul 01 Python
python3 enum模块的应用实例详解
Aug 12 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
Jan 29 Python
python多线程方法详解
Jan 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
《一拳超人》埼玉一拳下去,他们存在了800年毫无意义!
2020/03/02 日漫
PHP 日志缩略名的创建函数代码
2010/05/26 PHP
php中使用Curl、socket、file_get_contents三种方法POST提交数据
2011/08/12 PHP
PHP面向对象程序设计组合模式与装饰模式详解
2016/12/02 PHP
基于JQuery的动态删除Table表格的行和列的代码
2011/05/12 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
把字符串按照特定的字母顺序进行排序的js代码
2014/01/28 Javascript
javascript判断是手机还是电脑访问网页的简单实例分享
2014/06/03 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
AngularJS入门教程之静态模板详解
2016/08/18 Javascript
jquery获取table指定行和列的数据方法(当前选中行、列)
2016/11/07 Javascript
AngularJS实现使用路由切换视图的方法
2017/01/24 Javascript
JavaScript闭包和回调详解
2017/08/09 Javascript
小程序实现多选框功能
2018/10/30 Javascript
原生js实现购物车
2020/09/23 Javascript
python itchat实现微信自动回复的示例代码
2017/08/14 Python
Python3利用Dlib19.7实现摄像头人脸识别的方法
2018/05/11 Python
Python切片操作深入详解
2018/07/27 Python
python使用thrift教程的方法示例
2019/03/21 Python
对pyqt5中QTabWidget的相关操作详解
2019/06/21 Python
python基于paramiko将文件上传到服务器代码实现
2019/07/08 Python
python 寻找离散序列极值点的方法
2019/07/10 Python
django表单的Widgets使用详解
2019/07/22 Python
Python操作qml对象过程详解
2019/09/26 Python
Python中import导入不同目录的模块方法详解
2020/02/18 Python
python包的导入方式总结
2021/03/02 Python
AmazeUI 加载进度条的实现示例
2020/08/20 HTML / CSS
Marks & Spencer爱尔兰:英国马莎百货
2016/04/20 全球购物
Ryderwear美国官网:澳大利亚高端健身训练装备品牌
2018/04/24 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
自动化专业职业生涯规划书范文
2014/01/16 职场文书
市场营销专业求职信
2014/06/17 职场文书
志愿者活动总结报告
2014/06/27 职场文书
幼儿园教研工作总结2015
2015/05/12 职场文书
Redis如何使用乐观锁(CAS)保证数据一致性
2022/03/25 Redis
vue组件vue-esign实现电子签名
2022/04/21 Vue.js