Python使用Pillow和PrettyTable生成带表格图片的方法
本文介绍如何在Python中仅依赖第三方库生成包含表格的图片。通过结合PrettyTable生成文本表格与Pillow进行图像绘制,避免了系统级依赖如webkit2png。文章提供了具体代码实现,并指出中文排版时可能出现的字体对齐问题及解决思路。
由于工作需求,需要生成一张包含表格的图片。
例如:
可以直接在HTML中编写table标签,然后将表格部分单独保存为图片。
或者直接将Excel中的内容保存为一张图片。
最初的思路是生成一个包含table标签的HTML文件,再将其转换为图片。经过查阅资料发现,这需要安装webkit2png库,而该库又依赖其他系统组件,因此最终放弃了这一方案。
最初的目标是直接生成图片,且只需安装Python依赖库,无需在系统层面安装额外的依赖包。
后来考虑使用Python的图片处理库Pillow,以及生成表格的库prattytable。下图展示了最终生成的图片效果。

总体流程分为两个步骤:
使用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生成带有表格的图片实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













