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多线程编程(四):使用Lock互斥锁
Apr 05 Python
浅谈Python中的闭包
Jul 08 Python
python xml.etree.ElementTree遍历xml所有节点实例详解
Dec 04 Python
利用Python实现Windows下的鼠标键盘模拟的实例代码
Jul 13 Python
用python统计代码行的示例(包括空行和注释)
Jul 24 Python
Python爬虫实现抓取京东店铺信息及下载图片功能示例
Aug 07 Python
手把手教你使用Python创建微信机器人
Apr 29 Python
sklearn-SVC实现与类参数详解
Dec 10 Python
Python中bisect的用法及示例详解
Jul 20 Python
详解python datetime模块
Aug 17 Python
Python os库常用操作代码汇总
Nov 03 Python
Python requests HTTP验证登录实现流程
Nov 05 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容易忘记的知识点分享
2013/04/30 PHP
typecho插件编写教程(一):Hello World
2015/05/28 PHP
php微信开发之自定义菜单完整流程
2016/10/08 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
php实现映射操作实例详解
2019/10/02 PHP
Jquery ajaxsubmit上传图片实现代码
2010/11/04 Javascript
jquery三个关闭弹出层的小示例
2013/11/05 Javascript
移动端 一个简单易懂的弹出框
2016/07/06 Javascript
Vuejs第九篇之组件作用域及props数据传递实例详解
2016/09/05 Javascript
AngularJS辅助库browserTrigger用法示例
2016/11/03 Javascript
TypeScript入门-基本数据类型
2017/03/28 Javascript
JSON对象转化为字符串详解
2017/08/11 Javascript
Electron-vue脚手架改造vue项目的方法
2018/10/22 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
vue的hash值原理也是table切换实例代码
2020/12/14 Vue.js
python列表的常用操作方法小结
2016/05/21 Python
转换科学计数法的数值字符串为decimal类型的方法
2018/07/16 Python
在Python中等距取出一个数组其中n个数的实现方式
2019/11/27 Python
python分布式计算dispy的使用详解
2019/12/22 Python
python实现大战外星人小游戏实例代码
2019/12/26 Python
什么是python的自省
2020/06/21 Python
python2和python3哪个使用率高
2020/06/23 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
解决CSS3 transition-delay 属性默认值0不带单位失效的问题
2020/10/29 HTML / CSS
CSS3实现的渐变幻灯片效果
2020/12/07 HTML / CSS
Rentalcars.com中国:世界上最大的在线汽车租赁服务
2019/08/22 全球购物
一年级班主任寄语
2014/01/19 职场文书
国贸专业毕业求职信
2014/06/11 职场文书
青年文明号口号
2014/06/17 职场文书
2014向国旗敬礼网上签名活动总结
2014/09/27 职场文书
中层干部考核评语
2015/01/04 职场文书
导游词之贵州织金洞
2019/10/12 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
vue如何实现关闭对话框后刷新列表
2022/04/08 Vue.js