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压缩文件夹内所有文件为zip文件的方法
Jun 20 Python
python脚本设置系统时间的两种方法
Feb 21 Python
Python实现合并两个有序链表的方法示例
Jan 31 Python
Django中如何防范CSRF跨站点请求伪造攻击的实现
Apr 28 Python
Python利用WMI实现ping命令的例子
Aug 14 Python
python中resample函数实现重采样和降采样代码
Feb 25 Python
Python实现疫情通定时自动填写功能(附代码)
May 27 Python
Python使用OpenPyXL处理Excel表格
Jul 02 Python
详解python中的lambda与sorted函数
Sep 04 Python
Python爬虫之Selenium下拉框处理的实现
Dec 04 Python
python读取excel数据并且画图的实现示例
Feb 08 Python
Python中的变量与常量
Nov 11 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数组一对一替换实现代码
2012/08/31 PHP
以实例全面讲解PHP中多进程编程的相关函数的使用
2015/08/18 PHP
PHP单链表的实现代码
2016/07/05 PHP
PHPstorm激活码2020年5月13日亲测有效
2020/09/17 PHP
精选的10款用于构建良好易用性网站的jQuery插件
2011/01/23 Javascript
Javascript BOM学习小结(六)
2015/11/26 Javascript
Angular 输入框实现自定义验证功能
2017/02/19 Javascript
浅谈原生JS实现jQuery的animate()动画示例
2017/03/08 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
JavaScript设计模式之调停者模式实例详解
2018/02/03 Javascript
JS实现滑动拼图验证功能完整示例
2020/03/29 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
探索Python3.4中新引入的asyncio模块
2015/04/08 Python
python创建列表并给列表赋初始值的方法
2015/07/28 Python
利用Python3分析sitemap.xml并抓取导出全站链接详解
2017/07/04 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
python 模拟创建seafile 目录操作示例
2019/09/26 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
CSS3实现渐变背景兼容问题
2020/05/06 HTML / CSS
英国设计的甲板鞋和船鞋:Chatham
2018/12/06 全球购物
CHARLES & KEITH澳大利亚官网:新加坡时尚品牌
2019/01/22 全球购物
女孩每月服装订阅盒:kidpik
2019/04/17 全球购物
大课间体育活动方案
2014/03/12 职场文书
安全保证书范文
2014/04/29 职场文书
食品安全承诺书范文
2014/08/29 职场文书
车辆委托书范本
2014/10/05 职场文书
2014年小学英语教师工作总
2014/12/03 职场文书
鼋头渚导游词
2015/02/05 职场文书
佛光寺导游词
2015/02/10 职场文书
我们的节日重阳节活动总结
2015/03/24 职场文书
保研专家推荐信范文
2015/03/25 职场文书
三八妇女节致辞
2015/07/31 职场文书
三下乡活动心得体会
2016/01/23 职场文书
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript
win7配置本地ftp服务器的图文教程
2022/08/05 Servers