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二分法实现实例
Nov 21 Python
Python的加密模块md5、sha、crypt使用实例
Sep 28 Python
Python itertools模块详解
May 09 Python
Python中集合的内建函数和内建方法学习教程
Aug 19 Python
Python打印输出数组中全部元素
Mar 13 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
使用python的pexpect模块,实现远程免密登录的示例
Feb 14 Python
pytorch 加载(.pth)格式的模型实例
Aug 20 Python
浅谈python中统计计数的几种方法和Counter详解
Nov 07 Python
使用 pytorch 创建神经网络拟合sin函数的实现
Feb 24 Python
Django中的AutoField字段使用
May 18 Python
Python3基于print打印带颜色字符串
Jul 06 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 empty函数判断mysql表单是否为空
2010/04/12 PHP
PHP 第二节 数据类型之字符串类型
2012/04/28 PHP
ThinkPHP连接数据库及主从数据库的设置教程
2014/08/22 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
PHP文件操作实例总结【文件上传、下载、分页】
2018/12/08 PHP
原生js拖拽(第一课 未兼容)拖拽思路
2013/03/29 Javascript
纯css+js写的一个简单的tab标签页带样式
2014/01/28 Javascript
当达到输入长度时表单自动切换焦点
2014/04/06 Javascript
JS获取时间的方法
2015/01/21 Javascript
JS实现带圆弧背景渐变效果的导航菜单代码
2015/10/13 Javascript
angular forEach方法遍历源码解读
2017/01/25 Javascript
详解Vue2.0之去掉组件click事件的native修饰
2017/04/20 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
vue.js 左侧二级菜单显示与隐藏切换的实例代码
2017/05/23 Javascript
webpack-dev-server远程访问配置方法
2018/02/22 Javascript
微信小程序导航栏滑动定位功能示例(实现CSS3的positionsticky效果)
2019/01/24 Javascript
JavaScript数据结构与算法之二叉树实现查找最小值、最大值、给定值算法示例
2019/03/01 Javascript
layui 弹出删除确认界面的实例
2019/09/06 Javascript
[48:38]DOTA2亚洲邀请赛 3.31 小组赛 B组 Mineski vs Secret
2018/03/31 DOTA
[49:07]VGJ.T vs Optic Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
Python中的zip函数使用示例
2015/01/29 Python
python中os模块详解
2016/10/14 Python
python去除字符串中的换行符
2017/10/11 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
python3.X 抓取火车票信息【修正版】
2018/06/19 Python
Python爬虫抓取指定网页图片代码实例
2020/07/24 Python
Pycharm自带Git实现版本管理的方法步骤
2020/09/18 Python
Pytorch如何切换 cpu和gpu的使用详解
2021/03/01 Python
美国珠宝网上商店:Jeulia
2016/09/01 全球购物
校园创业策划书
2014/01/14 职场文书
宣传保护环境的公益广告词
2014/03/13 职场文书
五四青年节演讲稿
2014/05/26 职场文书
理财计划书
2014/08/14 职场文书
旅行社优秀创业计划书
2014/08/16 职场文书
煤矿安全保证书
2015/02/27 职场文书
投资入股协议书
2016/03/22 职场文书