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文件读写操作与linux shell变量命令交互执行的方法
Jan 14 Python
学习python之编写简单乘法口诀表实现代码
Feb 27 Python
python列表生成式与列表生成器的使用
Feb 23 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
python得到qq句柄,并显示在前台的方法
Oct 14 Python
Python3中urlencode和urldecode的用法详解
Jul 23 Python
python实现替换word中的关键文字(使用通配符)
Feb 13 Python
谈谈python垃圾回收机制
Sep 27 Python
python中使用asyncio实现异步IO实例分析
Feb 26 Python
python爬虫破解字体加密案例详解
Mar 02 Python
Python获取百度热搜的完整代码
Apr 07 Python
python爬虫之selenium库的安装及使用教程
May 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
古巴咖啡 Cubita琥爵咖啡 独特的加勒比海风味咖啡
2021/03/06 新手入门
PHP新手上路(十一)
2006/10/09 PHP
PHP面向对象学习笔记之二 生成对象的设计模式
2012/10/06 PHP
ueditor 1.2.6 使用方法说明
2013/07/24 PHP
php颜色转换函数hex-rgb(将十六进制格式转成十进制格式)
2013/09/23 PHP
一个PHP二维数组排序的函数分享
2014/01/17 PHP
JS实现黑客帝国文字下落效果
2015/09/01 Javascript
js修改onclick动作的四种方法(推荐)
2016/08/18 Javascript
根据输入邮箱号跳转到相应登录地址的解决方法
2016/12/13 Javascript
nodejs开发——express路由与中间件
2017/03/24 NodeJs
redux-saga 初识和使用
2018/03/10 Javascript
深入理解Vue nextTick 机制
2018/04/28 Javascript
微信小程序下拉刷新PullDownRefresh的使用方法
2018/11/29 Javascript
Vue2.x通用条件搜索组件的封装及应用详解
2019/05/28 Javascript
[54:10]Spirit vs NB Supermajor小组赛 A组败者组决赛 BO3 第一场 6.2
2018/06/03 DOTA
[46:57]EG vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[44:33]EG vs Liquid 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python动态加载变量示例分享
2014/02/17 Python
Python基于PyGraphics包实现图片截取功能的方法
2017/12/21 Python
Python3实现将本地JSON大数据文件写入MySQL数据库的方法
2018/06/13 Python
详解Python中pandas的安装操作说明(傻瓜版)
2019/04/08 Python
python实现代码审查自动回复消息
2021/02/01 Python
html5时钟实现代码
2010/10/22 HTML / CSS
运动鞋、街头服装、手表和手袋的实时市场:StockX
2020/11/25 全球购物
C#基础面试题
2016/10/17 面试题
英语系本科生个人求职信
2013/09/21 职场文书
大学生专科毕业生自我评价
2013/11/17 职场文书
高中生的自我评价
2014/03/04 职场文书
毕业生写求职信的要点
2014/03/04 职场文书
老人祝寿主持词
2014/03/28 职场文书
授权委托书范本
2014/04/03 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
工程造价专业求职信
2014/07/17 职场文书
查摆问题整改措施范文
2014/10/11 职场文书
解决xampp安装后Apache无法启动
2022/03/21 Servers
mysql幻读详解实例以及解决办法
2022/06/16 MySQL