Python基于pillow库实现生成图片水印


Posted in Python onSeptember 14, 2020

一、背景

平时工作中经常需要使用各种尺寸、格式的图片来做测试,每次从百度或者谷歌找图都非常麻烦,于是就想作为一个程序员怎么能被这个问题影响效率呢,一切程序可以做的事情都应该用程勋来做并提升效率,这才是我们编程的意义所在。

二、实现

于是就想实现一个web版的图片生成器,填颜色、尺寸、格式就可以生成指定的图片,Python的图像库肯定首选pillow,实现起来很简单,所以就不详细解释了,直接上代码:

def generate_image(static_dir, image_type, width, height, color):
  print(static_dir, image_type, width, height, color)

  mode = 'RGB'
  width = int(width)
  height = int(height)
  color_tuple = ImageColor.getcolor(color, mode)

  image = Image.new(mode, (width, height), color_tuple)

  image_dir = os.path.join(static_dir, 'image')
  image_name = '%sx%s_%s.%s' % (width, height, int(time.time()), image_type)
  image_path = os.path.join(image_dir, image_name)

  font = ImageFont.truetype('./font/consola.ttf', 96)
  draw = ImageDraw.Draw(image)
  mark_content = '{width}x{height}'.format(width=width, height=height)
  for i, ch in enumerate(mark_content):
    draw.text((60*i + 10, 10), ch, font=font, fill=rndColor())

  image.save(image_path)

  print('image_path:%s' % (image_path))
  return image_path

这个就是核心的生成图片的逻辑,其中稍微费了点时间的是水印的生成,这里添加水印的用意是为了在图片上显示图片的尺寸,方便使用者直观的看到该图片的尺寸,其中需要使用到ImageDraw.text()方法,这里需要注意的是要根据你的字体大小设置合适的字间距,我是通过多次调整尝试的,最终得到一个自己满意的效果。

另外,关于字体名字,默认在不同平台下会去不同的目录查找该名字的字体,Windows下是在c://windows/fonts/目录下,Linux是在/usr/share/fonts目录下,这里为了避免后续部署时不同电脑上字体不同导致的问题,我直接把字体文件放在代码库中了,所以使用的是一个相对路径。

三、预览

如果想要预览效果的,可以访问这里:https://nicolerobin.top/image_holder/static/index.html

代码库地址:https://github.com/NicoleRobin/image_holder

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python实现数独算法实例
Jun 09 Python
简单了解Python下用于监视文件系统的pyinotify包
Nov 13 Python
pyqt5简介及安装方法介绍
Jan 31 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
Python多进程入门、分布式进程数据共享实例详解
Jun 03 Python
使用python接受tgam的脑波数据实例
Apr 09 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
pandas使用函数批量处理数据(map、apply、applymap)
Nov 27 Python
Django REST Framework 分页(Pagination)详解
Nov 30 Python
python爬虫如何解决图片验证码
Feb 14 Python
使用python求解迷宫问题的三种实现方法
Mar 17 Python
python神经网络学习 使用Keras进行回归运算
May 04 Python
python/golang实现循环链表的示例代码
Sep 14 #Python
python实现canny边缘检测
Sep 14 #Python
Python gevent协程切换实现详解
Sep 14 #Python
通过实例了解python__slots__使用方法
Sep 14 #Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
Sep 14 #Python
详解python实现可视化的MD5、sha256哈希加密小工具
Sep 14 #Python
Python利用pip安装tar.gz格式的离线资源包
Sep 14 #Python
You might like
JS异常处理try..catch语句的作用和实例
2014/05/05 PHP
一个不易被发现的PHP后门代码解析
2014/07/05 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
详解PHP中的PDO类
2015/07/06 PHP
php字符串比较函数用法小结(strcmp,strcasecmp,strnatcmp及strnatcasecmp)
2016/07/18 PHP
PHP中多线程的两个实现方法
2016/10/14 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
javascript之水平横向滚动歌词同步的应用
2007/05/07 Javascript
JS提交并解析后台返回的XML的代码
2008/11/03 Javascript
js语法学习之判断一个对象是否为数组
2014/05/13 Javascript
原生js结合html5制作简易的双色子游戏
2015/03/30 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
ES6的新特性概览
2016/03/10 Javascript
深入解析桶排序算法及Node.js上JavaScript的代码实现
2016/07/06 Javascript
jQuery layui常用方法介绍
2016/07/25 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
Bootstrap组件之下拉菜单,多级菜单及按钮布局方法实例
2017/05/25 Javascript
用vue2.0实现点击选中active其他选项互斥的效果
2018/04/12 Javascript
详解swipe使用及竖屏页面滚动方法
2018/06/28 Javascript
turn.js异步加载实现翻书效果
2019/07/25 Javascript
js实现删除json中指定的元素
2020/09/22 Javascript
nodejs中的异步编程知识点详解
2021/01/17 NodeJs
[01:53]2016完美“圣”典风云人物:Maybe专访
2016/12/05 DOTA
[00:16]热血竞技场
2019/03/06 DOTA
[01:32:50]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第一场 1月25日
2021/03/11 DOTA
Python生成器定义与简单用法实例分析
2018/04/30 Python
对python借助百度云API对评论进行观点抽取的方法详解
2019/02/21 Python
详解用python写一个抽奖程序
2019/05/10 Python
Python算法中的时间复杂度问题
2019/11/19 Python
问卷调查计划书
2014/01/10 职场文书
预备党员党课思想汇报
2014/01/13 职场文书
联谊会主持词
2014/03/26 职场文书
出国签证在职证明
2014/09/20 职场文书
校长四风对照检查材料
2014/09/27 职场文书
医院党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
合理化建议书范文
2015/09/14 职场文书