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实现从脚本里运行scrapy的方法
Apr 07 Python
Python+django实现简单的文件上传
Aug 17 Python
详解tensorflow训练自己的数据集实现CNN图像分类
Feb 07 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
对dataframe进行列相加,行相加的实例
Jun 08 Python
python实现生成字符串大小写字母和数字的各种组合
Jan 01 Python
Python基础之循环语句用法示例【for、while循环】
Mar 23 Python
在python 中split()使用多符号分割的例子
Jul 15 Python
Windows下Pycharm远程连接虚拟机中Centos下的Python环境(图文教程详解)
Mar 19 Python
Keras在训练期间可视化训练误差和测试误差实例
Jun 16 Python
细说NumPy数组的四种乘法的使用
Dec 18 Python
python中Tkinter 窗口之输入框和文本框的实现
Apr 12 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体系结构的分析
2013/05/02 PHP
php二维数组排序详解
2013/11/06 PHP
php通过array_push()函数添加多个变量到数组末尾的方法
2015/03/18 PHP
php通过会话控制实现身份验证实例
2016/10/18 PHP
PHP 实现浏览记录并按日期分组
2017/05/11 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
php实现推荐功能的简单实例
2019/09/29 PHP
javascript 浏览器检测代码精简版
2010/03/04 Javascript
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
真正的JQuery.ajax传递中文参数的解决方法
2011/05/28 Javascript
Javascript学习笔记之相等符号与严格相等符号
2014/11/23 Javascript
JQuery中serialize() 序列化
2015/03/13 Javascript
jquery捕捉回车键及获取checkbox值与异步请求的方法
2015/12/24 Javascript
Immutable 在 JavaScript 中的应用
2016/05/02 Javascript
AngularJS 面试题集锦
2016/09/06 Javascript
Html5 js实现手风琴效果
2020/04/17 Javascript
JavaScript中数组Array.sort()排序方法详解
2017/03/01 Javascript
jQuery插件echarts去掉垂直网格线用法示例
2017/03/03 Javascript
vue.js中Vue-router 2.0基础实践教程
2017/05/08 Javascript
Node.js console控制台简单用法分析
2019/01/04 Javascript
微信小程序上传图片到php服务器的方法
2019/05/23 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
JS对日期操作封装代码实例
2019/11/08 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
2020/06/11 Javascript
Python实现的简单算术游戏实例
2015/05/26 Python
对tensorflow中cifar-10文档的Read操作详解
2020/02/10 Python
移动端HTML5 input常见问题(小结)
2020/09/28 HTML / CSS
个性大学生自我评价
2013/12/04 职场文书
计算机学生的自我评价分享
2014/02/18 职场文书
2014应届本科生自我评价
2014/09/13 职场文书
先进典型发言材料
2014/12/30 职场文书
银行先进个人总结
2015/02/15 职场文书
兼职安全员岗位职责
2015/02/15 职场文书
初中政治教学反思
2016/02/23 职场文书
导游词之天下银坑景区
2019/11/21 职场文书
分析mysql中一条SQL查询语句是如何执行的
2021/06/21 MySQL