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中针对函数处理的特殊方法
Mar 06 Python
浅谈python抛出异常、自定义异常, 传递异常
Jun 20 Python
利用Python批量生成任意尺寸的图片
Aug 29 Python
轻松掌握python设计模式之策略模式
Nov 18 Python
python编写朴素贝叶斯用于文本分类
Dec 21 Python
漂亮的Django Markdown富文本app插件的实现
Jan 02 Python
python实现H2O中的随机森林算法介绍及其项目实战
Aug 29 Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 Python
Python 脚本拉取 Docker 镜像问题
Nov 10 Python
python循环输出三角形图案的例子
Nov 22 Python
Python常用base64 md5 aes des crc32加密解密方法汇总
Nov 06 Python
使用numpy实现矩阵的翻转(flip)与旋转
Jun 03 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
一个好用的分页函数
2006/11/16 PHP
简单介绍win7下搭建apache+php+mysql开发环境
2015/08/06 PHP
PHP连接MySQL数据库并以json格式输出
2018/05/21 PHP
laravel5.5安装jwt-auth 生成token令牌的示例
2019/10/24 PHP
JS创建类和对象的两种不同方式
2014/08/08 Javascript
Javascript基础知识(一)核心基础语法与事件模型
2014/09/29 Javascript
JavaScript模拟数组合并concat
2016/03/06 Javascript
漂亮实用的页面loading(加载)封装代码
2017/02/03 Javascript
Javascript别踩白块儿(钢琴块儿)小游戏实现代码
2017/07/20 Javascript
使用 vue.js 构建大型单页应用
2018/02/10 Javascript
微信小程序中使用ECharts 异步加载数据实现图表功能
2018/07/13 Javascript
Node.js在图片模板上生成二维码图片并附带底部文字说明实现详解
2019/08/07 Javascript
JavaScript实现简单计算器功能
2019/12/19 Javascript
jQuery实现轮播图效果demo
2020/01/11 jQuery
基于vue-cli3+typescript的tsx开发模板搭建过程分享
2020/02/28 Javascript
[02:01]BBC DOTA2国际邀请赛每日综述:八强胜者组鏖战,中国队喜忧参半
2014/07/19 DOTA
pyqt4教程之实现半透明的天气预报界面示例
2014/03/02 Python
python检测远程端口是否打开的方法
2015/03/14 Python
Python argv用法详解
2016/01/08 Python
python中的文件打开与关闭操作命令介绍
2018/04/26 Python
Python实现抓取HTML网页并以PDF文件形式保存的方法
2018/05/08 Python
Jupyter notebook在mac:linux上的配置和远程访问的方法
2019/01/14 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
python版DDOS攻击脚本
2019/06/12 Python
python GUI库图形界面开发之PyQt5信号与槽多窗口数据传递详细使用方法与实例
2020/03/08 Python
python 代码实现k-means聚类分析的思路(不使用现成聚类库)
2020/06/01 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
加拿大消费电子和手机购物网站:The Source
2017/01/28 全球购物
德国香水、化妆品和护理产品网上商店:Parfumdreams
2018/09/26 全球购物
某同学的自我鉴定范文
2013/12/26 职场文书
迟到检讨书900字
2014/01/14 职场文书
首次购房证明
2015/06/19 职场文书
tensorflow学习笔记之tfrecord文件的生成与读取
2021/03/31 Python
html网页引入svg图片的4种方式
2022/08/05 HTML / CSS