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 文件与目录操作
Dec 24 Python
python实现排序算法
Feb 14 Python
Python使用Beautiful Soup包编写爬虫时的一些关键点
Jan 20 Python
Python中的__slots__示例详解
Jul 06 Python
Python扩展内置类型详解
Mar 26 Python
python实现狄克斯特拉算法
Jan 17 Python
解决Python 命令行执行脚本时,提示导入的包找不到的问题
Jan 19 Python
python实现websocket的客户端压力测试
Jun 25 Python
pytest中文文档之编写断言
Sep 12 Python
python ftplib模块使用代码实例
Dec 31 Python
opencv之颜色过滤只留下图片中的红色区域操作
Jun 05 Python
Python机器学习三大件之一numpy
May 10 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静态文件返回304技巧分享
2015/01/06 PHP
PHP随机生成信用卡卡号的方法
2015/03/23 PHP
PHP session会话操作技巧小结
2016/09/27 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
2017/09/21 PHP
JavaScript中的Location地址对象
2008/01/16 Javascript
ExtJS 设置级联菜单的默认值
2010/06/13 Javascript
js ondocumentready onmouseover onclick onmouseout 样式
2010/07/22 Javascript
读jQuery之十 事件模块概述
2011/06/27 Javascript
Java 正则表达式学习总结和一些小例子
2012/09/13 Javascript
有关javascript的性能优化 (repaint和reflow)
2013/04/12 Javascript
js禁止页面刷新禁止用F5键刷新禁止右键的示例代码
2013/09/23 Javascript
Extjs4实现两个GridPanel之间数据拖拽功能具体方法
2013/11/21 Javascript
JavaScript中统计Textarea字数并提示还能输入的字符
2014/06/10 Javascript
JavaScript中的类与实例实现方法
2015/01/23 Javascript
jQuery的Ajax用户认证和注册技术实例教程(附demo源码)
2015/12/08 Javascript
AngularJS实践之使用NgModelController进行数据绑定
2016/10/08 Javascript
js数组操作方法总结(必看篇)
2016/11/22 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
Vue无限滑动周选择日期的组件的示例代码
2018/07/18 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
浅谈高大上的微信小程序中渲染html内容—技术分享
2018/10/25 Javascript
JS实现使用POST方式发送请求
2019/08/30 Javascript
uploadify插件实现多个图片上传并预览
2019/09/30 Javascript
Python3随机漫步生成数据并绘制
2018/08/27 Python
python获取微信小程序手机号并绑定遇到的坑
2018/11/19 Python
Python单元测试与测试用例简析
2019/11/09 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
HttpServlet类中的主要方法都有哪些?各自的作用是什么?
2014/03/16 面试题
自我介绍演讲稿
2014/01/15 职场文书
幼儿园教师岗位职责
2014/03/17 职场文书
产品质量保证书
2014/04/29 职场文书
我的大学四年规划书范文2014
2014/09/26 职场文书
如何写辞职信
2015/05/13 职场文书
党支部审查意见
2015/06/02 职场文书
读《推着妈妈去旅行》有感1500字
2019/10/15 职场文书