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抓取网页图片示例(python爬虫)
Apr 27 Python
python基础知识小结之集合
Nov 25 Python
Python实现的破解字符串找茬游戏算法示例
Sep 25 Python
Django框架教程之正则表达式URL误区详解
Jan 28 Python
python实现扫描日志关键字的示例
Apr 28 Python
python得到windows自启动列表的方法
Oct 14 Python
python多进程控制学习小结
Oct 31 Python
python for循环输入一个矩阵的实例
Nov 14 Python
Python面向对象之Web静态服务器
Sep 03 Python
Django1.11自带分页器paginator的使用方法
Oct 31 Python
使用python3批量下载rbsp数据的示例代码
Dec 20 Python
python标准库OS模块详解
Mar 10 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
《DOTA3》开发工作已经开始 《DOTA3》将代替《DOTA2》
2021/03/06 DOTA
PHP生成网站桌面快捷方式代码分享
2014/10/11 PHP
ThinkPHP中Common/common.php文件常用函数功能分析
2016/05/20 PHP
微信公众号开发之语音消息识别php代码
2016/08/08 PHP
JavaScript 动态添加表格行 使用模板、标记
2009/10/24 Javascript
javascript showModalDialog模态对话框使用说明
2009/12/31 Javascript
根据出生日期自动取得星座的js代码
2010/07/20 Javascript
Javascript中各种trim的实现详细解析
2013/12/10 Javascript
js实现checkbox全选和反选示例
2014/05/01 Javascript
JavaScript中的变量作用域介绍
2014/12/31 Javascript
浅析JavaScript中浏览器的兼容问题
2016/04/19 Javascript
BOM系列第三篇之定时器应用(时钟、倒计时、秒表和闹钟)
2016/08/17 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
在网页中插入百度地图的步骤详解
2016/12/02 Javascript
Bootstrap CSS组件之按钮下拉菜单
2016/12/17 Javascript
Bootstrap进度条学习使用
2017/02/09 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
微信小程序websocket聊天室的实现示例代码
2019/02/12 Javascript
jQuery+ajax实现批量删除功能完整示例
2019/06/06 jQuery
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
layui table数据修改的回显方法
2019/09/04 Javascript
javascript中innerHTML 获取或替换html内容的实现代码
2020/03/17 Javascript
python重试装饰器示例
2014/02/11 Python
Python的print用法示例
2014/02/11 Python
用Python进行行为驱动开发的入门教程
2015/04/23 Python
python中日志logging模块的性能及多进程详解
2017/07/18 Python
对Python的zip函数妙用,旋转矩阵详解
2018/12/13 Python
python 将对象设置为可迭代的两种实现方法
2019/01/21 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
解决安装python3.7.4报错Can''t connect to HTTPS URL because the SSL module is not available
2019/07/31 Python
使用tensorflow显示pb模型的所有网络结点方式
2020/01/23 Python
python requests.get带header
2020/05/05 Python
详解tensorflow之过拟合问题实战
2020/11/01 Python
python中reload重载实例用法
2020/12/15 Python
10张动图学会python循环与递归问题
2021/02/06 Python
Pillow图像处理库安装及使用
2022/04/12 Python