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获取apk文件URL地址实例
Nov 01 Python
Python使用PyGreSQL操作PostgreSQL数据库教程
Jul 30 Python
使用Django的模版来配合字符串翻译工作
Jul 27 Python
Python复制Word内容并使用格式设字体与大小实例代码
Jan 22 Python
Python实现PS滤镜Fish lens图像扭曲效果示例
Jan 29 Python
对python中Matplotlib的坐标轴的坐标区间的设定实例讲解
May 25 Python
详解Django+Uwsgi+Nginx的生产环境部署
Jun 25 Python
Python对ElasticSearch获取数据及操作
Apr 24 Python
Python 存取npy格式数据实例
Jul 01 Python
python如何设置静态变量
Sep 07 Python
Python3如何使用tabulate打印数据
Sep 25 Python
Python实现EM算法实例代码
Oct 04 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
PHP静态类
2006/11/25 PHP
php抓取页面与代码解析 推荐
2010/07/23 PHP
PHP开发框架Laravel数据库操作方法总结
2014/09/03 PHP
php静态文件生成类实例分析
2015/01/03 PHP
常见的四种POST 提交数据方式(小总结)
2015/10/08 PHP
PHP实现连接设备、通讯和发送命令的方法
2015/10/13 PHP
JavaScript For Beginners(转载)
2007/01/05 Javascript
jQuery中(function($){})(jQuery)详解
2015/07/15 Javascript
开启Javascript中apply、call、bind的用法之旅模式
2015/10/28 Javascript
jQuery中each()、find()和filter()等节点操作方法详解(推荐)
2016/05/25 Javascript
Bootstrap编写导航栏和登陆框
2016/05/30 Javascript
checkbox批量选中,获取选中项的值的简单实例
2016/06/28 Javascript
工作中常用的js、jquery自定义扩展函数代码片段汇总
2016/12/22 Javascript
javascript中的面向对象
2017/03/30 Javascript
ES6生成器用法实例分析
2017/04/10 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
LayUi中接口传数据成功,表格不显示数据的解决方法
2018/08/19 Javascript
Vue中使用sass实现换肤功能
2018/09/07 Javascript
Django-Rest-Framework 权限管理源码浅析(小结)
2018/11/12 Python
在python里从协程返回一个值的示例
2019/02/19 Python
python使用opencv在Windows下调用摄像头实现解析
2019/11/26 Python
python实现一个点绕另一个点旋转后的坐标
2019/12/04 Python
python_mask_array的用法
2020/02/18 Python
使用keras时input_shape的维度表示问题说明
2020/06/29 Python
python海龟绘图之画国旗实例代码
2020/11/11 Python
在c#中using和new这两个关键字有什么意义
2013/05/19 面试题
面向对象设计的原则是什么
2013/02/13 面试题
高级技校毕业生自荐信
2013/11/18 职场文书
小学教师评语大全
2014/04/23 职场文书
环保倡议书格式范文
2014/05/14 职场文书
个人综合鉴定材料
2014/05/23 职场文书
音乐之声音乐广播稿
2014/09/10 职场文书
大学生档案自我鉴定(2篇)
2014/10/14 职场文书
vue打包时去掉所有的console.log
2022/04/10 Vue.js
Python爬虫 简单介绍一下Xpath及使用
2022/04/26 Python