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笔记(叁)继续学习
Oct 24 Python
Python错误: SyntaxError: Non-ASCII character解决办法
Jun 08 Python
详解python基础之while循环及if判断
Aug 24 Python
使用pandas对矢量化数据进行替换处理的方法
Apr 11 Python
Django框架模板文件使用及模板文件加载顺序分析
May 23 Python
Python实现代码块儿折叠
Apr 15 Python
python IDLE添加行号显示教程
Apr 25 Python
python3的pip路径在哪
Jun 23 Python
简单了解如何封装自己的Python包
Jul 08 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
pytorch fine-tune 预训练的模型操作
Jun 03 Python
Python序列化与反序列化相关知识总结
Jun 08 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
用 PHP5 轻松解析 XML
2006/12/04 PHP
PHP CKEditor 上传图片实现代码
2009/11/06 PHP
发一个php简单的伪原创程序,配合商城采集用的
2010/10/12 PHP
PHP扩展模块Pecl、Pear以及Perl的区别
2014/04/09 PHP
php向js函数传参的几种方法
2014/08/10 PHP
PHP PDOStatement::fetchColumn讲解
2019/01/31 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
PHP内存溢出优化代码详解
2021/02/26 PHP
向当前style sheet中插入一个新的style实现方法
2013/04/01 Javascript
使用javascript过滤html的字符串(注释标记法)
2013/07/08 Javascript
jQuery列表拖动排列具体实现
2013/11/04 Javascript
javaScript中Math()函数注意事项
2015/06/18 Javascript
Bootstrap入门书籍之(一)排版
2016/02/17 Javascript
javascript实现九宫格相加数值相等
2020/05/28 Javascript
JS产生随机数的几个用法详解
2016/06/22 Javascript
jQuery实现弹出带遮罩层的居中浮动窗口效果
2016/09/12 Javascript
jQuery日期范围选择器附源码下载
2017/05/23 jQuery
React Form组件的实现封装杂谈
2018/05/07 Javascript
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
javascript绘制简单钟表效果
2020/04/07 Javascript
基于Python实现的百度贴吧网络爬虫实例
2015/04/17 Python
python简单实现基数排序算法
2015/05/16 Python
qpython3 读取安卓lastpass Cookies
2016/06/19 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
Python实现字典(dict)的迭代操作示例
2018/06/05 Python
用Python获取摄像头并实时控制人脸的实现示例
2019/07/11 Python
使用Python将语音转换为文本的方法
2020/08/10 Python
python爬虫中采集中遇到的问题整理
2020/11/27 Python
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
2020/07/20 HTML / CSS
面向对象编程OOP的优点
2013/01/22 面试题
Java程序员综合测试题
2014/04/25 面试题
全神贯注教学反思
2014/02/03 职场文书
酒店大堂副理的职责范文
2014/02/13 职场文书
年终晚会活动方案
2014/08/21 职场文书
2014年消防工作总结
2014/11/21 职场文书
SQLServer常见数学函数梳理总结
2022/08/05 MySQL