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 相关文章推荐
Python3基础之函数用法
Aug 13 Python
python在windows命令行下输出彩色文字的方法
Mar 19 Python
python3中set(集合)的语法总结分享
Mar 24 Python
python模拟登录并且保持cookie的方法详解
Apr 04 Python
如何在python字符串中输入纯粹的{}
Aug 22 Python
解决PyCharm import torch包失败的问题
Oct 13 Python
简单了解python中对象的取反运算符
Jul 01 Python
Django logging配置及使用详解
Jul 23 Python
Python 写入训练日志文件并控制台输出解析
Aug 13 Python
Pycharm和Idea支持的vim插件的方法
Feb 21 Python
用python实现学生管理系统
Jul 24 Python
python实现手机推送 代码也就10行左右
Apr 12 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(2)
2006/10/09 PHP
解决了Ajax、MySQL 和 Zend Framework 的乱码问题
2009/03/03 PHP
PHP开发者常犯的10个MySQL错误更正剖析
2012/01/30 PHP
Web程序工作原理详解
2014/12/25 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
2018/04/09 PHP
Javascript 各浏览器的 Javascript 效率对比
2008/01/23 Javascript
Javascript面象对象成员、共享成员变量实验
2010/11/19 Javascript
JavaScript中的16进制字符(改进)
2011/11/21 Javascript
js弹出层(jQuery插件形式附带reLoad功能)
2013/04/12 Javascript
JavaScript中Number.MAX_VALUE属性的使用方法
2015/06/04 Javascript
JS+CSS实现美化的下拉列表框效果
2015/08/11 Javascript
APP中javascript+css3实现下拉刷新效果
2016/01/27 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
快速解决jquery.touchSwipe左右滑动和垂直滚动条冲突
2016/04/15 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
Bootstrap源码解读排版(1)
2016/12/23 Javascript
javascript数据类型详解
2017/02/07 Javascript
JS实现前端缓存的方法
2017/09/21 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
Angular2 父子组件通信方式的示例
2018/01/29 Javascript
ng-repeat指令在迭代对象时的去重方法
2018/10/02 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
vue-music 使用better-scroll遇到轮播图不能自动轮播问题
2018/12/03 Javascript
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
Linux 下 Python 实现按任意键退出的实现方法
2016/09/25 Python
Python实现多线程HTTP下载器示例
2017/02/11 Python
致Python初学者 Anaconda入门使用指南完整版
2018/04/05 Python
python读取word文档,插入mysql数据库的示例代码
2018/11/07 Python
高校毕业生自我鉴定
2013/10/27 职场文书
魅力教师事迹材料
2014/01/10 职场文书
领导班子对照检查材料
2014/09/22 职场文书
2015年元旦文艺晚会总结(学院)
2014/11/28 职场文书
慰问信的写作格式及范文!
2019/06/24 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
Java实现简易的分词器功能
2021/06/15 Java/Android