神操作!居然有人用 Python 在 Excel 中畫畫
↑?關(guān)注 + 星標(biāo)?,每天學(xué)Python新技能
后臺(tái)回復(fù)【大禮包】送你Python自學(xué)大禮包
十字繡大家都知道吧,今天咱們來玩?zhèn)€電子版的十字繡。
用 Python 讀取圖片的像素值,然后輸出到 Excel 表格中,最終形成一幅像素畫,也就是電子版的十字繡了。
準(zhǔn)備
既然要讀取圖片,那就需要用到 Pillow 庫,操作 Excel 需要用到 openpyxl 庫,先把這兩個(gè)庫安裝好。
$?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
圖片轉(zhuǎn)換
有了色值轉(zhuǎn)換函數(shù),接下來要做的操作就是逐行讀取圖片的 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()
最后再來個(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)的心,顫抖的手,來看下最終效果咋樣。

是不是覺得有那么一絲絲韻味呢...
總結(jié)
今天派森醬帶大家一起實(shí)現(xiàn)了 Excel 像素畫,小伙伴們可以發(fā)揮自己的想象,比如把女神的頭像藏進(jìn) Excel 中然后發(fā)她,你猜女神會(huì)不會(huì)被驚艷到呢。
推薦閱讀
推薦閱讀
您看此文用?
?
?分?
?
秒,轉(zhuǎn)發(fā)只需1秒
您看此文用? ?
?分?
?
秒,轉(zhuǎn)發(fā)只需1秒
評(píng)論
圖片
表情
