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 strip()函数 介绍
May 24 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
在arcgis使用python脚本进行字段计算时是如何解决中文问题的
Oct 18 Python
基于python实现在excel中读取与生成随机数写入excel中
Jan 04 Python
pandas数据预处理之dataframe的groupby操作方法
Apr 13 Python
python 给DataFrame增加index行名和columns列名的实现方法
Jun 08 Python
python绘制直线的方法
Jun 30 Python
python定时任务 sched模块用法实例
Nov 04 Python
python 两种方法删除空文件夹
Sep 29 Python
详解pandas赋值失败问题解决
Nov 29 Python
Python Selenium操作Cookie的实例方法
Feb 28 Python
详解Python函数print用法
Jun 18 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
NOT NULL 和NULL
2007/01/15 PHP
PHP加密技术的简单实现
2016/09/04 PHP
phpinfo()中Loaded Configuration File(none)的解决方法
2017/01/16 PHP
php把字符串指定字符分割成数组的方法
2018/03/12 PHP
Laravel框架学习笔记之批量更新数据功能
2019/05/30 PHP
基于Web标准的UI组件 — 树状菜单(2)
2006/09/18 Javascript
Dojo之路:如何利用Dojo实现Drag and Drop效果
2007/04/10 Javascript
js 日期转换成中文格式的函数
2009/07/07 Javascript
javascript 面向对象编程 function也是类
2009/09/17 Javascript
js 与或运算符 || && 妙用
2009/12/09 Javascript
扩展Jquery插件处理mouseover时内部有子元素时发生样式闪烁
2011/12/08 Javascript
解析js中获得父窗口链接getParent方法以及各种打开窗口的方法
2013/06/19 Javascript
JS实现统计复选框选中个数并提示确定与取消的方法
2015/07/01 Javascript
详解JavaScript函数对象
2015/11/15 Javascript
解决jquery无法找到其他父级子集问题的方法
2016/05/10 Javascript
浅谈js中的引用和复制(传值和传址)
2016/09/18 Javascript
require、backbone等重构手机图片查看器
2016/11/17 Javascript
详解浏览器渲染页面过程
2017/02/09 Javascript
浅谈angular.js跨域post解决方案
2017/08/30 Javascript
使用Bootstrap和Vue实现用户信息的编辑删除功能
2017/10/25 Javascript
React diff算法的实现示例
2018/04/20 Javascript
JS实现自定义弹窗功能
2018/08/08 Javascript
vue通过数据过滤实现表格合并
2020/11/30 Javascript
Python中的匿名函数使用简介
2015/04/27 Python
Python使用matplotlib简单绘图示例
2018/02/01 Python
Centos 升级到python3后pip 无法使用的解决方法
2018/06/12 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
2018/09/13 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
jupyter notebook中美观显示矩阵实例
2020/04/17 Python
sealed修饰符是干什么的
2012/10/23 面试题
入党积极分子自我鉴定范文
2014/03/25 职场文书
高中班级口号
2014/06/09 职场文书
不尊敬老师的检讨书
2014/12/21 职场文书
小学数学国培研修日志
2015/11/13 职场文书
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
一次SQL如何查重及去重的实战记录
2022/03/13 MySQL