python使用PIL给图片添加文字生成海报示例


Posted in Python onAugust 17, 2018

前言

曾经,我也算半个所谓的文学青年。大学前两年大部分时间泡在图书馆看各种文学类的书。

那时的我,对于未来有很多遐想:写小说、写时评、写诗歌... 总而言之,就是成为一个文字工作者

现在我确实成为了一个文字工作者,只不过写的是代码...

在某个月黑风高的晚上,看着满屏花花绿绿的代码,揉着酸涩的眼睛,打了一个长长的哈欠。突然进入了禅定时刻:

"还记得年少时的梦吗?“

我又开始想写作了,一个写了几年代码的老男人,在被生活粗暴地摁在地上摩擦几回后,突然触发了内心的柔软,想写些东西。

要写些什么?如何写?在我看来,写作比写代码更难,详见 编程与写作

那就先从最简单的每天更新一篇随笔开始吧,内容包括当天的阅读与思考。这种文章主要是让自己练习写作,类似于编程的刷题。

干巴巴的随笔看起来没什么意思,需要有一张配图,对当天的阅读、写作进行概括性总结。这张图是统一的模板,只是内容不同,如果每张图都要用ps来处理,太繁琐了。作为一个以懒惰为美德的程序员,肯定是想着用程序自动生成图片。

python生成图片海报

1、设计图片模板

python使用PIL给图片添加文字生成海报示例

模板

2、安装python库

环境:python3

安装Pillow库

pip install Pillow

具体代码实现

新建 index.py

# -*- coding:utf-8 -*-

from PIL import Image, ImageDraw, ImageFont
import time

# 安装库:pip install Pillow

header = '001'
title = '日思录第001篇'
books = ['中国史纲五十讲', '再见拖延症', '心流']
writes = ['日思录第001篇', 'python给图片加文字']
summary = '习惯在一个任务开始之前,先给自己设立一个看起来不太可能达到的完美标准,并因为这个标准而迟迟无法动手,那你可能也是一个完美主义者'
n = 18
summary_list = [summary[i:i + n] for i in range(0, len(summary), n)]

# 图片名称
img = './test.png' # 图片模板
new_img = 'text.png' # 生成的图片
compress_img = 'compress.png' # 压缩后的图片

# 设置字体样式
font_type = '/System/Library/Fonts/STHeiti Light.ttc'
font_medium_type = '/System/Library/Fonts/STHeiti Medium.ttc'
header_font = ImageFont.truetype(font_medium_type, 55)
title_font = ImageFont.truetype(font_medium_type, 45)
font = ImageFont.truetype(font_type, 24)
color = "#000000"

# 打开图片
image = Image.open(img)
draw = ImageDraw.Draw(image)
width, height = image.size

# header头
header_x = 130
header_y = 690
draw.text((header_x, height - header_y), u'%s' % header, color, header_font)

# 标题
title_x = header_x
title_y = header_y - 80
draw.text((title_x, height - title_y), u'%s' % title, color, title_font)

# 当前时间
cur_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
cur_time_x = 590
cur_time_y = title_y - 25
cur_time_font = ImageFont.truetype(font_type, 25)
draw.text((cur_time_x, height - cur_time_y), u'%s' % cur_time, color, cur_time_font)

# 阅读
book_x = title_x + 5
book_start_y = title_y - 190
book_y = 0
book_line = 50
for num, book in enumerate(books):
  y = book_start_y - num * book_line
  book_num = num + 1
  draw.text((book_x, height - y), u'%s. %s' % (book_num, book), color, font)

# 写作
write_x = book_x
write_y = title_y - 450
write_line = 40

for num, write in enumerate(writes):
  write_num = num + 1
  y = write_y - num * write_line
  draw.text((write_x, height - y), u'%s. %s' % (write_num, write), color, font)

# 哲思
summary_x = book_x + 460
summary_y = book_start_y
summary_line = 35
for num, summary in enumerate(summary_list):
  y = summary_y - num * summary_line
  draw.text((summary_x, height - y), u'%s' % summary, color, font)

