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抓取电影天堂电影信息的代码
Apr 07 Python
Python cookbook(数据结构与算法)让字典保持有序的方法
Feb 18 Python
Django基于ORM操作数据库的方法详解
Mar 27 Python
matplotlib给子图添加图例的方法
Aug 03 Python
pycharm修改界面主题颜色的方法
Jan 17 Python
Python实现计算对象的内存大小示例
Jul 10 Python
python 直接赋值和copy的区别详解
Aug 07 Python
Python从入门到精通之环境搭建教程图解
Sep 26 Python
Python爬虫工具requests-html使用解析
Apr 29 Python
基于Python模拟浏览器发送http请求
Nov 06 Python
python Polars库的使用简介
Apr 21 Python
一文搞懂python异常处理、模块与包
Jun 26 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
利用discuz实现PHP大文件上传应用实例代码
2008/11/14 PHP
php根据分类合并数组的方法实例详解
2013/11/06 PHP
php调整gif动画图片尺寸示例代码分享
2013/12/05 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
js 复制或插入Html的实现方法小结
2010/05/19 Javascript
JavaScript中把数字转换为字符串的程序代码
2013/06/19 Javascript
js实现表格字段排序
2014/02/19 Javascript
JS实现超精简响应鼠标显示二级菜单代码
2015/09/12 Javascript
基于jquery实现轮播特效
2016/04/22 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
简单实现jQuery上传图片显示预览功能
2020/06/29 jQuery
vue+swiper实现侧滑菜单效果
2017/12/28 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
JavaScript 隐性类型转换步骤浅析
2018/03/15 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
python简单猜数游戏实例
2015/07/09 Python
Nginx搭建HTTPS服务器和强制使用HTTPS访问的方法
2015/08/16 Python
基于python3 类的属性、方法、封装、继承实例讲解
2017/09/19 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python递归函数实例讲解
2019/02/27 Python
详解Python locals()的陷阱
2019/03/26 Python
python 浮点数四舍五入需要注意的地方
2020/08/18 Python
python pygame 愤怒的小鸟游戏示例代码
2021/02/25 Python
CSS3的RGBA中关于整数和百分比值的转换
2015/08/04 HTML / CSS
详解html5 shiv.js和respond.min.js
2018/01/24 HTML / CSS
Rockport乐步美国官网:风靡美国的白宫鞋
2016/11/24 全球购物
德国家具在线:Fashion For Home
2017/03/11 全球购物
业务员岗位职责
2013/11/16 职场文书
财务总监管理岗位职责
2014/03/08 职场文书
会计工作决心书
2014/03/11 职场文书
新文化运动的口号
2014/06/21 职场文书
大专学生求职自荐信
2014/07/06 职场文书
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2014年小学美术工作总结
2014/12/20 职场文书
车间主任岗位职责
2015/02/03 职场文书
Mysql中mvcc各场景理解应用
2022/08/05 MySQL