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中的localtime()方法使用详解
May 22 Python
在Django中管理Users和Permissions以及Groups的方法
Jul 23 Python
Python连接PostgreSQL数据库的方法
Nov 28 Python
DataFrame中的object转换成float的方法
Apr 10 Python
python卸载后再次安装遇到的问题解决
Jul 10 Python
python全局变量引用与修改过程解析
Jan 07 Python
python网络编程:socketserver的基本使用方法实例分析
Apr 09 Python
Django实现celery定时任务过程解析
Apr 21 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
paramiko使用tail实时获取服务器的日志输出详解
Dec 06 Python
Python实现拼音转换
Jun 07 Python
Python卷积神经网络图片分类框架详解分析
Nov 07 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数组去重复数据示例
2014/02/25 PHP
PHP获取表单数据与HTML嵌入PHP脚本的实现
2017/02/09 PHP
ThinkPHP框架实现数据增删改
2017/05/07 PHP
PHP空值检测函数与方法汇总
2017/11/19 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
PHP whois查询类定义与用法示例
2019/04/03 PHP
js调试工具 Javascript Debug Toolkit 2.0.0版本发布
2008/12/02 Javascript
前台js调用后台方法示例
2013/12/02 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
5种处理js跨域问题方法汇总
2014/12/04 Javascript
Javascript中的arguments与重载介绍
2015/03/15 Javascript
12种JavaScript常用的MVC框架比较分析
2015/11/16 Javascript
微信小程序使用image组件显示图片的方法【附源码下载】
2017/12/08 Javascript
详解vue 计算属性与方法跟侦听器区别(面试考点)
2018/04/23 Javascript
原生JS实现简单的倒计时功能示例
2018/08/30 Javascript
浅谈vue权限管理实现及流程
2020/04/23 Javascript
将Django使用的数据库从MySQL迁移到PostgreSQL的教程
2015/04/11 Python
Pycharm编辑器技巧之自动导入模块详解
2017/07/18 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python递归下载文件夹下所有文件
2019/08/31 Python
flask框架渲染Jinja模板与传入模板变量操作详解
2020/01/25 Python
python 决策树算法的实现
2020/10/09 Python
python中PyQuery库用法分享
2021/01/15 Python
Python日志打印里logging.getLogger源码分析详解
2021/01/17 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
俄罗斯购买自行车网站:Vamvelosiped
2021/01/29 全球购物
下列程序在32位linux或unix中的结果是什么
2015/01/26 面试题
大学生求职中的自我评价
2013/10/01 职场文书
教师的实习自我鉴定
2013/12/17 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
岳父生日宴会答谢词
2014/01/13 职场文书
家长会主持词
2014/03/26 职场文书
个人委托书范本
2014/04/02 职场文书
公司董事任命书
2015/09/21 职场文书
《巨人的花园》教学反思
2016/02/19 职场文书
python绘制云雨图raincloud plot
2022/08/05 Python