乐趣区

关于python:神操作居然有人用-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)

惊艳时刻

冲动的心,颤动的手,来看下最终成果咋样。

是不是感觉有那么一丝丝韵味呢 …

总结

明天带大家一起实现了 Excel 像素画,小伙伴们能够施展本人的设想,比方把女神的头像藏进 Excel 中而后发她,你猜女神会不会被惊艳到呢。

以上就是本次分享的所有内容,如果你感觉文章还不错,欢送关注公众号:Python 编程学习圈 ,每日干货分享,发送“J”还可支付大量学习材料,内容笼罩 Python 电子书、教程、数据库编程、Django,爬虫,云计算等等。或是返回编程学习网,理解更多编程技术常识。

退出移动版