Python 居然可以在 Excel 中画画你知道吗

 更新时间:2022年02月15日 15:48:46   作者:迢迢x  
哈喽,哈喽~对于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画画内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3.6环境下安装freetype库和基本使用方法(推荐)

    python3.6环境下安装freetype库和基本使用方法(推荐)

    这篇文章主要介绍了python3.6环境下如何安装freetype库和基本使用方法,本文通过示例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • Python实现新型冠状病毒传播模型及预测代码实例

    Python实现新型冠状病毒传播模型及预测代码实例

    在本篇文章里小编给大家整理的是关于Python实现新型冠状病毒传播模型及预测代码内容,有兴趣的朋友们可以学习下。
    2020-02-02
  • 详解python数据结构和算法

    详解python数据结构和算法

    这篇文章主要介绍了python数据结构和算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-04-04
  • Python3.7安装pyaudio教程解析

    Python3.7安装pyaudio教程解析

    这篇文章主要介绍了Python3.7安装pyaudio教程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-07-07
  • pytorch 实现二分类交叉熵逆样本频率权重

    pytorch 实现二分类交叉熵逆样本频率权重

    这篇文章主要介绍了pytorch 实现二分类交叉熵逆样本频率权重的操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • python怎么对数字进行过滤

    python怎么对数字进行过滤

    在本篇内容中小编给大家整理的是关于python怎么对数字进行过滤的实例方法内容,需要的朋友们可以参考下。
    2020-07-07
  • Python参数、参数类型、位置参数、默认参数、可选参数举例详解

    Python参数、参数类型、位置参数、默认参数、可选参数举例详解

    这篇文章主要介绍了Python 3.13中函数参数的不同类型,包括位置参数、默认值参数、可变参数、关键字参数、命名关键字参数以及它们的组合使用规则,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-01-01
  • Django实现表单验证

    Django实现表单验证

    这篇文章主要为大家详细介绍了Django实现表单验证的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-09-09
  • 浅析Python 中整型对象存储的位置

    浅析Python 中整型对象存储的位置

    下面小编就为大家带来一篇浅析Python 中整型对象存储的位置。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-05-05
  • python如何给字典的键对应的值为字典项的字典赋值

    python如何给字典的键对应的值为字典项的字典赋值

    这篇文章主要介绍了python如何给字典的键对应的值为字典项的字典赋值,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07

最新评论