Python 居然可以在 Excel 中畫畫你知道嗎
導語:
用 Python 讀取圖片的像素值,然後輸出到 Excel 表格中,最終形成一幅像素畫,也就是電子版的十字繡瞭。
基本思路
實現這個需求的基本思路是讀取這張圖片每一個像素的色彩值,然後給 excel 裡的每一個單元格填充上顏色。既然要讀取圖片,那就需要用到 Pillow 庫,操作 Excel 需要用到 openpyxl 庫,先把這兩個庫安裝好。
pip3 install openpyxl pip3 install Pillow
色值轉換
從圖片讀取的像素塊色值是 RGB 值,而 openpyxl 向 Excel cell 內填充顏色是十六進制色值,因此咱們先寫一個 RGB 和十六進制色值轉換的一個函數。
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 的單元格默認是長方形,修改為正方形才不會使圖片變形
if h == 1: _w = cell.column _h = cell.col_idx # 調整列寬 worksheet.column_dimensions[_w].width = 1 # 調整行高 worksheet.row_dimensions[h].height = 6
這裡用到瞭雙重for循環,外層是`width`,裡層是`height`,是一列一列的填充顏色,因此判斷`if h == 1`,避免多次調整列寬。
圖片轉換
有瞭色值轉換函數,接下來要做的操作就是逐行讀取圖片的 RGB 色值,之後將 RGB 色值轉換為十六進制色值填充到 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) # 設置填充顏色為 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()
最後再來個入口函數,就大功告成啦~
if __name__ == '__main__': img_path = '/Users/xyz/Documents/tmp/03.png' excel_path = '/Users/xyz/Documents/tmp/3.xlsx' img2excel(img_path, excel_path)
驚艷時刻
激動的心,顫抖的手,來看下最終效果咋樣。
怎麼樣是不是覺得有那麼一絲絲韻味呢…
總結
好啦今日代碼分享就到這瞭,喜歡的記得收藏噢~
到此這篇關於Python 居然可以在 Excel 中畫畫你知道嗎的文章就介紹到這瞭,更多相關Python Excel畫畫內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- python使用openpyxl庫讀寫Excel表格的方法(增刪改查操作)
- Python openpyxl模塊學習之輕松玩轉Excel
- Python使用openpyxl復制整張sheet
- 詳解Python操作Excel之openpyxl
- python技巧分享Excel創建和修改