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中lambda函数 list comprehension 和 zip函数使用指南
Sep 28 Python
Python编程中的for循环语句学习教程
Oct 14 Python
Django中login_required装饰器的深入介绍
Nov 24 Python
Python闭包函数定义与用法分析
Jul 20 Python
Python爬虫常用库的安装及其环境配置
Sep 19 Python
python实现五子棋游戏
Jun 18 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
Python库skimage绘制二值图像代码实例
Apr 10 Python
Python timeit模块原理及使用方法
Oct 10 Python
基于 Python 实践感知器分类算法
Jan 07 Python
Python爬虫之爬取某文库文档数据
Apr 21 Python
Python中X[:,0]和X[:,1]的用法
May 10 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制作静态网站的模板框架(三)
2006/10/09 PHP
php的大小写敏感问题整理
2011/12/29 PHP
php中simplexml_load_string使用实例分享
2014/02/13 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
jQuery 表单验证扩展(三)
2010/10/20 Javascript
jQuery 表单验证扩展(四)
2010/10/20 Javascript
jQuery插件bxSlider实现响应式焦点图
2015/04/12 Javascript
把普通对象转换成json格式的对象的简单实例
2016/07/04 Javascript
jquery注册文本框获取焦点清空,失去焦点赋值的简单实例
2016/09/08 Javascript
jQuery 检查某个元素在页面上是否存在实例代码
2016/10/27 Javascript
jquery对象与DOM对象转化
2017/02/08 Javascript
微信小程序实现缓存根据不同的id来进行设置和读取缓存
2017/06/12 Javascript
nodejs中解决异步嵌套循环和循环嵌套异步的问题
2017/07/12 NodeJs
Easyui和zTree两种方式分别实现树形下拉框
2017/08/04 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
jquery实现购物车基本功能
2019/10/25 jQuery
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
解决Element中el-date-picker组件不回填的情况
2020/11/07 Javascript
jQuery是用来干什么的 jquery其实就是一个js框架
2021/02/04 jQuery
Python中__init__和__new__的区别详解
2014/07/09 Python
Python实现通过文件路径获取文件hash值的方法
2017/04/29 Python
使用python实现ANN
2017/12/20 Python
Python subprocess模块功能与常见用法实例详解
2018/06/28 Python
python 统计列表中不同元素的数量方法
2018/06/29 Python
python http基本验证方法
2018/12/26 Python
Python-while 计算100以内奇数和的方法
2019/06/11 Python
python scipy卷积运算的实现方法
2019/09/16 Python
python 导入数据及作图的实现
2019/12/03 Python
从pandas一个单元格的字符串中提取字符串方式
2019/12/17 Python
python BeautifulSoup库的安装与使用
2020/12/17 Python
Europcar英国:英国汽车和货车租赁
2017/01/21 全球购物
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
一些.net面试题
2014/10/06 面试题
公司市场部岗位职责
2013/12/02 职场文书
《会变的花树叶》教学反思
2014/02/10 职场文书
英语求职信范文
2014/05/23 职场文书