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网页请求urllib2模块简单封装代码
Feb 07 Python
Python中unittest用法实例
Sep 25 Python
Python中利用sorted()函数排序的简单教程
Apr 27 Python
Python 3.x读写csv文件中数字的方法示例
Aug 29 Python
Python自动化运维_文件内容差异对比分析
Dec 13 Python
pycharm+PyQt5+python最新开发环境配置(踩坑)
Feb 11 Python
Python3.6实现带有简单界面的有道翻译小程序
Apr 16 Python
Python 爬虫实现增加播客访问量的方法实现
Oct 31 Python
python实现输入的数据在地图上生成热力图效果
Dec 06 Python
基于python检查矩阵计算结果
May 21 Python
Python 使用xlwt模块将多行多列数据循环写入excel文档的操作
Nov 10 Python
Pandas中两个dataframe的交集和差集的示例代码
Dec 13 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中magic_quotes_gpc对unserialize的影响分析
2014/12/16 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
提交表单后 PHP获取提交内容的实现方法
2016/05/25 PHP
Laravel最佳分割路由文件(routes.php)的方式
2016/08/04 PHP
javascript中的注释使用与注意事项小结
2011/09/20 Javascript
Javscript删除数组中指定元素并返回新数组
2014/03/06 Javascript
Extjs的FileUploadField文件上传出现了两个上传按钮
2014/04/29 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
浅谈 jQuery 事件源码定位问题
2014/06/18 Javascript
JavaScript中eval()函数用法详解
2015/12/14 Javascript
jQuery插件ImageDrawer.js实现动态绘制图片动画(附源码下载)
2016/02/25 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
jQuery与JS加载事件用法分析
2016/09/04 Javascript
JS回调函数基本定义与用法实例分析
2017/05/24 Javascript
ubuntu编译nodejs所需的软件并安装
2017/09/12 NodeJs
web前端开发中常见的多列布局解决方案整理(一定要看)
2017/10/15 Javascript
JavaScript图片处理与合成总结
2018/03/04 Javascript
JavaScript 下载svg图片为png格式
2018/06/21 Javascript
微信小程序仿微信运动步数排行(交互)
2018/07/13 Javascript
angularjs性能优化的方法
2018/09/05 Javascript
vue项目创建并引入饿了么elementUI组件的步骤
2019/04/11 Javascript
node.js基于socket.io快速实现一个实时通讯应用
2019/04/23 Javascript
node静态服务器实现静态读取文件或文件夹
2019/12/03 Javascript
解决Ant Design Modal内嵌Form表单initialValue值不动态更新问题
2020/10/29 Javascript
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
简单介绍Python中的几种数据类型
2016/01/02 Python
Python实现打印螺旋矩阵功能的方法
2017/11/21 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
什么是封装
2013/03/26 面试题
党员对照检查材料整改措施思想汇报
2014/09/26 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
会计电算化实训报告
2014/11/04 职场文书
2015年财务试用期工作总结
2014/12/24 职场文书
琅琊山导游词
2015/02/05 职场文书
golang三种设计模式之简单工厂、方法工厂和抽象工厂
2022/04/10 Golang
MySQL主从切换的超详细步骤
2022/06/28 MySQL