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实现人人网登录示例分享
Jan 19 Python
Python格式化压缩后的JS文件的方法
Mar 05 Python
详解Python的Lambda函数与排序
Oct 25 Python
Python实现字符串格式化的方法小结
Feb 20 Python
浅谈numpy库的常用基本操作方法
Jan 09 Python
python爬虫 使用真实浏览器打开网页的两种方法总结
Apr 21 Python
python3 线性回归验证方法
Jul 09 Python
浅谈Django2.0 加xadmin踩的坑
Nov 15 Python
python打印n位数“水仙花数”(实例代码)
Dec 25 Python
Python GUI编程学习笔记之tkinter中messagebox、filedialog控件用法详解
Mar 30 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
Python批量解压&压缩文件夹的示例代码
Apr 04 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(视频)Http下载
2006/12/12 PHP
判断是否为指定长度内字符串的php函数
2010/02/16 PHP
PHP代码优化之成员变量获取速度对比
2014/02/28 PHP
laravel 5 实现模板主题功能
2015/03/02 PHP
php字符串函数学习之substr()
2015/03/27 PHP
php利用嵌套数组拼接与解析json的方法
2017/02/07 PHP
php使用Jpgraph创建柱状图展示年度收支表效果示例
2017/02/15 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
使用jquery实现select添加实现后台权限添加的效果
2011/05/28 Javascript
鼠标拖动实现DIV排序示例代码
2013/10/14 Javascript
JS代码随机生成姓名、手机号、身份证号、银行卡号
2016/04/27 Javascript
Bootstrap模态对话框的简单使用
2016/04/29 Javascript
Bootstrap时间选择器datetimepicker和daterangepicker使用实例解析
2016/09/17 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
p5.js入门教程之图片加载
2018/03/20 Javascript
express框架下使用session的方法
2019/07/31 Javascript
这15个Vue指令,让你的项目开发爽到爆
2019/10/11 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
vue+echarts+datav大屏数据展示及实现中国地图省市县下钻功能
2020/11/16 Javascript
Python中捕捉详细异常信息的代码示例
2014/09/18 Python
python简单实现刷新智联简历
2016/03/30 Python
pandas中的DataFrame按指定顺序输出所有列的方法
2018/04/10 Python
pandas 小数位数 精度的处理方法
2018/06/09 Python
Python统计纯文本文件中英文单词出现个数的方法总结【测试可用】
2018/07/25 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
数据库面试要点基本概念
2013/10/31 面试题
生物制药毕业生自荐信
2013/10/16 职场文书
建筑毕业生自我鉴定
2013/10/18 职场文书
农村结婚典礼司仪主持词
2014/03/14 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
建筑技术负责人岗位职责
2015/04/13 职场文书
2015年党员创先争优公开承诺书
2015/04/27 职场文书
奖励申请报告范文
2015/05/15 职场文书
《月球之谜》教学反思
2016/02/20 职场文书
frg-100简单操作(设置)说明
2022/04/05 无线电