美文网首页
神操作!居然有人用 Python 在 Excel 中画画

神操作!居然有人用 Python 在 Excel 中画画

作者: 程序员小西 | 来源:发表于2022-03-07 17:05 被阅读0次

    十字绣大家都知道吧,今天咱们来玩个电子版的十字绣。

    用 Python 读取图片的像素值,然后输出到 Excel 表格中,最终形成一幅像素画,也就是电子版的十字绣了。

    准备

    既然要读取图片,那就需要用到 Pillow 库,操作 Excel 需要用到 openpyxl 库,先把这两个库安装好。

    $ pip3 install openpyxl

    $ pip3 install Pillow

    色值转换

    从图片读取的像素块色值是 RGB 值,而 openpyxl 向 Excel cell 内填充颜色是十六进制色值,因此咱们先写一个 RGB 和十六进制色值转换的一个函数。

    defrgb_to_hex(rgb):

    rgb = rgb.split(',')

    color =''

    foriinRGB:

    num = int(i)

    color += str(hex(num))[-2:].replace('x','0').upper()

    returncolor

    图片转换

    有了色值转换函数,接下来要做的操作就是逐行读取图片的 RGB 色值,之后将 RGB 色值转换为十六进制色值填充到 Excel 的 cell 中即可。

    defimg2excel(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"]

    forwinrange(img_width):

    forhinrange(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

    foriinrange(1, sheet.max_row +1):

    sheet.row_dimensions[i].height = cell_height

    foriinrange(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 中画画

          本文链接:https://www.haomeiwen.com/subject/varmrrtx.html