网络编程
位置:首页>> 网络编程>> Python编程>> Python基于pillow库实现生成图片水印

Python基于pillow库实现生成图片水印

作者:冷冰若水  发布时间:2021-08-01 10:45:38 

标签:Python,pillow,图片,水印

一、背景

平时工作中经常需要使用各种尺寸、格式的图片来做测试,每次从百度或者谷歌找图都非常麻烦,于是就想作为一个程序员怎么能被这个问题影响效率呢,一切程序可以做的事情都应该用程勋来做并提升效率,这才是我们编程的意义所在。

二、实现

于是就想实现一个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

来源:https://www.cnblogs.com/lit10050528/p/12381188.html

0
投稿

猜你喜欢

  • 为什么使用Python    假设我们有这么一项任务:简单测试局域网中的电脑是否连通.这些电脑的ip范围从19
  •  在添加新记录时,有时候我们需要将部分动态内容自动添加到指定的文本域,例如上传一个文件后,将文件名自动添加到一个独立的记录框内,以
  • 对象:是抽象的概念 如列表 元组 字典 集合 皆为对象序列化:一种方法。目的:把对象存储在磁盘上(即,将对象转换为字节数据/字符数据)。这一
  • CSS Hack是在标准CSS没办法兼容各浏览器显示效果时才会用上的补救方法,在各浏览器厂商解析CSS没有达成一致前,我们只能用这样的方法来
  • 本文实例为大家分享了js实现放大镜效果的具体代码,供大家参考,具体内容如下该放大区域用背景图片放大<!DOCTYPE html>
  • 如何用JMail同时给多人发信?在ASP中,为什么我在Jmail收件人处指定多个收件人时,像这样:JMail.AddRecipient&nb
  • 如今WEB的安全问题影响着整个安全界,SQL注入,跨站脚本攻击等攻击受到了关注。 网络安全问题日益变的更加重要,国内依然有很多主机受到此类安
  • 下面列出了asp远程网页数据采集程序中经常用到的函数,很实用,特别是正则表达式过滤函数。包括了使用xmlhttp采集远程网页内容,使用ado
  • 批处理可以很方便地和其它各种语言混合编程,除了好玩,还有相当的实用价值,比如windows版的ruby gem包管理器就是运用了批处理和ru
  • 对于大多数数据科学家而言,线性回归方法是他们进行统计学建模和预测分析任务的起点。这种方法已经存在了 200 多年,并得到了广泛研究,但仍然是
  • SQLserver 2000中出现“指定的服务并未以已安装的服务存在" 解决方案一、将计算机名改成大写。二、将sql server
  • 本文的文字及图片来源于网络,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。以下文章来源于Pyth
  • 建立一个数据库表维护规范在一个定期基础而非等到问题出现才实施数据库表的检查是一个好主意。应该考虑到建立一个预防性维护的时间表,以协助自动问题
  • python 线程池的四种实现方式线程简述 一个程序运行起来后,一定有一个执行代码的东西,这个东西就是线程; 一般计算(
  • 一、conn.asp<%  '@Language="VBSCRIPT" CO
  • 过去一段时间人们似乎又非常热衷于探讨网络文档的印刷格式,涌现了很多与之相关的技术与理论资料,其中相当重要的一个领域就是关于印刷中字号和行高的
  • SQL Server 2008已经发布,我们可以看到它在各方面都有了显著的进步,这些让人侧目之处和失望之处都有可能极大地影响大型企业的采购意
  • PayPal支付功能其实一直在更新文档和接口,这里说的是一个简单的支付功能大概流程如下1,在网站的结账页面,设置一个提交到PayPal网站的
  • 以发布目录为例:<OBJECT ID="agobjOraSession" RUNAT=&quo
  • 本教程中将详细阐述传统的图形设计元素是如何应用在现代(2.0时代)的页面设计中的,然后我将解释为什么它们能流行开来,以及如何、何时、在哪里使
手机版 网络编程 asp之家 www.aspxhome.com