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文件读取的3种方法及路径转义
Jun 21 Python
分享给Python新手们的几道简单练习题
Sep 21 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
May 10 Python
浅谈pycharm的xmx和xms设置方法
Dec 03 Python
pycharm 将python文件打包为exe格式的方法
Jan 16 Python
python调试神器PySnooper的使用
Jul 03 Python
python用线性回归预测股票价格的实现代码
Sep 04 Python
PyCharm无法识别PyQt5的2种解决方法,ModuleNotFoundError: No module named 'pyqt5'
Feb 17 Python
浅谈pytorch中的BN层的注意事项
Jun 23 Python
python集合能干吗
Jul 19 Python
Python多分支if语句的使用
Sep 03 Python
聊聊python中的循环遍历
Sep 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:风雨欲来 路在何方?
2006/10/09 PHP
用ODBC的分页显示
2006/10/09 PHP
php中使用临时表查询数据的一个例子
2013/02/03 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
WordPress中Gravatar头像缓存到本地及相关优化的技巧
2015/12/19 PHP
yii2中LinkPager增加总页数和总记录数的实例
2017/08/28 PHP
PHP递归的三种常用方式
2019/02/28 PHP
JQUERY设置IFRAME的SRC值的代码
2010/11/30 Javascript
异步动态加载JS并运行(示例代码)
2013/12/13 Javascript
JS判断客户端是手机还是PC的2个代码
2014/04/12 Javascript
js实现ifram取父窗口URL地址的方法
2015/02/09 Javascript
jquery+html5时钟特效代码分享(可设置闹钟并且语音提醒)
2020/03/30 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
js实现1,2,3,5数字按照概率生成
2017/09/12 Javascript
jQuery实现通过方向键控制div块上下左右移动的方法【测试可用】
2018/04/26 jQuery
如何获取TypeScript的声明文件.d.ts
2018/05/01 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
ES6 系列之 WeakMap的使用示例
2018/08/06 Javascript
vue-cli3+typescript初体验小结
2019/02/28 Javascript
vue中渲染对象中属性时显示未定义的解决
2020/07/31 Javascript
js实现菜单跳转效果
2020/12/11 Javascript
[01:03:41]完美世界DOTA2联赛PWL S3 DLG vs Phoenix 第一场 12.17
2020/12/19 DOTA
pydev使用wxpython找不到路径的解决方法
2013/02/10 Python
Python使用百度API上传文件到百度网盘代码分享
2014/11/08 Python
django 创建过滤器的实例详解
2017/08/14 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
Python2与Python3关于字符串编码处理的差别总结
2020/09/07 Python
python之语音识别speech模块
2020/09/09 Python
如何基于Python实现word文档重新排版
2020/09/29 Python
纯css3实现走马灯效果
2014/12/26 HTML / CSS
教师实习自我鉴定
2013/12/13 职场文书
网上开商店的创业计划书
2014/01/19 职场文书
手术室消毒隔离制度
2015/08/05 职场文书
Win11怎么进入安全模式?Windows 11进入安全模式的方法
2021/11/21 数码科技
Win11筛选键导致键盘失灵怎么解决? Win11关闭筛选键的技巧
2022/04/08 数码科技