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代码真的很爽
Aug 26 Python
Python中使用strip()方法删除字符串中空格的教程
May 20 Python
python中的随机函数random的用法示例
Jan 27 Python
浅谈Python中重载isinstance继承关系的问题
May 04 Python
解决python3 urllib 链接中有中文的问题
Jul 16 Python
python os.path模块常用方法实例详解
Sep 16 Python
在mac下查找python包存放路径site-packages的实现方法
Nov 06 Python
pandas使用apply多列生成一列数据的实例
Nov 28 Python
Django自定义用户登录认证示例代码
Jun 30 Python
详解将Pandas中的DataFrame类型转换成Numpy中array类型的三种方法
Jul 06 Python
对Django 中request.get和request.post的区别详解
Aug 12 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
Jan 18 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
Windows下IIS6/Apache2.2.4+MySQL5.2+PHP5.2.1安装配置方法
2007/05/03 PHP
PHP 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
解析php做推送服务端实现ios消息推送
2013/07/01 PHP
php强制更新图片缓存的方法
2015/02/11 PHP
WordPress开发中短代码的实现及相关函数使用技巧
2016/01/05 PHP
FormValidate 表单验证功能代码更新并提供下载
2008/08/23 Javascript
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
2012/05/14 Javascript
Jquery跳到页面指定位置的方法
2014/05/12 Javascript
jQuery学习笔记之总体架构
2014/06/03 Javascript
jquery.ajax之beforeSend方法使用介绍
2014/12/08 Javascript
浅谈jQuery中的事件
2015/03/23 Javascript
jquery form表单获取内容以及绑定数据
2016/02/24 Javascript
json对象与数组以及转换成js对象的简单实现方法
2016/06/24 Javascript
javascript按钮禁用和启用的效果实例代码
2017/10/29 Javascript
VS Code转换大小写、修改选中文字或代码颜色的方法
2017/12/15 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
Vue搭建后台系统需要注意的问题
2019/11/08 Javascript
微信小程序后端(java)开发流程的详细步骤
2019/11/13 Javascript
解决idea开发遇到javascript动态添加html元素时中文乱码的问题
2020/09/29 Javascript
编写Python脚本批量下载DesktopNexus壁纸的教程
2015/05/06 Python
python通过ftplib登录到ftp服务器的方法
2015/05/08 Python
python学习之编写查询ip程序
2016/02/27 Python
Python操作配置文件ini的三种方法讲解
2019/02/22 Python
查看jupyter notebook每个单元格运行时间实例
2020/04/22 Python
python实时监控logstash日志代码
2020/04/27 Python
Python实现ElGamal加密算法的示例代码
2020/06/19 Python
pytorch SENet实现案例
2020/06/24 Python
python xlsxwriter模块的使用
2020/12/24 Python
bareMinerals官网:矿物质化妆品和护肤品
2018/02/04 全球购物
ABOUT YOU匈牙利:500个最受欢迎的时尚品牌
2019/07/19 全球购物
给排水专业应届生求职信
2013/10/12 职场文书
2014年会策划方案
2014/05/11 职场文书
质量在我心中演讲稿
2014/09/02 职场文书
欢迎新生标语2015
2015/07/16 职场文书
赡养老人协议书范本
2015/08/06 职场文书
Python GUI编程之tkinter 关于 ttkbootstrap 的使用详解
2022/03/03 Python