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中使用urllib2获取http请求状态码的代码例子
Jul 07 Python
python中__call__方法示例分析
Oct 11 Python
Python中的rjust()方法使用详解
May 19 Python
python2.7+selenium2实现淘宝滑块自动认证功能
Feb 24 Python
对Python中的@classmethod用法详解
Apr 21 Python
屏蔽Django admin界面添加按钮的操作
Mar 11 Python
python 穷举指定长度的密码例子
Apr 02 Python
python绘制分布折线图的示例
Sep 24 Python
python如何利用Mitmproxy抓包
Oct 10 Python
详解python模块pychartdir安装及导入问题
Oct 22 Python
python3 re返回形式总结
Nov 20 Python
Python内置数据结构列表与元组示例详解
Aug 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中使用反射技术的架构插件使用说明
2010/05/18 PHP
PHP分页详细讲解(有实例)
2013/10/30 PHP
ThinkPHP CURD方法之page方法详解
2014/06/18 PHP
CentOS下PHP安装Oracle扩展
2015/02/15 PHP
php通过递归方式复制目录和子目录的方法
2015/03/13 PHP
PHP常用函数之根据生日计算年龄功能示例
2019/10/21 PHP
php设计模式之正面模式实例分析【星际争霸游戏案例】
2020/03/24 PHP
jQuery实现预加载图片的方法
2015/03/17 Javascript
Javascript的表单验证-提交表单
2016/03/18 Javascript
微信小程序 时间格式化(util.formatTime(new Date))详解
2016/11/16 Javascript
简单易懂的天气插件(代码分享)
2017/02/04 Javascript
jquery.validate.js 多个相同name的处理方式
2017/07/10 jQuery
vue做网页开场视频的实例代码
2017/10/20 Javascript
在小程序中使用canvas的方法示例
2018/09/17 Javascript
微信公众号生成新浪短网址的实现(快速生成)
2019/08/18 Javascript
JS实现滚动条触底加载更多
2019/09/19 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
[01:58]最残酷竞争 2016国际邀请赛中国区预选赛积分循环赛回顾
2016/06/28 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
ubuntu环境下python虚拟环境的安装过程
2018/01/07 Python
详解Python3中ceil()函数用法
2019/02/19 Python
Django 实现外键去除自动添加的后缀‘_id’
2019/11/15 Python
python 实现目录复制的三种小结
2019/12/04 Python
pycharm 添加解释器的方法步骤
2020/08/31 Python
哈利波特商店:Harry Potter Shop
2018/11/30 全球购物
煤矿班组长竞聘书
2014/03/31 职场文书
简洁的英文求职信范文
2014/05/03 职场文书
幽默自我介绍演讲稿
2014/08/21 职场文书
乡镇党的群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
学校运动会广播稿
2014/10/11 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
大学班长竞选稿
2015/11/20 职场文书
2019大学生预备党员转正思想汇报
2019/06/21 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
星际争霸:毕姥爷vs解冻03
2022/04/01 星际争霸
把77A收信机改造成收音机
2022/04/05 无线电