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入门篇之列表和元组
Oct 17 Python
Python实现登录人人网并抓取新鲜事的方法
May 11 Python
MAC中PyCharm设置python3解释器
Dec 15 Python
更换Django默认的模板引擎为jinja2的实现方法
May 28 Python
对python字典元素的添加与修改方法详解
Jul 06 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
详解Python3中的迭代器和生成器及其区别
Oct 09 Python
python 循环数据赋值实例
Dec 02 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
tensorflow2.0与tensorflow1.0的性能区别介绍
Feb 07 Python
详解用selenium来下载小姐姐图片并保存
Jan 26 Python
python和opencv构建运动检测器的实现
Mar 03 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
WampServer下安装多个版本的PHP、mysql、apache图文教程
2015/01/07 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP chunk_split()函数讲解
2019/02/12 PHP
JavaScript下申明对象的几种方法小结
2008/10/02 Javascript
JavaScript全局函数使用简单说明
2011/03/11 Javascript
js简单实现删除记录时的提示效果
2013/12/05 Javascript
ECMA5数组的新增方法有哪些及forEach()模仿实现
2015/11/03 Javascript
jQuery中的siblings用法实例分析
2015/12/24 Javascript
Javascript中常用的检测方法小结
2016/10/08 Javascript
Javascript使用function创建类的两种方法(推荐)
2016/11/19 Javascript
AngularJS学习笔记之表单验证功能实例详解
2017/07/06 Javascript
详解React 16 中的异常处理
2017/07/28 Javascript
JQuery元素快速查找与操作
2018/04/22 jQuery
详解webpack的proxyTable无效的解决方案
2018/06/15 Javascript
基于vue如何发布一个npm包的方法步骤
2019/05/15 Javascript
layui的布局和表格的渲染以及动态生成表格的方法
2019/09/18 Javascript
countup.js实现数字动态叠加效果
2019/10/17 Javascript
Vue实现导航栏菜单
2020/08/19 Javascript
在Django中进行用户注册和邮箱验证的方法
2016/05/09 Python
Python元组拆包和具名元组解析实例详解
2018/03/26 Python
pytorch 可视化feature map的示例代码
2019/08/20 Python
浅谈python累加求和+奇偶数求和_break_continue
2020/02/25 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
MONNIER Frères英国官网:源自巴黎女士奢侈品配饰电商平台
2018/12/06 全球购物
C#中有没有运算符重载?能否使用指针?
2014/05/05 面试题
行政人事岗位职责
2014/03/17 职场文书
阳光体育活动总结
2014/04/30 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
跳蚤市场口号
2014/06/13 职场文书
纪检干部先进事迹材料
2014/08/23 职场文书
导航工程专业自荐信
2014/09/02 职场文书
王兆力在市委党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
同意落户证明
2015/06/19 职场文书
《思路决定出路》读后感3篇
2019/12/11 职场文书
教你利用Nginx 服务搭建子域环境提升二维地图加载性能的步骤
2021/09/25 Servers