# 生成图片
image.save(new_img, 'png')

# 压缩图片
sImg = Image.open(new_img)
w, h = sImg.size
width = int(w / 2)
height = int(h / 2)
dImg = sImg.resize((width, height), Image.ANTIALIAS)
dImg.save(compress_img)

执行结果

python python index.py

结果

python使用PIL给图片添加文字生成海报示例

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
web.py在模板中输出美元符号的方法
Aug 26 Python
Python版微信红包分配算法
May 04 Python
Python中返回字典键的值的values()方法使用
May 22 Python
Python简单格式化时间的方法【strftime函数】
Sep 18 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
Jan 09 Python
Python根据文件名批量转移图片的方法
Oct 21 Python
Python实现去除图片中指定颜色的像素功能示例
Apr 13 Python
python三大神器之fabric使用教程
Jun 10 Python
解决Atom安装Hydrogen无法运行python3的问题
Aug 28 Python
python判断字符串以什么结尾的实例方法
Sep 18 Python
Pandas直接读取sql脚本的方法
Jan 21 Python
浅谈Python中的函数(def)及参数传递操作
May 25 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 #Python
Python简单读写Xls格式文档的方法示例
Aug 17 #Python
Python实现的连接mssql数据库操作示例
Aug 17 #Python
Python SQL查询并生成json文件操作示例
Aug 17 #Python
python3 flask实现文件上传功能
Mar 20 #Python
Python爬取qq空间说说的实例代码
Aug 17 #Python
django进阶之cookie和session的使用示例
Aug 17 #Python
You might like
8个出色的WordPress SEO插件收集
2011/02/26 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
浅谈PHP eval()函数定义和用法
2016/06/21 PHP
Laravel手动返回错误码示例
2019/10/22 PHP
判断是否输入完毕再激活提交按钮
2006/06/26 Javascript
JavaScript中将一个值转换为字符串的方法分析[译]
2012/09/21 Javascript
php与js的区别是什么
2013/08/05 Javascript
javascript关于继承的用法汇总
2014/12/20 Javascript
js脚本分页代码分享(7种样式)
2015/08/19 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
2015/10/28 Javascript
JS设置下拉列表框当前所选值的方法
2015/12/22 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
利用AJAX实现WordPress中的文章列表及评论的分页功能
2016/05/17 Javascript
AngularJS 路由和模板实例及路由地址简化方法(必看)
2016/06/24 Javascript
JS从数组中随机取出几个数组元素的方法
2016/08/02 Javascript
js实现带缓动动画的导航栏效果
2017/01/16 Javascript
微信小程序项目实践之九宫格实现及item跳转功能
2018/07/19 Javascript
微信小程序当前时间时段选择器插件使用方法详解
2018/12/28 Javascript
在vue项目中使用codemirror插件实现代码编辑器功能
2019/08/27 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
Android应用开发中Action bar编写的入门教程
2016/02/26 Python
Python学习小技巧之列表项的拼接
2017/05/20 Python
python实现给微信公众号发送消息的方法
2017/06/30 Python
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
PyCharm的设置方法和第一个Python程序的建立
2019/01/16 Python
使用Python脚本从文件读取数据代码实例
2020/01/19 Python
西班牙国家航空官方网站:Iberia
2017/11/16 全球购物
菲律宾最大的网上花店和礼品店:PhilFlower.com
2018/02/09 全球购物
80年代复古T恤:TruffleShuffle
2018/07/02 全球购物
SportsDirect.com马来西亚:英国第一体育零售商
2018/11/21 全球购物
4s客服专员岗位职责
2013/12/01 职场文书
2016年10月份红领巾广播稿
2015/12/21 职场文书
关于springboot 配置date字段返回时间戳的问题
2021/07/25 Java/Android
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android
mysql中如何用命令创建联合唯一索引
2022/04/20 MySQL
Go 内联优化让程序员爱不释手
2022/06/21 Golang