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 相关文章推荐
简单介绍Ruby中的CGI编程
Apr 10 Python
Python的ORM框架中SQLAlchemy库的查询操作的教程
Apr 25 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
python调用API实现智能回复机器人
Apr 10 Python
python版大富翁源代码分享
Nov 19 Python
对python捕获ctrl+c手工中断程序的两种方法详解
Dec 26 Python
DataFrame:通过SparkSql将scala类转为DataFrame的方法
Jan 29 Python
Python numpy.zero() 初始化矩阵实例
Nov 27 Python
python 命名规范知识点汇总
Feb 14 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
详解python内置模块urllib
Sep 09 Python
Python基于pillow库实现生成图片水印
Sep 14 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
超强分页类2.0发布,支持自定义风格,默认4种显示模式
2007/01/02 PHP
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
2011/07/23 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
2014/08/22 PHP
php英文单词统计器
2016/06/23 PHP
php基于单例模式封装mysql类完整实例
2016/10/18 PHP
thinkphp 验证码 的使用小结
2017/05/07 PHP
jquery中:input和input的区别分析
2011/07/13 Javascript
JQuery AJAX 中文乱码问题解决
2013/06/05 Javascript
JQuery的Ajax请求实现局部刷新的简单实例
2014/02/11 Javascript
jQuery之ajax删除详解
2014/02/27 Javascript
JavaScript获得当前网页来源页面(即上一页)的方法
2015/04/03 Javascript
VueJS全面解析
2016/11/10 Javascript
Javascript防止图片拉伸的自适应处理方法
2017/12/26 Javascript
JS实现统计字符串中字符出现个数及最大个数功能示例
2018/06/04 Javascript
在 Angular6 中使用 HTTP 请求服务端数据的步骤详解
2018/08/06 Javascript
小程序云开发初探(小结)
2018/10/24 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
2019/07/25 Javascript
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
jquery实现抽奖功能
2020/10/22 jQuery
[01:03:51]2018DOTA2亚洲邀请赛 4.7 淘汰赛 VP vs LGD 第三场
2018/04/09 DOTA
python进阶教程之模块(module)介绍
2014/08/30 Python
用Python进行简单图像识别(验证码)
2018/01/19 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
django 扩展user用户字段inlines方式
2020/03/30 Python
python名片管理系统开发
2020/06/18 Python
UI自动化定位常用实现方法代码示例
2020/10/27 Python
pycharm 实现复制一行的快捷键
2021/01/15 Python
Crucial英睿达法国官网:内存条及SSD固态硬盘升级
2018/07/13 全球购物
编码实现字符串转整型的函数
2012/06/02 面试题
优秀教师演讲稿
2014/05/06 职场文书
应届硕士毕业生自荐信
2014/05/26 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
幼儿园教师的自我评价范文
2014/09/17 职场文书
实训报告范文大全
2014/11/04 职场文书
夫妻吵架保证书
2015/05/08 职场文书
创业计划书之香辣虾火锅
2019/09/23 职场文书