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中enumerate的用法实例解析
Aug 18 Python
python使用mailbox打印电子邮件的方法
Apr 30 Python
详解Python中的序列化与反序列化的使用
Jun 30 Python
解决python3中自定义wsgi函数,make_server函数报错的问题
Nov 21 Python
Pandas 对Dataframe结构排序的实现方法
Apr 10 Python
PyCharm代码整体缩进,反向缩进的方法
Jun 25 Python
Python从Excel中读取日期一列的方法
Nov 28 Python
Python3 使用cookiejar管理cookie的方法
Dec 28 Python
django ajax发送post请求的两种方法
Jan 05 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
python 爬取B站原视频的实例代码
Sep 09 Python
利用python汇总统计多张Excel
Sep 22 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 实用代码收集
2010/01/22 PHP
php 变量引用与变量销毁机制详细介绍
2016/12/05 PHP
如何运行/调试你的PHP代码
2020/10/23 PHP
新浪刚打开页面出来的全屏广告代码
2007/04/02 Javascript
一个符号插入器 中用到的js代码
2007/09/04 Javascript
基于jquery的direction图片渐变动画效果
2010/05/24 Javascript
jquery通过a标签删除table中的一行的代码
2013/12/02 Javascript
Bootstrap表单控件使用方法详解
2017/01/11 Javascript
addeventlistener监听scroll跟touch(实例讲解)
2017/08/04 Javascript
浅谈Vuejs Prop基本用法
2017/08/17 Javascript
js 显示日期时间的实例(时间过一秒加1)
2017/10/25 Javascript
Vue官方文档梳理之全局配置
2017/11/22 Javascript
webpack写jquery插件的环境配置
2017/12/21 jQuery
JS加密插件CryptoJS实现的Base64加密示例
2020/08/16 Javascript
微信小程序与公众号卡券/会员打通的问题
2019/07/25 Javascript
JS实现水平遍历和嵌套递归操作示例
2019/08/15 Javascript
vue 路由懒加载中给 Webpack Chunks 命名的方法
2020/04/24 Javascript
js+canvas实现图片格式webp/png/jpeg在线转换
2020/08/22 Javascript
javascript操作向表格中动态加载数据
2020/08/27 Javascript
python使用xmlrpc实例讲解
2013/12/17 Python
使用Python3中的gettext模块翻译Python源码以支持多语言
2015/03/31 Python
python脚本监控docker容器
2016/04/27 Python
python中异常报错处理方法汇总
2016/11/20 Python
Python中py文件引用另一个py文件变量的方法
2018/04/29 Python
Python实现Event回调机制的方法
2019/02/13 Python
django-利用session机制实现唯一登录的例子
2020/03/16 Python
Python3开发环境搭建详细教程
2020/06/18 Python
Python 字符串池化的前提
2020/07/03 Python
Python实现http接口自动化测试的示例代码
2020/10/09 Python
python实现按日期归档文件
2021/01/30 Python
CSS3绘制不规则图形的一些方法示例
2015/11/07 HTML / CSS
社区平安建设方案
2014/05/25 职场文书
与美同行演讲稿
2014/09/13 职场文书
教师批评与自我批评心得体会
2014/10/16 职场文书
2015年专项整治工作总结
2015/04/03 职场文书
停电放假通知
2015/04/14 职场文书