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实现哈希表
Feb 07 Python
在Python中使用列表生成式的教程
Apr 27 Python
Python数据结构与算法之常见的分配排序法示例【桶排序与基数排序】
Dec 15 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
Aug 10 Python
pycharm安装和首次使用教程
Aug 27 Python
分析运行中的 Python 进程详细解析
Jun 22 Python
Python定时任务随机时间执行的实现方法
Aug 14 Python
Python count函数使用方法实例解析
Mar 23 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
python中random模块详解
Mar 01 Python
Python机器学习应用之工业蒸汽数据分析篇详解
Jan 18 Python
python读取并查看npz/npy文件数据以及数据显示方法
Apr 14 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实现验证码功能
2006/10/09 PHP
php中time()与$_SERVER[REQUEST_TIME]用法区别
2014/11/19 PHP
PHP+MySql+jQuery实现的"顶"和"踩"投票功能
2016/05/21 PHP
PHP的mysqli_thread_id()函数讲解
2019/01/24 PHP
JQuery获取浏览器窗口内容部分高度的代码
2012/02/24 Javascript
javascript怎么禁用浏览器后退按钮
2014/03/27 Javascript
分享9点个人认为比较重要的javascript 编程技巧
2015/04/27 Javascript
探析浏览器执行JavaScript脚本加载与代码执行顺序
2016/01/12 Javascript
一道常被人轻视的web前端常见面试题(JS)
2016/02/15 Javascript
BootStrap中按钮点击后被禁用按钮的最佳实现方法
2016/09/23 Javascript
关于javascript作用域的常见面试题分享
2017/06/18 Javascript
Angular4的输入属性与输出属性实例详解
2017/11/29 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
vue配置文件实现代理v2版本的方法
2019/06/21 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
express异步函数异常捕获示例详解
2020/11/30 Javascript
基于vuex实现购物车功能
2021/01/10 Vue.js
[58:37]Serenity vs Fnatic 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
[39:18]完美世界DOTA2联赛PWL S3 Forest vs LBZS 第二场 12.17
2020/12/19 DOTA
Python time模块详解(常用函数实例讲解,非常好)
2014/04/24 Python
利用Python脚本实现ping百度和google的方法
2017/01/24 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
浅谈Python中的生成器和迭代器
2020/06/19 Python
Pycharm在指定目录下生成文件和删除文件的实现
2020/12/28 Python
Kenneth Cole官网:纽约时尚优雅品牌
2016/11/14 全球购物
美体小铺瑞典官方网站:The Body Shop瑞典
2018/01/27 全球购物
Coggles美国/加拿大:高级国际时装零售商
2018/10/23 全球购物
英国Flybe航空官网:欧洲最大的独立支线廉价航空公司
2019/07/15 全球购物
中文系学生自荐信范文
2013/11/13 职场文书
十八大闭幕感言
2014/01/22 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
廉洁使者实施方案
2014/03/29 职场文书
三问三解心得体会
2014/09/05 职场文书
教师节横幅标语
2014/10/08 职场文书
mysql知识点整理
2021/04/05 MySQL
Django使用redis配置缓存的方法
2021/06/01 Redis