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每隔N秒运行指定函数的方法
Mar 16 Python
Python与Redis的连接教程
Apr 22 Python
Python实例一个类背后发生了什么
Feb 09 Python
基础的十进制按位运算总结与在Python中的计算示例
Jun 28 Python
python 中random模块的常用方法总结
Jul 08 Python
Django入门使用示例
Dec 12 Python
python numpy格式化打印的实例
May 14 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
Python设计模式之策略模式实例详解
Jan 21 Python
bluepy 一款python封装的BLE利器简单介绍
Jun 25 Python
浅谈keras中自定义二分类任务评价指标metrics的方法以及代码
Jun 11 Python
基于python实现删除指定文件类型
Jul 21 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新手上路(四)
2006/10/09 PHP
discuz authcode 经典php加密解密函数解析
2020/07/12 PHP
php实现cookie加密的方法
2015/03/10 PHP
Jquery上传插件 uploadify v3.1使用说明
2012/06/18 Javascript
javascript学习笔记(一) 在html中使用javascript
2012/06/18 Javascript
自己写了一个展开和收起的多更能型的js效果
2013/03/05 Javascript
jQuery实现类似淘宝购物车全选状态示例
2013/06/26 Javascript
使用jquery选择器如何获取父级元素、同级元素、子元素
2014/05/14 Javascript
jQuery实现友好的轮播图片特效
2015/01/12 Javascript
jquery实现树形菜单完整代码
2015/12/29 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
2016/01/12 Javascript
Jquery获取当前城市的天气信息
2016/08/05 Javascript
js 数组详细操作方法及解析合集
2018/06/01 Javascript
详解IOS微信上Vue单页面应用JSSDK签名失败解决方案
2018/11/14 Javascript
简单学习5种处理Vue.js异常的方法
2019/06/17 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
[04:56]经典回顾:前Ehome 与 前LGD
2015/02/26 DOTA
Python3里的super()和__class__使用介绍
2015/04/23 Python
解析Mac OS下部署Pyhton的Django框架项目的过程
2016/05/03 Python
Python基于Pymssql模块实现连接SQL Server数据库的方法详解
2017/07/20 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
在Pycharm中对代码进行注释和缩进的方法详解
2019/01/20 Python
Python 写入训练日志文件并控制台输出解析
2019/08/13 Python
Python实现线性判别分析(LDA)的MATLAB方式
2019/12/09 Python
python 实现屏幕录制示例
2019/12/23 Python
Cole Haan官方网站:美国时尚潮流品牌
2017/12/06 全球购物
GIVENCHY纪梵希官方旗舰店:高定彩妆与贵族护肤品
2018/04/16 全球购物
美国伴娘礼服商店:Evening Collective
2019/10/07 全球购物
数据库连接池的工作原理
2012/09/26 面试题
syb养殖创业计划书
2014/01/09 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
2019最新版火锅店的创业计划书 !
2019/07/12 职场文书
餐厅营销的秘密:为什么老顾客会流水?
2019/08/08 职场文书
建国70周年的心得体会(2篇)
2019/09/20 职场文书
Python os和os.path模块详情
2022/04/02 Python
ipad隐藏软件app图标方法
2022/04/19 数码科技