使用Python在Excel畫畫

roc_guo 發表於 2022-01-25
Python Excel
導讀 十字繡大家都知道吧,今天小編帶大家來玩個電子版的十字繡。用Python讀取圖片的畫素值,然後輸出到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
圖片轉換

有了色值轉換函式,接下來要做的操作就是逐行讀取圖片的 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畫畫

原文來自:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2852730/,如需轉載,請註明出處,否則將追究法律責任。