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实现分析apache和nginx日志文件并输出访客ip列表的方法
Apr 04 Python
简述Python2与Python3的不同点
Jan 21 Python
教你使用python实现微信每天给女朋友说晚安
Mar 23 Python
PyQt5每天必学之带有标签的复选框
Apr 19 Python
pandas的唯一值、值计数以及成员资格的示例
Jul 25 Python
在IPython中执行Python程序文件的示例
Nov 01 Python
Python检测数据类型的方法总结
May 20 Python
python pip源配置,pip配置文件存放位置的方法
Jul 12 Python
python装饰器练习题及答案
Nov 01 Python
pandas factorize实现将字符串特征转化为数字特征
Dec 19 Python
在Sublime Editor中配置Python环境的详细教程
May 03 Python
在 Windows 下搭建高效的 django 开发环境的详细教程
Jul 27 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
谏山创故乡大分县日田市水坝将设立《进击的巨人》立艾伦、三笠以及阿尔敏的铜像!
2020/03/06 日漫
php array_map array_multisort 高效处理多维数组排序
2009/06/11 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
浅析php设计模式之数据对象映射模式
2016/03/03 PHP
Yii2.0表关联查询实例分析
2016/07/18 PHP
PHP遍历目录文件的常用方法小结
2017/02/03 PHP
php mysql数据库操作类(实例讲解)
2017/08/06 PHP
20个非常棒的Jquery实用工具 国外文章
2010/01/01 Javascript
jquery动画1.加载指示器
2012/08/24 Javascript
javascript生成随机大小写字母的方法
2014/02/20 Javascript
三种动态加载js的jquery实例代码另附去除js方法
2014/04/30 Javascript
JS、CSS以及img对DOMContentLoaded事件的影响
2014/08/12 Javascript
JavaScript判断变量是否为空的自定义函数分享
2015/01/31 Javascript
javascript实现checkbox复选框实例代码
2016/01/10 Javascript
jQuery根据表单name获取值的方法
2016/05/24 Javascript
Angular中使用ui router实现系统权限控制及开发遇到问题
2016/09/23 Javascript
Vue.js教程之计算属性
2016/11/11 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
深入理解使用Vue实现Context-Menu的思考与总结
2019/03/09 Javascript
axios实现文件上传并获取进度
2020/03/25 Javascript
基于脚手架创建Vue项目实现步骤详解
2020/08/03 Javascript
原生js实现表格循环滚动
2020/11/24 Javascript
Python编程之属性和方法实例详解
2015/05/19 Python
Python中断言Assertion的一些改进方案
2016/10/27 Python
Python图像滤波处理操作示例【基于ImageFilter类】
2019/01/03 Python
使用Python爬虫库BeautifulSoup遍历文档树并对标签进行操作详解
2020/01/25 Python
tensorflow 实现数据类型转换
2020/02/17 Python
用于ETL的Python数据转换工具详解
2020/07/21 Python
HTML5中drawImage用法分析
2014/12/01 HTML / CSS
中软Java笔试题
2012/11/11 面试题
《母亲的恩情》教学反思
2014/02/13 职场文书
2014党员民主评议个人总结
2014/09/10 职场文书
车辆安全隐患排查制度
2015/08/05 职场文书
JavaGUI模仿QQ聊天功能完整版
2021/07/04 Java/Android
Win11怎样将锁屏账户头像图片改成动画视频
2021/11/21 数码科技