Python 居然可以在 Excel 中畫畫你知道嗎
導(dǎo)語(yǔ):
用 Python 讀取圖片的像素值,然后輸出到 Excel 表格中,最終形成一幅像素畫,也就是電子版的十字繡了。
基本思路
實(shí)現(xiàn)這個(gè)需求的基本思路是讀取這張圖片每一個(gè)像素的色彩值,然后給 excel 里的每一個(gè)單元格填充上顏色。既然要讀取圖片,那就需要用到 Pillow 庫(kù),操作 Excel 需要用到 openpyxl 庫(kù),先把這兩個(gè)庫(kù)安裝好。
pip3 install openpyxl pip3 install Pillow
色值轉(zhuǎn)換
從圖片讀取的像素塊色值是 RGB 值,而 openpyxl 向 Excel cell 內(nèi)填充顏色是十六進(jìn)制色值,因此咱們先寫一個(gè) RGB 和十六進(jìn)制色值轉(zhuǎn)換的一個(gè)函數(shù)。
def rgb_to_hex(rgb): rgb = rgb.split(',') color = '' for i in RGB: num = int(i) color += str(hex(num))[-2:].replace('x', '0').upper() return color
excel 的單元格默認(rèn)是長(zhǎng)方形,修改為正方形才不會(huì)使圖片變形
if h == 1: _w = cell.column _h = cell.col_idx # 調(diào)整列寬 worksheet.column_dimensions[_w].width = 1 # 調(diào)整行高 worksheet.row_dimensions[h].height = 6
這里用到了雙重for循環(huán),外層是`width`,里層是`height`,是一列一列的填充顏色,因此判斷`if h == 1`,避免多次調(diào)整列寬。
圖片轉(zhuǎn)換
有了色值轉(zhuǎn)換函數(shù),接下來(lái)要做的操作就是逐行讀取圖片的 RGB 色值,之后將 RGB 色值轉(zhuǎn)換為十六進(jìn)制色值填充到 Excel 的 cell 中即可。
def img2excel(img_path, excel_path): img_src = Image.open(img_path) # 圖片寬高 img_width = img_src.size[0] img_height = img_src.size[1] str_strlist = img_src.load() wb = openpyxl.Workbook() wb.save(excel_path) wb = openpyxl.load_workbook(excel_path) cell_width, cell_height = 1.0, 1.0 sheet = wb["Sheet"] for w in range(img_width): for h in range(img_height): data = str_strlist[w, h] color = str(data).replace("(", "").replace(")", "") color = rgb_to_hex(color) # 設(shè)置填充顏色為 color fille = PatternFill("solid", fgColor=color) sheet.cell(h + 1, w + 1).fill = fille for i in range(1, sheet.max_row + 1): sheet.row_dimensions[i].height = cell_height for i in range(1, sheet.max_column + 1): sheet.column_dimensions[get_column_letter(i)].width = cell_width wb.save(excel_path) img_src.close()
最后再來(lái)個(gè)入口函數(shù),就大功告成啦~
if __name__ == '__main__': img_path = '/Users/xyz/Documents/tmp/03.png' excel_path = '/Users/xyz/Documents/tmp/3.xlsx' img2excel(img_path, excel_path)
驚艷時(shí)刻
激動(dòng)的心,顫抖的手,來(lái)看下最終效果咋樣。
怎么樣是不是覺得有那么一絲絲韻味呢...
總結(jié)
好啦今日代碼分享就到這了,喜歡的記得收藏噢~
到此這篇關(guān)于Python 居然可以在 Excel 中畫畫你知道嗎的文章就介紹到這了,更多相關(guān)Python Excel畫畫內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
keras .h5轉(zhuǎn)移動(dòng)端的.tflite文件實(shí)現(xiàn)方式
這篇文章主要介紹了keras .h5轉(zhuǎn)移動(dòng)端的.tflite文件實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來(lái)看看吧2020-05-05python面向?qū)ο蠖嗑€程爬蟲爬取搜狐頁(yè)面的實(shí)例代碼
這篇文章主要介紹了python面向?qū)ο蠖嗑€程爬蟲爬取搜狐頁(yè)面的實(shí)例代碼,需要的朋友可以參考下2018-05-05Python爬蟲實(shí)例扒取2345天氣預(yù)報(bào)
本篇文章給大家詳細(xì)分析了通過Python爬蟲如何采集到2345的天氣預(yù)報(bào)信息,有興趣的朋友參考學(xué)習(xí)下吧。2018-03-03Pandas實(shí)現(xiàn)數(shù)據(jù)拼接的操作方法詳解
Python處理大規(guī)模數(shù)據(jù)集的時(shí)候經(jīng)常需要使用到合并、鏈接的方式進(jìn)行數(shù)據(jù)集的整合,本文為大家主要介紹了.merge()、?.join()?和?.concat()?三種方法,感興趣的可以了解一下2022-04-04簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼
Python編程是一種通用的編程語(yǔ)言,開源、靈活、功能強(qiáng)大且易于使用,python最重要的特性之一是其用于數(shù)據(jù)處理和分析任務(wù)的豐富實(shí)用程序和庫(kù)集,這篇文章主要給大家介紹了一些簡(jiǎn)單且有用的Python數(shù)據(jù)分析和機(jī)器學(xué)習(xí)代碼,需要的朋友可以參考下2021-07-07