python生成带有表格的图片实例


Posted in Python onFebruary 03, 2019

因为工作中需要,需要生成一个带表格的图片

例如:

直接在html中写一个table标签,然后单独把表格部分保存成图片

或者是直接将excel中的内容保存成一个图片

刚开始的思路,是直接生成一个带有table标签的html文件,然后将这个文件转成图片,经过查找资料发现需要安装webkit2png,而这个库又依赖其他的东西,遂放弃。

当初的目标是直接生成一个图片,并且是只需要安装python依赖库就行,而不需要在系统层面安装相应的依赖包

后来考虑使用Python的图片处理库Pillow,和生成表格式的库prattytable,下面的图片是最终生成的图片效果

python生成带有表格的图片实例

总体来说是分为两个步骤:

使用prattytable将要展示的数据生成一个表格字符串

使用pillow,将生成的表格字符串写入到图片中

下面是具体实现:

from prettytable import PrettyTable
from PIL import Image, ImageDraw, ImageFont
tab = PrettyTable()
# 设置表头
tab.field_names = ["Name", "Age","Country","City"]
# 表格内容插入
tab.add_row(['chal','23','中国','Shanghai'])
tab.add_row(['charle','29','China','Xuzhou'])
tab.add_row(['jack','32','United States','Washington'])
tab_info = str(tab)
space = 5

# PIL模块中,确定写入到图片中的文本字体
font = ImageFont.truetype('/home/doge/YaHeiConsolas.ttf', 15, encoding='utf-8')
# Image模块创建一个图片对象
im = Image.new('RGB',(10, 10),(0,0,0,0))
# ImageDraw向图片中进行操作,写入文字或者插入线条都可以
draw = ImageDraw.Draw(im, "RGB")
# 根据插入图片中的文字内容和字体信息,来确定图片的最终大小
img_size = draw.multiline_textsize(tab_info, font=font)
# 图片初始化的大小为10-10,现在根据图片内容要重新设置图片的大小
im_new = im.resize((img_size[0]+space*2, img_size[1]+space*2))
del draw
del im
draw = ImageDraw.Draw(im_new, 'RGB')
# 批量写入到图片中,这里的multiline_text会自动识别换行符
# python2
draw.multiline_text((space,space), unicode(tab_info, 'utf-8'), fill=(255,255,255), font=font)
# python3
# draw.multiline_text((space,space), tab_info, fill=(255,255,255), font=font)

im_new.save('12345.PNG', "PNG")
del draw

至此就生成了上面的图片。但是还有一点问题,在使用中文时,表格会又一些错列,应该是使用字体的事,因为我没有找到合适的字体,所以这个问题暂时没有解决。

以上这篇python生成带有表格的图片实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中属性和描述符的正确使用
Aug 23 Python
Python排序搜索基本算法之插入排序实例分析
Dec 11 Python
python通过伪装头部数据抵抗反爬虫的实例
May 07 Python
python实现查找所有程序的安装信息
Feb 18 Python
Python callable内置函数原理解析
Mar 05 Python
python读取当前目录下的CSV文件数据
Mar 11 Python
Python闭包与装饰器原理及实例解析
Apr 30 Python
Python自定义聚合函数merge与transform区别详解
May 26 Python
Python中Yield的基本用法
Oct 18 Python
详解Django中异步任务之django-celery
Nov 05 Python
python中最小二乘法详细讲解
Feb 19 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 Python
对python生成业务报表的实例详解
Feb 03 #Python
使用Python快速制作可视化报表的方法
Feb 03 #Python
python生成每日报表数据(Excel)并邮件发送的实例
Feb 03 #Python
Python告诉你木马程序的键盘记录原理
Feb 02 #Python
Python实现DDos攻击实例详解
Feb 02 #Python
Python实现SQL注入检测插件实例代码
Feb 02 #Python
Django uwsgi Nginx 的生产环境部署详解
Feb 02 #Python
You might like
php中的MVC模式运用技巧
2007/05/03 PHP
解决ajax+php中文乱码的方法详解
2013/06/09 PHP
php查看请求头信息获取远程图片大小的方法分享
2013/12/25 PHP
php中switch与ifelse的效率区别及适用情况分析
2015/02/12 PHP
PHP排序算法之冒泡排序(Bubble Sort)实现方法详解
2018/04/20 PHP
php服务器的系统详解
2019/10/12 PHP
jquery 如何动态添加、删除class样式方法介绍
2012/11/07 Javascript
script标签属性type与language使用选择
2012/12/02 Javascript
深入理解Javascript里的依赖注入
2014/03/19 Javascript
jquery 自定义容器下雨效果可将下雨图标改为其他
2014/04/23 Javascript
node.js中的fs.ftruncate方法使用说明
2014/12/15 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
jQuery+ajax的资源回收处理机制分析
2017/01/07 Javascript
js弹出窗口简单实现代码
2017/03/22 Javascript
JS字符串按逗号和回车分隔的方法
2017/04/25 Javascript
详解用vue编写弹出框组件
2017/07/04 Javascript
JS HTML图片显示Canvas 压缩功能
2017/07/21 Javascript
Angular2里获取(input file)上传文件的内容的方法
2017/09/05 Javascript
vue 父组件调用子组件方法及事件
2018/03/29 Javascript
JS div匀速移动动画与变速移动动画代码实例
2019/03/26 Javascript
vue + axios get下载文件功能
2019/09/25 Javascript
浅析webpack-bundle-analyzer在vue-cli3中的使用
2019/10/23 Javascript
Python基于pygame实现的弹力球效果(附源码)
2015/11/11 Python
python 接口返回的json字符串实例
2018/03/27 Python
TensorFlow实现Logistic回归
2018/09/07 Python
Python提取特定时间段内数据的方法实例
2019/04/01 Python
Django Admin后台添加数据库视图过程解析
2020/04/01 Python
python 在sql语句中使用%s,%d,%f说明
2020/06/06 Python
html5 Canvas画图教程(9)—canvas中画出矩形和圆形
2013/01/09 HTML / CSS
公司新员工的演讲稿注意事项
2014/01/01 职场文书
财务人员担保书
2014/05/13 职场文书
技能比武方案
2014/05/21 职场文书
打架检讨书范文
2015/01/27 职场文书
应届毕业生求职信范文
2015/03/19 职场文书
创业计划书之便利店
2019/09/05 职场文书
Go 通过结构struct实现接口interface的问题
2021/10/05 Golang