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实现比较两个列表(list)范围
Jun 12 Python
Python函数式编程指南(四):生成器详解
Jun 24 Python
Python 描述符(Descriptor)入门
Nov 20 Python
python模块之time模块(实例讲解)
Sep 13 Python
pandas 使用apply同时处理两列数据的方法
Apr 20 Python
PyQt5 QSerialPort子线程操作的实现
Apr 21 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
Jul 22 Python
Python实现性能自动化测试竟然如此简单
Jul 30 Python
dpn网络的pytorch实现方式
Jan 14 Python
在python tkinter界面中添加按钮的实例
Mar 04 Python
Python2 与Python3的版本区别实例分析
Mar 30 Python
运行python提示no module named sklearn的解决方法
Nov 29 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
一个多文件上传的例子(原创)
2006/10/09 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
PDO::getAttribute讲解
2019/01/28 PHP
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
2013/06/12 Javascript
一个简单的实现下拉框多选的插件可移植性比较好
2014/05/05 Javascript
jQuery截取指定长度字符串代码
2014/08/21 Javascript
复杂的javascript窗口分帧解析
2016/02/19 Javascript
KnockoutJs快速入门教程
2016/05/16 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
详解vue后台系统登录态管理
2019/04/02 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
js实现简单掷骰子效果
2019/10/24 Javascript
[02:49]DAC2018决赛日TOP5 LGD开启黑暗之门绝杀VP
2018/04/08 DOTA
Python查找相似单词的方法
2015/03/05 Python
python按时间排序目录下的文件实现方法
2018/10/17 Python
解决安装python库时windows error5 报错的问题
2018/10/21 Python
Python图像处理之gif动态图的解析与合成操作详解
2018/12/30 Python
解决在pycharm中显示额外的 figure 窗口问题
2019/01/15 Python
Django利用cookie保存用户登录信息的简单实现方法
2019/05/27 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
Ryderwear澳洲官网:澳大利亚高端健身训练装备品牌
2018/09/18 全球购物
经济实惠的豪华背包和行李袋:Packs Project
2018/10/17 全球购物
Doyoueven官网:澳大利亚健身服饰和配饰品牌
2019/03/24 全球购物
怎样建立和理解非常复杂的声明?例如定义一个包含N 个指向返回 指向字符的指针的函数的指针的数组?
2013/03/19 面试题
建筑工程专业毕业生自荐信
2013/10/19 职场文书
医院工作检讨书范文
2014/02/10 职场文书
元旦促销方案
2014/03/15 职场文书
党委班子对照检查材料
2014/08/19 职场文书
乱丢垃圾袋检讨书
2014/10/08 职场文书
西游记读书笔记
2015/06/25 职场文书
请病假条范文
2015/08/17 职场文书
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript