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的Bottle框架中返回静态文件和JSON对象的方法
Apr 30 Python
Python3 中文文件读写方法
Jan 23 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 Python
Python中列表与元组的乘法操作示例
Feb 10 Python
python selenium 对浏览器标签页进行关闭和切换的方法
May 21 Python
详解从Django Rest Framework响应中删除空字段
Jan 11 Python
详解django中url路由配置及渲染方式
Feb 25 Python
Pyqt5如何让QMessageBox按钮显示中文示例代码
Apr 11 Python
PyQt4编程之让状态栏显示信息的方法
Jun 18 Python
PyCharm中代码字体大小调整方法
Jul 29 Python
如何使用Python处理HDF格式数据及可视化问题
Jun 24 Python
Python绘图之二维图与三维图详解
Aug 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
Ajax PHP简单入门教程代码
2008/04/25 PHP
8个出色的WordPress SEO插件收集
2011/02/26 PHP
第四章 php数学运算
2011/12/30 PHP
浅析虚拟主机服务器php fsockopen函数被禁用的解决办法
2013/08/07 PHP
PHP Switch 语句之学习笔记
2013/09/21 PHP
php打印一个边长为N的实心和空心菱型的方法
2015/03/02 PHP
Javascript 文件夹选择框的两种解决方案
2009/07/01 Javascript
javascript 写类方式之九
2009/07/05 Javascript
Ajax局部更新导致JS事件重复触发问题的解决方法
2014/10/14 Javascript
用JavaScript显示浏览器客户端信息的超相近教程
2015/06/18 Javascript
JS脚本根据手机浏览器类型跳转WAP手机网站(两种方式)
2015/08/04 Javascript
jQuery头像裁剪工具jcrop用法实例(附演示与demo源码下载)
2016/01/22 Javascript
jQuery中ajax错误调试分析
2016/12/01 Javascript
简单实现jquery焦点图
2016/12/12 Javascript
详解如何构建一个Angular6的第三方npm包
2018/09/07 Javascript
Element-UI中Upload上传文件前端缓存处理示例
2019/02/21 Javascript
JavaScript实现HSL拾色器
2020/05/21 Javascript
[05:11]TI9战队采访——VIRTUSPRO
2019/08/22 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
详解Python的单元测试
2015/04/28 Python
Python 自动化表单提交实例代码
2017/06/08 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
Python3中的列表生成式、生成器与迭代器实例详解
2018/06/11 Python
python虚拟环境迁移方法
2019/01/03 Python
pytorch 模型的train模式与eval模式实例
2020/02/20 Python
python matplotlib 绘图 和 dpi对应关系详解
2020/03/14 Python
CSS图片翻转动画技术详解(IE也实现了)
2014/04/03 HTML / CSS
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
组织鉴定材料
2014/06/02 职场文书
生物科学专业自荐书
2014/06/20 职场文书
党员干部观看《周恩来四个昼夜》思想汇报
2014/09/10 职场文书
学校总务处领导班子民主生活会对照检查材料思想汇报
2014/09/27 职场文书
首都博物馆观后感
2015/06/05 职场文书
MySQL update set 和 and的区别
2021/05/08 MySQL
Python中json.dumps()函数的使用解析
2021/05/17 Python
go开发alertmanger实现钉钉报警
2021/07/16 Golang