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使用urllib2实现发送带cookie的请求
Apr 28 Python
python避免死锁方法实例分析
Jun 04 Python
python脚本设置超时机制系统时间的方法
Feb 21 Python
Python贪吃蛇游戏编写代码
Oct 26 Python
Python第三方库face_recognition在windows上的安装过程
May 03 Python
Python爬虫实现验证码登录代码实例
May 10 Python
python路径的写法及目录的获取方式
Dec 26 Python
浅谈tensorflow之内存暴涨问题
Feb 05 Python
python matplotlib实现将图例放在图外
Apr 17 Python
使用Python webdriver图书馆抢座自动预约的正确方法
Mar 04 Python
Python insert() / append() 用法 Leetcode实战演示
Mar 31 Python
Python可视化神器pyecharts绘制地理图表
Jul 07 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 和 XML: 使用expat函数(三)
2006/10/09 PHP
PHPExcel读取Excel文件的实现代码
2011/12/06 PHP
tp5(thinkPHP5)操作mongoDB数据库的方法
2018/01/20 PHP
php实现session共享的实例方法
2019/09/19 PHP
JavaScript 私有成员分析
2009/01/13 Javascript
JS实现关键字搜索时的相关下拉字段效果
2014/08/05 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
jquery easyui datagrid实现增加,修改,删除方法总结
2016/05/25 Javascript
jquery.form.js框架实现文件上传功能案例解析(springmvc)
2016/05/26 Javascript
JS中的hasOwnProperty()、propertyIsEnumerable()和isPrototypeOf()
2016/08/11 Javascript
javascript设计模式之module(模块)模式
2016/08/19 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
JavaScript实现打地鼠小游戏
2020/04/23 Javascript
详解react-router如何实现按需加载
2017/06/15 Javascript
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
使用Nodejs连接mongodb数据库的实现代码
2017/08/21 NodeJs
使用JS实现图片轮播的实例(前后首尾相接)
2017/09/21 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
JavaScript中的回调函数实例讲解
2019/01/27 Javascript
Vue  webpack 项目自动打包压缩成zip文件的方法
2019/07/24 Javascript
vue使用vue-quill-editor富文本编辑器且将图片上传到服务器的功能
2021/01/13 Vue.js
[37:23]DOTA2上海特级锦标赛主赛事日 - 3 胜者组第二轮#2Secret VS EG第二局
2016/03/04 DOTA
深入浅析ImageMagick命令执行漏洞
2016/10/11 Python
Python之Scrapy爬虫框架安装及使用详解
2017/11/16 Python
利用Python如何批量修改数据库执行Sql文件
2018/07/29 Python
Python判断对象是否为文件对象(file object)的三种方法示例
2019/04/26 Python
Python常见数据类型转换操作示例
2019/05/08 Python
Python实现栈和队列的简单操作方法示例
2019/11/29 Python
CSS3实现可关闭的下拉手风琴菜单效果
2015/08/31 HTML / CSS
店长岗位职责
2013/11/21 职场文书
热爱祖国的演讲稿
2014/05/04 职场文书
2015年教学管理工作总结
2015/05/20 职场文书
2016年校园植树节广播稿
2015/12/17 职场文书
如何在向量化NumPy数组上进行移动窗口
2021/05/18 Python
Python多个MP4合成视频的实现方法
2021/07/16 Python
Python可视化神器pyecharts绘制地理图表
2022/07/07 Python