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中for循环详解
Jan 17 Python
一个小示例告诉你Python语言的优雅之处
Jul 04 Python
Python安装Imaging报错:The _imaging C module is not installed问题解决方法
Aug 22 Python
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
Mar 06 Python
仅用500行Python代码实现一个英文解析器的教程
Apr 02 Python
Python制作爬虫采集小说
Oct 25 Python
Python 如何访问外围作用域中的变量
Sep 11 Python
pip安装Python库时遇到的问题及解决方法
Nov 23 Python
python 将对象设置为可迭代的两种实现方法
Jan 21 Python
Python中list循环遍历删除数据的正确方法
Sep 02 Python
单身狗福利?Python爬取某婚恋网征婚数据
Jun 03 Python
基于Python编写简易版的天天跑酷游戏的示例代码
Mar 23 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
PHP Yaf框架的简单安装使用教程(推荐)
2016/06/08 PHP
PHP命令空间namespace及use的用法小结
2017/11/27 PHP
js中top、clientTop、scrollTop、offsetTop的区别 文字详细说明版
2011/01/08 Javascript
5个可以帮你理解JavaScript核心闭包和作用域的小例子
2014/10/08 Javascript
js中split和replace的用法实例
2015/02/28 Javascript
js中的内部属性与delete操作符介绍
2015/08/10 Javascript
Js制作点击输入框时默认文字消失的效果
2015/09/05 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
node.js-v6新版安装具体步骤(分享)
2017/09/06 Javascript
JavaScript正则表达式和级联效果
2017/09/14 Javascript
angular6.0开发教程之如何安装angular6.0框架
2018/06/29 Javascript
JS实现用特殊符号替换字符串的中间部分区域的实例代码
2018/07/24 Javascript
使用Javascript简单计算器
2018/11/17 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
vue组件定义,全局、局部组件,配合模板及动态组件功能示例
2019/03/19 Javascript
vue中filters 传入两个参数 / 使用两个filters的实现方法
2019/07/15 Javascript
vue中 数字相加为字串转化为数值的例子
2019/11/07 Javascript
vue 虚拟DOM的原理
2020/10/03 Javascript
Vue项目打包部署到apache服务器的方法步骤
2021/02/01 Vue.js
[36:33]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.29
2020/12/02 DOTA
跟老齐学Python之让人欢喜让人忧的迭代
2014/10/02 Python
仅用500行Python代码实现一个英文解析器的教程
2015/04/02 Python
在Python中用has_key()方法查找键是否存在的教程
2015/05/21 Python
Python下调用Linux的Shell命令的方法
2018/06/12 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
2018/09/17 Python
win10系统下Anaconda3安装配置方法图文教程
2018/09/19 Python
PyTorch: 梯度下降及反向传播的实例详解
2019/08/20 Python
tensorflow 实现数据类型转换
2020/02/17 Python
python如何进行矩阵运算
2020/06/05 Python
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
《最大的麦穗》教学反思
2014/04/17 职场文书
党建工作经验交流材料
2014/05/25 职场文书
五四青年节优秀演讲稿范文
2014/05/28 职场文书
铣工实训报告
2014/11/05 职场文书
2015年教师节贺卡寄语
2015/03/24 职场文书