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写入CSV文件的方法
Jul 08 Python
尝试用最短的Python代码来实现服务器和代理服务器
Jun 23 Python
Python 元类实例解析
Apr 04 Python
PyQt5每天必学之布局管理
Apr 19 Python
查看django执行的sql语句及消耗时间的两种方法
May 29 Python
详解用Python实现自动化监控远程服务器
May 18 Python
python 实现目录复制的三种小结
Dec 04 Python
解析PyCharm Python运行权限问题
Jan 08 Python
python2 对excel表格操作完整示例
Feb 23 Python
利用python实现逐步回归
Feb 24 Python
python实现每天自动签到领积分的示例代码
Aug 18 Python
浅谈盘点5种基于Python生成的个性化语音方法
Feb 05 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
检查url链接是否已经有参数的php代码 添加 ? 或 &
2010/02/09 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
2017/10/25 PHP
ExtJS下grid的一些属性说明
2009/12/13 Javascript
客户端限制只能上传jpg格式图片的js代码
2010/12/09 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
基于jquery和svg实现超炫酷的动画特效
2014/12/09 Javascript
轻松创建nodejs服务器(10):处理上传图片
2014/12/18 NodeJs
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
基于vue实现swipe轮播组件实例代码
2017/05/24 Javascript
VueJs 搭建Axios接口请求工具
2017/11/20 Javascript
解决低版本的浏览器不支持es6的import问题
2018/03/09 Javascript
微信小程序授权登录及解密unionId出错的方法
2018/09/26 Javascript
Vue props 单向数据流的实现
2018/11/06 Javascript
Javascript实现动态时钟效果
2018/11/17 Javascript
Vue.js 图标选择组件实践详解
2018/12/03 Javascript
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
服务端预渲染之Nuxt(使用篇)
2019/04/08 Javascript
[55:23]VGJ.T vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/20 DOTA
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Python进阶之尾递归的用法实例
2018/01/31 Python
python实现自动发送报警监控邮件
2018/06/21 Python
python2.7和NLTK安装详细教程
2018/09/19 Python
python读取xlsx的方法
2018/12/25 Python
如何使用Python实现斐波那契数列
2019/07/02 Python
python实现比对美团接口返回数据和本地mongo数据是否一致示例
2019/08/09 Python
docker django无法访问redis容器的解决方法
2019/08/21 Python
最新Python idle下载、安装与使用教程图文详解
2020/11/28 Python
学校安全工作制度
2014/01/19 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
学生个人评语大全
2015/01/04 职场文书
幼儿教师个人总结
2015/02/05 职场文书
通知的写法
2015/04/23 职场文书
2015年乡镇党务公开工作总结
2015/05/19 职场文书
学校安全管理制度
2015/08/06 职场文书
教师远程研修感悟
2015/11/18 职场文书
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js