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中使用异步Socket编程性能测试
Jun 25 Python
在Django的视图中使用form对象的方法
Jul 18 Python
Django权限机制实现代码详解
Feb 05 Python
Python实现自定义顺序、排列写入数据到Excel的方法
Apr 23 Python
对numpy.append()里的axis的用法详解
Jun 28 Python
Python基于递归算法求最小公倍数和最大公约数示例
Jul 27 Python
实例讲解Python脚本成为Windows中运行的exe文件
Jan 24 Python
django的auth认证,authenticate和装饰器功能详解
Jul 25 Python
python定时任务 sched模块用法实例
Nov 04 Python
Django实现简单网页弹出警告代码
Nov 15 Python
解决tensorflow模型压缩的问题_踩坑无数,总算搞定
Mar 02 Python
详解Python 3.10 中的新功能和变化
Apr 28 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
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
Extjs4 消息框去掉关闭按钮(类似Ext.Msg.alert)
2013/04/02 Javascript
jquery prop的使用介绍及与attr的区别
2013/12/19 Javascript
extJS中常用的4种Ajax异步提交方式
2014/03/07 Javascript
图片放大镜jquery.jqzoom.js使用实例附放大镜图标
2014/06/19 Javascript
JavaScript开发者必备的10个Sublime Text插件
2016/02/27 Javascript
Bootstrap轮播插件简单使用方法介绍
2016/06/21 Javascript
基于Vue.js实现数字拼图游戏
2016/08/02 Javascript
vue实现添加标签demo示例代码
2017/01/21 Javascript
使用openSpeDiv方法实现Ecshop登录弹窗框效果
2017/03/13 Javascript
angularJs中datatable实现代码
2017/06/03 Javascript
Vue实现搜索 和新闻列表功能简单范例
2018/03/16 Javascript
js input输入百分号保存数据库失败的解决方法
2018/05/26 Javascript
vue 项目软键盘回车触发搜索事件
2020/09/09 Javascript
Python环境下搭建属于自己的pip源的教程
2016/05/05 Python
PyQt5每天必学之滑块控件QSlider
2018/04/20 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
Python使用pyserial进行串口通信的实例
2019/07/02 Python
利用python计算windows全盘文件md5值的脚本
2019/07/27 Python
Python利用FFT进行简单滤波的实现
2020/02/26 Python
Python HTTP下载文件并显示下载进度条功能的实现
2020/04/02 Python
vscode写python时的代码错误提醒和自动格式化的方法
2020/05/07 Python
Python字符串split及rsplit方法原理详解
2020/06/29 Python
Python分类测试代码实例汇总
2020/07/23 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
纯CSS3打造属于自己的“小黄人”
2016/03/14 HTML / CSS
CSS3 mask 遮罩的具体使用方法
2017/11/03 HTML / CSS
如何写一个自定义标签
2012/12/28 面试题
历史学专业推荐信
2013/11/06 职场文书
前台领班岗位职责
2013/12/04 职场文书
机械工程学院大学生求职信
2014/05/25 职场文书
自我评价优缺点范文
2015/03/11 职场文书
详解Spring Bean的配置方式与实例化
2022/06/10 Java/Android
JS实现刷新网页后之前浏览位置保持不变示例详解
2022/08/14 Javascript