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对比C语言的编程思想差异
Aug 30 Python
总结网络IO模型与select模型的Python实例讲解
Jun 27 Python
Python实现按中文排序的方法示例
Apr 25 Python
Django 浅谈根据配置生成SQL语句的问题
May 29 Python
Python在for循环中更改list值的方法【推荐】
Aug 17 Python
python 通过可变参数计算n个数的乘积方法
Jun 13 Python
python取余运算符知识点详解
Jun 27 Python
使用python图形模块turtle库绘制樱花、玫瑰、圣诞树代码实例
Mar 16 Python
浅析Python 抽象工厂模式的优缺点
Jul 13 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
重构Python代码的六个实例
Nov 25 Python
python多次执行绘制条形图
Apr 20 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 MsSql server时遇到的中文编码问题
2009/06/11 PHP
生成随机字符串和验证码的类的PHP实例
2013/12/24 PHP
php实例分享之html转为rtf格式
2014/06/02 PHP
兼容FireFox 的 js 日历 支持时间的获取
2009/03/04 Javascript
js href的用法
2010/05/13 Javascript
关于跨站脚本攻击问题
2011/12/22 Javascript
js文本框输入点回车触发确定兼容IE、FF等
2013/11/19 Javascript
css+js实现部分区域高亮可编辑遮罩层
2014/03/04 Javascript
了不起的node.js读书笔记之node.js中的特性
2014/12/22 Javascript
利用jQuery和CSS将背景图片拉伸
2015/10/16 Javascript
JavaScript中英文字符长度统计方法示例【按照中文占2个字符】
2017/01/17 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
2017/02/10 Javascript
COM组件中调用JavaScript函数详解及实例
2017/02/23 Javascript
JS点击动态添加标签、删除指定标签的代码
2018/04/18 Javascript
原生JS封装_new函数实现new关键字的功能
2018/08/12 Javascript
Vue源码中要const _toStr = Object.prototype.toString的原因分析
2018/12/09 Javascript
详解Jest结合Vue-test-utils使用的初步实践
2019/06/27 Javascript
详解微信小程序图片地扯转base64解决方案
2019/08/18 Javascript
layui 富文本图片上传接口与普通按钮 文件上传接口的例子
2019/09/23 Javascript
Vue事件处理原理及过程详解
2020/03/11 Javascript
[01:36:57]【09DOTA2第一视角】小骷髅
2014/04/16 DOTA
python处理圆角图片、圆形图片的例子
2014/04/25 Python
浅谈python迭代器
2017/11/08 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python编写简单端口扫描器
2019/09/04 Python
python  ceiling divide 除法向上取整(或小数向上取整)的实例
2019/12/27 Python
德国宠物用品、宠物食品及水族馆网上商店:ZooRoyal
2017/07/09 全球购物
德国最大的婴儿用品网上商店:Kidsroom.de(支持中文)
2020/09/02 全球购物
新大陆软件面试题
2016/11/24 面试题
通信工程专业个人找工作求职信范文
2013/09/21 职场文书
土木工程专业推荐信
2014/02/19 职场文书
爱我中华教学反思
2014/04/28 职场文书
倡议书作文
2015/01/19 职场文书
上市公司财务总监岗位职责
2015/04/03 职场文书
学习十八大的感悟
2015/08/11 职场文书
详解Flutter自定义应用程序内键盘的实现方法
2022/06/14 Java/Android