python生成帶有表格的圖片實(shí)例
因?yàn)楣ぷ髦行枰?,需要生成一個(gè)帶表格的圖片
例如:
直接在html中寫一個(gè)table標(biāo)簽,然后單獨(dú)把表格部分保存成圖片
或者是直接將excel中的內(nèi)容保存成一個(gè)圖片
剛開(kāi)始的思路,是直接生成一個(gè)帶有table標(biāo)簽的html文件,然后將這個(gè)文件轉(zhuǎn)成圖片,經(jīng)過(guò)查找資料發(fā)現(xiàn)需要安裝webkit2png,而這個(gè)庫(kù)又依賴其他的東西,遂放棄。
當(dāng)初的目標(biāo)是直接生成一個(gè)圖片,并且是只需要安裝python依賴庫(kù)就行,而不需要在系統(tǒng)層面安裝相應(yīng)的依賴包
后來(lái)考慮使用Python的圖片處理庫(kù)Pillow,和生成表格式的庫(kù)prattytable,下面的圖片是最終生成的圖片效果
總體來(lái)說(shuō)是分為兩個(gè)步驟:
使用prattytable將要展示的數(shù)據(jù)生成一個(gè)表格字符串
使用pillow,將生成的表格字符串寫入到圖片中
下面是具體實(shí)現(xiàn):
from prettytable import PrettyTable from PIL import Image, ImageDraw, ImageFont tab = PrettyTable() # 設(shè)置表頭 tab.field_names = ["Name", "Age","Country","City"] # 表格內(nèi)容插入 tab.add_row(['chal','23','中國(guó)','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模塊創(chuàng)建一個(gè)圖片對(duì)象 im = Image.new('RGB',(10, 10),(0,0,0,0)) # ImageDraw向圖片中進(jìn)行操作,寫入文字或者插入線條都可以 draw = ImageDraw.Draw(im, "RGB") # 根據(jù)插入圖片中的文字內(nèi)容和字體信息,來(lái)確定圖片的最終大小 img_size = draw.multiline_textsize(tab_info, font=font) # 圖片初始化的大小為10-10,現(xiàn)在根據(jù)圖片內(nèi)容要重新設(shè)置圖片的大小 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會(huì)自動(dòng)識(shí)別換行符 # 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
至此就生成了上面的圖片。但是還有一點(diǎn)問(wèn)題,在使用中文時(shí),表格會(huì)又一些錯(cuò)列,應(yīng)該是使用字體的事,因?yàn)槲覜](méi)有找到合適的字體,所以這個(gè)問(wèn)題暫時(shí)沒(méi)有解決。
以上這篇python生成帶有表格的圖片實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Python獲取時(shí)光網(wǎng)電影數(shù)據(jù)的實(shí)例代碼
這篇文章主要介紹了Python獲取時(shí)光網(wǎng)電影數(shù)據(jù),基本原理是先通過(guò)requests庫(kù),通過(guò)時(shí)光網(wǎng)自帶的電影數(shù)據(jù)API接口,獲取到指定的電影數(shù)據(jù),本文結(jié)合示例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2022-09-09學(xué)習(xí)Python列表的基礎(chǔ)知識(shí)匯總
本文給大家匯總介紹了學(xué)習(xí)Python列表的一些基礎(chǔ)知識(shí),有了這份python列表的資料,對(duì)大家初識(shí)Python列表會(huì)非常有幫助,希望大家喜歡2020-03-03Python機(jī)器學(xué)習(xí)之手寫KNN算法預(yù)測(cè)城市空氣質(zhì)量
KNN(K-Nearest Neighbor)最鄰近分類算法是數(shù)據(jù)挖掘分類(classification)技術(shù)中常用算法之一,本文將介紹如何通過(guò)KNN算法實(shí)現(xiàn)城市空氣質(zhì)量的預(yù)測(cè),感興趣的同學(xué)可以了解一下2021-12-12Python?selenium?find_element()示例詳解
selenium定位元素的函數(shù)/方法可以分為兩類:find_element及find_elements,下面這篇文章主要給大家介紹了關(guān)于Python?selenium?find_element()的相關(guān)資料,需要的朋友可以參考下2022-07-07Django JWT Token RestfulAPI用戶認(rèn)證詳解
這篇文章主要介紹了Django JWT Token RestfulAPI用戶認(rèn)證詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-01-01關(guān)于python變量的引用以及在底層存儲(chǔ)原理
Python的變量,簡(jiǎn)單來(lái)說(shuō)有數(shù)值型,布爾型,字符串類型,列表,元組,字典等6大類。那么不同變量類型在底層是如何存儲(chǔ)的,關(guān)系到變量的引用,能否正確的掌握變量的相關(guān)操作?接下來(lái)小編就來(lái)為大家講解python變量的引用以及在底層存儲(chǔ)原理,需要的朋友可以參考一下2021-09-09django的模型類管理器——數(shù)據(jù)庫(kù)操作的封裝詳解
這篇文章主要介紹了django的模型類管理器——數(shù)據(jù)庫(kù)操作的封裝詳解,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04