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

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

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

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

准备

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

$ pip3 install openpyxl 
$ pip3 install Pillow 
  • 1.
  • 2.

色值转换

从图片读取的像素块色值是 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 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.

图片转换

有了色值转换函数,接下来要做的操作就是逐行读取图片的 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() 
  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.

最后再来个入口函数,就大功告成啦~

if __name__ == '__main__'
    img_path = '/Users/xyz/Documents/tmp/03.png' 
    excel_path = '/Users/xyz/Documents/tmp/3.xlsx' 
    img2excel(img_path, excel_path) 
  • 1.
  • 2.
  • 3.
  • 4.

惊艳时刻

激动的心,颤抖的手,来看下最终效果咋样。

是不是觉得有那么一丝丝韵味呢...

总结

 

今天派森酱带大家一起实现了 Excel 像素画,小伙伴们可以发挥自己的想象,比如把女神的头像藏进 Excel 中然后发她,你猜女神会不会被惊艳到呢。

 

责任编辑:武晓燕 来源: Python技术
相关推荐

2021-05-25 10:05:39

Python模拟导弹代码

2020-12-17 10:23:41

死锁LinuxLockdep

2025-02-28 09:30:00

​DeepSeekDeepGEMMAI

2022-10-19 07:35:28

2015-07-30 09:20:26

微软Android Lau

2020-05-28 11:00:40

Flutter代码框架

2023-04-10 07:26:28

UseStateUseReducer

2019-02-12 11:07:49

2020-04-09 09:52:42

Python数据技术

2021-07-27 05:49:59

MySQL数据库中间件

2021-08-03 22:26:46

Go函数分页

2024-03-18 09:24:12

RocketMQ消息模型分布式

2012-05-10 10:04:00

IE9IE浏览器

2023-03-09 14:16:00

AIChatGPT

2019-08-09 15:07:33

TomcatJaegerSpringBoot

2023-05-25 10:03:40

2022-08-25 17:47:21

PythonExcel

2021-11-12 14:17:36

AI 6G人工智能

2023-06-05 12:41:52

研究AI

2023-11-06 06:52:51

点赞
收藏

51CTO技术栈公众号