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的绘图工具matplotlib使用实例
Jul 03 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
Python文件与文件夹常见基本操作总结
Sep 19 Python
Python爬虫DNS解析缓存方法实例分析
Jun 02 Python
python 读取文本文件的行数据,文件.splitlines()的方法
Jul 12 Python
PyQt5实现简易计算器
May 30 Python
Flask框架钩子函数功能与用法分析
Aug 02 Python
Python字典推导式将cookie字符串转化为字典解析
Aug 10 Python
django ListView的使用 ListView中获取url中的参数值方式
Mar 27 Python
django有哪些好处和优点
Sep 01 Python
超级详细实用的pycharm常用快捷键
May 12 Python
Python matplotlib 利用随机函数生成变化图形
Apr 26 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的分页功能
2007/03/21 PHP
EarthLiveSharp中cloudinary的CDN图片缓存自动清理python脚本
2017/04/04 PHP
网站被恶意镜像怎么办 php一段代码轻松搞定(全面版)
2018/10/23 PHP
xss文件页面内容读取(解决)
2010/11/28 Javascript
jquery 使用点滴函数代码
2011/05/20 Javascript
javascript中数组的concat()方法使用介绍
2013/12/18 Javascript
JQuery使用$.ajax和checkbox实现下次不在通知功能
2015/04/16 Javascript
SpringMVC返回json数据的三种方式
2015/12/10 Javascript
快速获取/设置iframe内对象元素的几种js实现方法
2016/05/20 Javascript
javascript轮播图算法
2016/10/21 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
JS jQuery使用正则表达式去空字符的简单实现代码
2017/05/20 jQuery
vue引入js数字小键盘的实现代码
2018/05/14 Javascript
angular4自定义组件非input元素实现ngModel双向数据绑定的方法
2018/12/28 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
uniapp实现可以左右滑动导航栏
2020/10/21 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
pymongo给mongodb创建索引的简单实现方法
2015/05/06 Python
python简单猜数游戏实例
2015/07/09 Python
python算法演练_One Rule 算法(详解)
2017/05/17 Python
基于python中的TCP及UDP(详解)
2017/11/06 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
Python学习笔记之lambda表达式用法详解
2019/08/08 Python
python dict乱码如何解决
2020/06/07 Python
详解win10下pytorch-gpu安装以及CUDA详细安装过程
2021/01/28 Python
使用Html5实现异步上传文件,支持跨域,带有上传进度条
2016/09/17 HTML / CSS
全球最大的服务市场:Fiverr
2017/01/03 全球购物
莱德杯高尔夫欧洲官方商店:Ryder Cup Shop
2019/08/14 全球购物
七年级数学教学反思
2014/01/22 职场文书
人力资源管理专业自荐书范文
2014/02/10 职场文书
行政人事专员岗位职责
2014/03/05 职场文书
企业节能减排实施方案
2014/03/19 职场文书
初中信息技术教学计划
2015/01/22 职场文书
保险公司反洗钱宣传活动总结
2015/05/08 职场文书
2015年财务经理工作总结
2015/05/13 职场文书
新的CSS 伪类函数 :is() 和 :where()示例详解
2022/08/05 HTML / CSS