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基于Tkinter实现的记事本实例
Jun 17 Python
深入了解Python数据类型之列表
Jun 24 Python
apache部署python程序出现503错误的解决方法
Jul 24 Python
python实现简单登陆流程的方法
Apr 22 Python
解决Python 爬虫URL中存在中文或特殊符号无法请求的问题
May 11 Python
matplotlib subplots 调整子图间矩的实例
May 25 Python
python 中字典嵌套列表的方法
Jul 03 Python
基于python3实现socket文件传输和校验
Jul 28 Python
tensorflow 自定义损失函数示例代码
Feb 05 Python
python实现ssh及sftp功能(实例代码)
Mar 16 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
python爬虫多次请求超时的几种重试方法(6种)
Dec 01 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
MySQL修改密码方法总结
2008/03/25 PHP
基于PHP的登录和注册的功能的实现
2020/08/06 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
javascript编程起步(第七课)
2007/01/10 Javascript
一个JavaScript用逗号分割字符串实例
2014/09/22 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
js计算文本框输入的字符数
2015/10/23 Javascript
纯js和css完成贪吃蛇小游戏demo
2016/09/01 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
关于Vue实现组件信息的缓存问题
2017/08/23 Javascript
JavaScript面试出现频繁的一些易错点整理
2018/03/29 Javascript
新手简单了解vue
2019/05/29 Javascript
vue缓存之keep-alive的理解和应用详解
2020/11/02 Javascript
详解ES6实现类的私有变量的几种写法
2021/02/10 Javascript
详解Python读取配置文件模块ConfigParser
2017/05/11 Python
Python实现Smtplib发送带有各种附件的邮件实例
2017/06/05 Python
详解Django解决ajax跨域访问问题
2018/08/24 Python
Python3 实现文件批量重命名示例代码
2019/06/03 Python
python pandas生成时间列表
2019/06/29 Python
django表单的Widgets使用详解
2019/07/22 Python
使用keras实现BiLSTM+CNN+CRF文字标记NER
2020/06/29 Python
Pycharm打开已有项目配置python环境的方法
2020/07/03 Python
Python脚本调试工具安装过程
2021/01/11 Python
春秋航空官方网站:Spring Airlines
2017/09/27 全球购物
nohup的用法
2014/08/10 面试题
亲子拓展活动方案
2014/02/20 职场文书
高中生评语大全
2014/04/25 职场文书
2014年设备管理工作总结
2014/11/26 职场文书
预备党员个人总结
2015/02/14 职场文书
军事博物馆观后感
2015/06/05 职场文书
同意报考证明
2015/06/17 职场文书
请学会珍惜眼前,因为人生没有下辈子!
2019/11/12 职场文书
MySQL 常见的数据表设计误区汇总
2021/06/07 MySQL
SpringCloud Alibaba 基本开发框架搭建过程
2021/06/13 Java/Android
CSS Transition通过改变Height实现展开收起元素
2021/08/07 HTML / CSS
win10频率超出范围怎么办?win10老显示超出工作频率范围的解决方法
2022/07/07 数码科技