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 相关文章推荐
windows下python模拟鼠标点击和键盘输示例
Feb 28 Python
Python的Bottle框架的一些使用技巧介绍
Apr 08 Python
python实现数据写入excel表格
Mar 25 Python
python 读入多行数据的实例
Apr 19 Python
使用python采集脚本之家电子书资源并自动下载到本地的实例脚本
Oct 23 Python
python3中的eval和exec的区别与联系
Oct 10 Python
python多进程(加入进程池)操作常见案例
Oct 21 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
Python实现RabbitMQ6种消息模型的示例代码
Mar 30 Python
Python爬虫实例——爬取美团美食数据
Jul 15 Python
详解python中的异常捕获
Dec 15 Python
python开发飞机大战游戏
Jul 15 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
全国FM电台频率大全 - 5 内蒙古自治区
2020/03/11 无线电
php使用Jpgraph绘制3D饼状图的方法
2015/06/10 PHP
自制PHP框架之模型与数据库
2017/05/07 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
Jquery 插件学习实例1 插件制作说明与tableUI优化
2010/04/02 Javascript
js href的用法
2010/05/13 Javascript
非主流的textarea自增长实现js代码
2011/12/20 Javascript
浮动的div自适应居中显示的js代码
2013/12/23 Javascript
浅谈jquery回调函数callback的使用
2015/01/30 Javascript
jQuery延迟加载图片插件Lazy Load使用指南
2015/03/25 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
浅谈js之字面量、对象字面量的访问、关键字in的用法
2016/11/20 Javascript
jQuery实现页面倒计时并刷新效果
2017/03/13 Javascript
BootStrap 表单控件之单选按钮水平排列
2017/05/23 Javascript
Vue组件之Tooltip的示例代码
2017/10/18 Javascript
JS中的BOM应用
2018/02/02 Javascript
使用Angular CLI生成路由的方法
2018/03/24 Javascript
vue中的自定义分页插件组件的示例
2018/08/18 Javascript
使用uni-app开发微信小程序的实现
2019/12/13 Javascript
基于python requests库中的代理实例讲解
2018/05/07 Python
使用python实现unix2dos和dos2unix命令的例子
2019/08/13 Python
Python类反射机制使用实例解析
2019/12/30 Python
关于PySnooper 永远不要使用print进行调试的问题
2021/03/04 Python
基于HTML5+CSS3实现简单的时钟效果
2017/09/11 HTML / CSS
HTML5 body设置自适应全屏
2020/05/07 HTML / CSS
澳大利亚美容产品及化妆品在线:Activeskin
2020/06/03 全球购物
小学生班会演讲稿
2014/01/09 职场文书
家长对老师的评语
2014/04/18 职场文书
综合实践活动总结
2014/05/05 职场文书
领导班子群众路线与四风问题对照检查材料思想汇报
2014/10/11 职场文书
2015年网络舆情工作总结
2015/07/24 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
大学生各类奖学金申请书
2019/06/24 职场文书
PyTorch 如何检查模型梯度是否可导
2021/06/05 Python
详解Python如何批量采集京东商品数据流程
2022/01/22 Python