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图片验证码生成代码
Jul 02 Python
Python实现的读取电脑硬件信息功能示例
May 30 Python
详解Python下Flask-ApScheduler快速指南
Nov 04 Python
Python函数返回不定数量的值方法
Jan 22 Python
简单了解python的一些位运算技巧
Jul 13 Python
对YOLOv3模型调用时候的python接口详解
Aug 26 Python
python程序 创建多线程过程详解
Sep 23 Python
python实现名片管理器的示例代码
Dec 17 Python
基于梯度爆炸的解决方法:clip gradient
Feb 04 Python
基于Python pyecharts实现多种图例代码解析
Aug 10 Python
python 实现一个简单的线性回归案例
Dec 17 Python
Python matplotlib多个子图绘制整合
Apr 13 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 foreach、while性能比较
2009/10/15 PHP
php设计模式 Facade(外观模式)
2011/06/26 PHP
PHP基于phpqrcode生成带LOGO图像的二维码实例
2015/07/10 PHP
laravel与thinkphp之间的区别与优缺点
2021/03/02 PHP
电子商务网站上的常用的js放大镜效果
2011/12/08 Javascript
让新消息在网页标题闪烁提示的jQuery代码
2013/11/04 Javascript
纯javascript实现自动发送邮件
2015/10/21 Javascript
如何根据百度地图计算出两地之间的驾驶距离(两种语言js和C#)
2015/10/29 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
原生JS取代一些JQuery方法的简单实现
2016/09/20 Javascript
ES6实现的遍历目录函数示例
2017/04/07 Javascript
Javascript es7中比较实用的两个方法示例
2017/07/21 Javascript
浅谈Angular4中常用管道
2017/09/27 Javascript
Vue 兄弟组件通信的方法(不使用Vuex)
2017/10/26 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
vue 项目build错误异常的解决方法
2019/04/22 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
python获取糗百图片代码实例
2013/12/18 Python
一个检测OpenSSL心脏出血漏洞的Python脚本分享
2014/04/10 Python
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
Python正则表达式经典入门教程
2017/05/22 Python
Python判断一个list中是否包含另一个list全部元素的方法分析
2018/12/24 Python
python:目标检测模型预测准确度计算方式(基于IoU)
2020/01/18 Python
在终端启动Python时报错的解决方案
2020/11/20 Python
详解matplotlib中pyplot和面向对象两种绘图模式之间的关系
2021/01/22 Python
Python 的 f-string 可以连接字符串与数字的原因解析
2021/02/20 Python
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
美国葡萄酒网上商店:Martha Stewart Wine Co.
2019/03/17 全球购物
湖南卫视在线视频媒体平台:芒果TV
2019/10/30 全球购物
英国领先的在线高尔夫商店:Gamola Golf
2019/11/16 全球购物
Douglas意大利官网:购买香水和化妆品
2020/05/27 全球购物
如何整合JQuery和Prototype
2014/01/31 面试题
捐款活动总结
2014/08/27 职场文书
2015元旦感言
2015/12/09 职场文书
Echarts如何重新渲染实例详解
2022/05/30 Javascript