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 相关文章推荐
Python 登录网站详解及实例
Apr 11 Python
Python3简单实例计算同花的概率代码
Dec 06 Python
Python常见排序操作示例【字典、列表、指定元素等】
Aug 15 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
详解从Django Allauth中进行登录改造小结
Dec 18 Python
pycharm不能运行.py文件的解决方法
Feb 12 Python
Python configparser模块配置文件过程解析
Mar 03 Python
python实现FTP循环上传文件
Mar 20 Python
python中如何设置代码自动提示
Jul 15 Python
Python爬虫进阶之爬取某视频并下载的实现
Dec 08 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
python第三方网页解析器 lxml 扩展库与 xpath 的使用方法
Apr 06 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
Thinkphp使用mongodb数据库实现多条件查询方法
2014/06/26 PHP
用javascript实现给出的盒子的序列是否可连为一矩型
2007/08/30 Javascript
解决jquery的.animate()函数在IE6下的问题
2010/12/03 Javascript
面向对象继承实例(a如何继承b问题)(自写)
2013/07/01 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
javascript学习笔记之10个原生技巧
2014/05/21 Javascript
JavaScript判断FileUpload控件上传文件类型
2015/09/28 Javascript
编写高性能Javascript代码的N条建议
2015/10/12 Javascript
jQuery实现ToolTip元素定位显示功能示例
2016/11/23 Javascript
js实现简易垂直滚动条
2017/02/22 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
javascript异步编程的六种方式总结
2019/05/17 Javascript
JavaScript实现拖拽效果
2020/03/16 Javascript
[03:02]2020完美世界城市挑战赛(秋季赛)总决赛回顾
2021/03/11 DOTA
Python中使用dom模块生成XML文件示例
2015/04/05 Python
Python做文本按行去重的实现方法
2016/10/19 Python
浅谈Python基础之I/O模型
2017/05/11 Python
Ubuntu16.04/树莓派Python3+opencv配置教程(分享)
2018/04/02 Python
Numpy之文件存取的示例代码
2018/08/03 Python
简单分析python的类变量、实例变量
2019/08/23 Python
解决python彩色螺旋线绘制引发的问题
2019/11/23 Python
python plt可视化——打印特殊符号和制作图例代码
2020/04/17 Python
查看keras各种网络结构各层的名字方式
2020/06/11 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
利用Python函数实现一个万历表完整示例
2021/01/23 Python
用CSS3实现Win8风格的方格导航菜单效果
2013/04/10 HTML / CSS
毕业生的自我鉴定
2013/10/29 职场文书
教师自我评价范文
2013/12/16 职场文书
出国留学担保书
2014/05/20 职场文书
关于护士节的演讲稿
2014/05/26 职场文书
公安学专业求职信
2014/07/27 职场文书
建筑管理专业求职信
2014/07/28 职场文书
村道德模范事迹材料
2014/08/28 职场文书
教师节倡议书
2014/08/30 职场文书
公司文体活动总结
2015/05/07 职场文书
原型和原型链 prototype和proto的区别详情
2021/11/02 Javascript