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 相关文章推荐
django 解决manage.py migrate无效的问题
May 27 Python
Python实现提取XML内容并保存到Excel中的方法
Sep 01 Python
使用python对excle和json互相转换的示例
Oct 23 Python
pandas重新生成索引的方法
Nov 06 Python
Django框架中间件(Middleware)用法实例分析
May 24 Python
numpy和pandas中数组的合并、拉直和重塑实例
Jun 28 Python
一行Python代码制作动态二维码的实现
Sep 09 Python
django 简单实现登录验证给你
Nov 06 Python
python tkinter 设置窗口大小不可缩放实例
Mar 04 Python
Python类的绑定方法和非绑定方法实例解析
Mar 04 Python
python文件操作seek()偏移量,读取指正到指定位置操作
Jul 05 Python
python工具快速为音视频自动生成字幕(使用说明)
Jan 27 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
discuz的php防止sql注入函数
2011/01/17 PHP
.htaccess文件保护实例讲解
2011/02/06 PHP
Linux下PHP连接Oracle数据库
2014/08/20 PHP
PHP编程实现csv文件导入mysql数据库的方法
2017/04/29 PHP
laravel实现按月或天或小时统计mysql数据的方法
2019/10/09 PHP
AngularJS入门教程之Scope(作用域)
2016/07/27 Javascript
easy ui datagrid 从编辑框中获取值的方法
2017/02/22 Javascript
vue.js指令v-model使用方法
2017/03/20 Javascript
JS实现的二叉树算法完整实例
2017/04/06 Javascript
javascript 玩转Date对象(实例讲解)
2017/07/11 Javascript
jQuery实现的简单图片轮播效果完整示例
2018/02/08 jQuery
js中apply和Math.max()函数的问题及区别介绍
2018/03/27 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
Node.JS发送http请求批量检查文件中的网页地址、服务是否有效可用
2019/11/20 Javascript
JavaScript队列结构Queue实现过程解析
2020/03/07 Javascript
[04:16]DOTA2英雄梦之声_第09期_斧王
2014/06/21 DOTA
详解numpy矩阵的创建与数据类型
2019/10/18 Python
Python Sympy计算梯度、散度和旋度的实例
2019/12/06 Python
使用Python+selenium实现第一个自动化测试脚本
2020/03/17 Python
python3通过udp实现组播数据的发送和接收操作
2020/05/05 Python
Python random模块的使用示例
2020/10/10 Python
python爬虫利器之requests库的用法(超全面的爬取网页案例)
2020/12/17 Python
旅游管理毕业生自荐信
2013/11/05 职场文书
物理研修随笔感言
2014/02/14 职场文书
法律进学校实施方案
2014/03/15 职场文书
餐饮投资计划书
2014/04/25 职场文书
倡议书的写法
2014/08/30 职场文书
2014大学生职业生涯规划书最新范文
2014/09/13 职场文书
支部书记四风问题对照检查材料
2014/10/04 职场文书
音乐会主持人开场白
2015/05/28 职场文书
《小摄影师》教学反思
2016/02/18 职场文书
关于公司年会的开幕词
2016/03/04 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
Python包argparse模块常用方法
2021/06/04 Python
Python 中 Shutil 模块详情
2021/11/11 Python
MyBatis在注解上使用动态SQL方式(@select使用if)
2022/07/07 Java/Android