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 相关文章推荐
github配置使用指南
Nov 18 Python
Python访问纯真IP数据库脚本分享
Jun 29 Python
python文件的md5加密方法
Apr 06 Python
Python生成指定数量的优惠码实操内容
Jun 18 Python
关于Python 的简单栅格图像边界提取方法
Jul 05 Python
python 读取修改pcap包的例子
Jul 23 Python
Python+AutoIt实现界面工具开发过程详解
Aug 07 Python
django-filter和普通查询的例子
Aug 12 Python
带你彻底搞懂python操作mysql数据库(cursor游标讲解)
Jan 06 Python
Python基于QQ邮箱实现SSL发送
Apr 26 Python
关于PyCharm安装后修改路径名称使其可重新打开的问题
Oct 20 Python
python 模块重载的五种方法
Apr 24 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中串行化用法示例
2016/11/16 PHP
在IIS下安装PHP扩展的方法(超简单)
2017/04/10 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
获取表单控件原始(初始)值的方法
2013/08/21 Javascript
如何在JavaScript中实现私有属性的写类方式(二)
2013/12/04 Javascript
js利用prototype调用Array的slice方法示例
2014/06/09 Javascript
多个$(document).ready()的执行顺序实例分析
2014/07/26 Javascript
轻松创建nodejs服务器(9):实现非阻塞操作
2014/12/18 NodeJs
JSON取值前判断
2014/12/23 Javascript
js动态切换图片的方法
2015/01/20 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
javascript显示中文日期的方法
2015/06/18 Javascript
JS限定手机版中图片大小随分辨率自动调整的方法
2016/12/05 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
angularJs使用$watch和$filter过滤器制作搜索筛选实例
2017/06/01 Javascript
详解JSON Web Token 入门教程
2018/07/30 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
2018/11/02 Javascript
JavaScript实现动态添加、移除元素或属性的方法分析
2019/01/03 Javascript
原来JS还可以这样拆箱转换详解
2019/02/01 Javascript
Webpack4+Babel7+ES6兼容IE8的实现
2019/04/10 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
2020/01/26 Javascript
云服务器部署Node.js项目的方法步骤(小白系列)
2020/03/23 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
Python编程实现从字典中提取子集的方法分析
2018/02/09 Python
Tensorflow 自带可视化Tensorboard使用方法(附项目代码)
2018/02/10 Python
Python抽象和自定义类定义与用法示例
2018/08/23 Python
python3+requests接口自动化session操作方法
2018/10/13 Python
网吧最新创业计划书范文
2014/03/27 职场文书
赡养老人协议书
2014/04/21 职场文书
大学生感恩父母演讲稿
2014/08/28 职场文书
学校党委副书记个人对照检查材料思想汇报
2014/09/28 职场文书
单位法人授权委托书范本
2014/10/09 职场文书
学生检讨书怎么写
2014/10/09 职场文书
《迟到》教学反思
2016/02/24 职场文书
2019毕业典礼主持词!
2019/07/05 职场文书