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


Posted in Python onFebruary 15, 2022

导语:

用 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 中画画你知道吗的文章就介绍到这了,更多相关Python Excel画画内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
跟老齐学Python之有容乃大的list(1)
Sep 14 Python
django1.8使用表单上传文件的实现方法
Nov 04 Python
Python 数据结构之堆栈实例代码
Jan 22 Python
Python实现带参数与不带参数的多重继承示例
Jan 30 Python
python清除字符串中间空格的实例讲解
May 11 Python
pandas.DataFrame.to_json按行转json的方法
Jun 05 Python
Python判断是否json是否包含一个key的方法
Dec 31 Python
python3人脸识别的两种方法
Apr 25 Python
Pytorch 实现sobel算子的卷积操作详解
Jan 10 Python
Python dict的常用方法示例代码
Jun 23 Python
Python Opencv轮廓常用操作代码实例解析
Sep 01 Python
pycharm 实现光标快速移动到括号外或行尾的操作
Feb 05 Python
Python 恐龙跑跑小游戏实现流程
详解Python+OpenCV进行基础的图像操作
Appium中scroll和drag_and_drop根据元素位置滑动
Feb 15 #Python
python 远程执行命令的详细代码
Feb 15 #Python
python 详解turtle画爱心代码
python分分钟绘制精美地图海报
基于PyQT5制作一个桌面摸鱼工具
Feb 15 #Python
You might like
php异步多线程swoole用法实例
2014/11/14 PHP
适合PHP初学者阅读的4本经典书籍
2016/09/23 PHP
PHP数组的定义、初始化和数组元素的显示实现代码
2016/11/05 PHP
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
原生和jQuery的ajax用法详解
2017/01/23 Javascript
bootstrap的常用组件和栅格式布局详解
2017/05/02 Javascript
Element-ui table中过滤条件变更表格内容的方法
2018/03/02 Javascript
利用vue和element-ui设置表格内容分页的实例
2018/03/02 Javascript
nodeJS服务器的创建和重新启动的实现方法
2018/05/12 NodeJs
生产制造追溯系统之再说条码打印
2019/06/03 Javascript
koa2 从入门到精通(小结)
2019/07/23 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
[02:18]《我与DAC》之工作人员:为了热爱DOTA2的玩家们
2018/03/28 DOTA
[01:28]一分钟告诉你DOTA2 TI9不朽宝藏Ⅱ中有什么!
2019/07/09 DOTA
python登录QQ邮箱发信的实现代码
2013/02/10 Python
python3使用urllib模块制作网络爬虫
2016/04/08 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python requests 库请求带有文件参数的接口实例
2019/01/03 Python
python实现的爬取电影下载链接功能示例
2019/08/26 Python
python 解决mysql where in 对列表(list,,array)问题
2020/06/06 Python
Jmeter HTTPS接口测试证书导入过程图解
2020/07/22 Python
详解Python3 定义一个跨越多行的字符串的多种方法
2020/09/06 Python
利用Python pandas对Excel进行合并的方法示例
2020/11/04 Python
CSS3制作圆形滚动进度条动画的示例
2020/11/05 HTML / CSS
html5自动播放mov格式视频的实例代码
2020/01/14 HTML / CSS
英国领先的隐形眼镜在线供应商:Lenstore.co.uk
2019/11/24 全球购物
介绍一下write命令
2012/09/24 面试题
学院领导推荐信
2013/10/30 职场文书
外语专业毕业生个人的自荐信
2013/11/19 职场文书
个人先进事迹材料范文
2014/12/29 职场文书
结婚通知短信大全
2015/04/17 职场文书
关于艺术节的开幕致辞
2016/03/04 职场文书
MYSQL 的10大经典优化案例场景实战
2021/09/14 MySQL