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过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
Python加pyGame实现的简单拼图游戏实例
May 15 Python
Python实现树莓派WiFi断线自动重连的实例代码
Mar 16 Python
Python 使用with上下文实现计时功能
Mar 09 Python
python 检查是否为中文字符串的方法
Dec 28 Python
解决Pandas的DataFrame输出截断和省略的问题
Feb 08 Python
Python实现微信消息防撤回功能的实例代码
Apr 29 Python
Python matplotlib以日期为x轴作图代码实例
Nov 22 Python
python打开音乐文件的实例方法
Jul 21 Python
Python爬取数据并实现可视化代码解析
Aug 12 Python
详解anaconda安装步骤
Nov 23 Python
python中的class_static的@classmethod的巧妙用法
Jun 22 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
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
2019/08/05 PHP
Code: write(s,d) 输出连续字符串
2007/08/19 Javascript
javascript cookies操作集合
2010/04/12 Javascript
最新的10款jQuery内容滑块插件分享
2011/09/18 Javascript
JS命名空间的另一种实现
2013/08/09 Javascript
jquery中show()、hide()和toggle()用法实例
2015/01/15 Javascript
jQuery使用之处理页面元素用法实例
2015/01/19 Javascript
jQuery实现数秒后自动提交form的方法
2015/03/05 Javascript
Jquery $when done then的用法详解
2016/05/20 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
Jil,高效的json序列化和反序列化库
2017/02/15 Javascript
微信小程序 开发之滑块视图容器(swiper)详解及实例代码
2017/02/22 Javascript
原生JS实现图片无缝滚动方法(附带封装的运动框架)
2017/10/01 Javascript
node获取客户端ip功能简单示例
2019/08/24 Javascript
Vue实现PC端靠边悬浮球的代码
2020/05/09 Javascript
vue实现页面切换滑动效果
2020/06/29 Javascript
[02:40]DOTA2殁境神蚀者 英雄基础教程
2013/11/26 DOTA
python批量导出导入MySQL用户的方法
2013/11/15 Python
python实现去除下载电影和电视剧文件名中的多余字符的方法
2014/09/23 Python
详尽讲述用Python的Django框架测试驱动开发的教程
2015/04/22 Python
Python实现Linux的find命令实例分享
2017/06/04 Python
Sublime开发python程序的示例代码
2018/01/24 Python
python 对txt中每行内容进行批量替换的方法
2018/07/11 Python
基于PyQt4和PySide实现输入对话框效果
2019/02/27 Python
Python函数装饰器常见使用方法实例详解
2019/03/30 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
2020/12/07 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
日语翻译个人求职的自我评价
2013/10/14 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
党支部公开承诺书
2014/03/28 职场文书
挂职个人工作总结
2015/03/05 职场文书
求职自我推荐信
2015/03/24 职场文书
2015年车间安全管理工作总结
2015/05/13 职场文书
JavaScript模拟实现网易云轮播效果
2022/04/04 Javascript