1. 程式人生 > >python生成帶有表格的圖片

python生成帶有表格的圖片

因為工作中需要,需要生成一個帶表格的圖片

例如:

直接在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

至此就生成了上面的圖片。但是還有一點問題,在使用中文時,表格會又一些錯列,應該是使用字型的事,因為我沒有找到合適的字型,所以這個問題暫時沒有解決。