如何用Python中19行代码把照片写入到Excel中

 更新时间:2022年02月24日 08:50:01   作者:Carl_奕然  
这篇文章主要介绍了如何利用Python3中的19行代码把照片写入到Excel中,文章内容实现的不是截取一张图片,粘贴到excel,而是通过像素写入到excel中,需要的朋友可以参考一下

1、前言

这里说的,不是截取一张图片,粘贴到excel;而是通过像素写入到excel中,下面来看看具体的实现过程吧

2、代码实战

2.1 思路

我们今天要分享的,是把图片写入到excel中,

我们来捋一下思路:

  • 准备源图片,目标excel
  • 通过Pillow 来读图片的取像素(RGB);
  • 通过openpyxlexcel cell内填充十六进制色值;
  • 最后把转换的RGB像素直接写入到excel中;
  • 说到这里,就们就来分步实现。

2.2 文件准备

需要写入而Excel的源图片:

2.3 实战

安装:

本次需要用到两个模块: Pillow openpyxl

老规矩, pip 方式安装:

pip install Pillow 
pip install openpyxl 

2.4 色值转换

由于 图片读取的像素是RGB值,而excel是十六进制写入,
所以需要定义一个RGB与十六进制转换的函数

'''
定义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

2.5 图片转换

此操作是逐行读取图片的 RGB 色值,再将 RGB 色值转换为十六进制色值填充到 Excel 的 cell 中。

逐行读取图片中的RGB色值,再将RGB色值转换十六进制,填充到excel中:

def img_to_excel(img_path,excel_path):
    #读取源图片
    img_src = Image.open(img_path)
    #设置图片宽高
    img_width = img_src.size[0]
    img_hight = img_src.size[1]

    #图片加载
    str_strlist = img_src.load()
    #获取当前的excel文件
    wb = openpyxl.Workbook()
    #保存文件
    wb.save(excel_path)
    #打开excel_path 下的excel文件,并写入信息
    wb = openpyxl.load_workbook(excel_path)
    cell_width,cell_height = 1.0,1.0

    #设置excel的写入页
    sheet = wb['Sheet']

    #循环图片的高与宽,并存入
    for w in range(img_width):
        for h in range(img_hight):
            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

    #循环遍历row,让其全部写入
    for i in range(1,sheet.max_row + 1):
        sheet.row_dimensions[i].height = cell_height
    #循环遍历column,让其全部写入
    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()

2.6 代码整合

import  openpyxl
from openpyxl.styles import PatternFill
from openpyxl.utils import  get_column_letter
from PIL import Image,ImageFont,ImageDraw,ImageColor


'''
色值转换:
从图片读取的像素块色值是 RGB 值,
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


'''
图片转换:
逐行读取图片中的RGB色值,再将RGB色值转换十六进制,填充到excel中
'''

def img_to_excel(img_path,excel_path):
    #读取源图片
    img_src = Image.open(img_path)
    #设置图片宽高
    img_width = img_src.size[0]
    img_hight = img_src.size[1]

    #图片加载
    str_strlist = img_src.load()
    #获取当前的excel文件
    wb = openpyxl.Workbook()
    #保存文件
    wb.save(excel_path)
    #打开excel_path 下的excel文件,并写入信息
    wb = openpyxl.load_workbook(excel_path)
    cell_width,cell_height = 1.0,1.0

    #设置excel的写入页
    sheet = wb['Sheet']

    #循环图片的高与宽,并存入
    for w in range(img_width):
        for h in range(img_hight):
            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

    #循环遍历row,让其全部写入
    for i in range(1,sheet.max_row + 1):
        sheet.row_dimensions[i].height = cell_height
    #循环遍历column,让其全部写入
    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 = './queue.jgp'
    #保存excel地址
    excel_path = './queue.xlsx'
    #执行
    img_to_excel(img_path, excel_path)

2.7 运行结果

3、总结

这里提醒一下:
如果你的源图片很大,运行完成后,打开Excel会提示文件损坏,
因为Excel的行数有限,导致无法全部写完数据。

Excel报错详情:

xml报错详情:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"><logFileName>error254800_05.xml</logFileName><summary>在文件“D:\Project\img\king.xlsx”中检测到错误</summary><removedParts><removedPart>已删除的部件: 部件 /xl/styles.xml。 (样式)</removedPart></removedParts><repairedRecords><repairedRecord>已修复的记录: /xl/worksheets/sheet1.xml 部分的 单元格信息</repairedRecord></repairedRecords></recoveryLog>

到此这篇关于如何用Python中19行代码把照片写入到Excel中的文章就介绍到这了,更多相关Python3把照片写入到Excel中内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python FastAPI Sanic Tornado 与Golang Gin性能实战对比

    Python FastAPI Sanic Tornado 与Golang Gin性能实战对比

    本文将深入比较Python的FastAPI、Sanic、Tornado以及Golang的Gin框架的各种特性、性能表现以及适用场景,通过详实的性能测试和实际示例代码,将探讨它们在构建现代高性能应用中的优劣势,以便开发者根据需求做出明智的选择
    2024-01-01
  • 详解python中自定义超时异常的几种方法

    详解python中自定义超时异常的几种方法

    这篇文章主要介绍了详解python中自定义超时异常的几种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-07-07
  • 使用PyQt5编写一个简单的取色器

    使用PyQt5编写一个简单的取色器

    这篇文章主要为大家介绍了PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16进制颜色编码,希望对大家有所帮助
    2025-01-01
  • Python + selenium自动化环境搭建的完整步骤

    Python + selenium自动化环境搭建的完整步骤

    这篇文章主要给大家介绍了关于Python + selenium自动化环境搭建的相关资料,文中通过图文将实现的步骤一步步介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-05-05
  • Python googletrans库使用示例详解

    Python googletrans库使用示例详解

    googletrans是一个基于谷歌翻译API的Python库,支持多种语言的自动检测和翻译,提供了translate和detect方法,用于翻译文本和检测文本语言,通过简单的命令即可安装使用,适合需要实现多语言翻译功能的开发者
    2024-09-09
  • Python中Pickle模块和base64模块的使用解析

    Python中Pickle模块和base64模块的使用解析

    这篇文章主要介绍了Python中Pickle模块和base64模块的使用解析,pickle模块是python的标准模块,提供了对于python数据的序列化操作,可以将数据转换为bytes类型,其序列化速度比json模块要高,需要的朋友可以参考下
    2023-09-09
  • python高级特性简介

    python高级特性简介

    这篇文章主要介绍了python高级特性的相关内容,其中包括切片,迭代,列表生成式,生成器,迭代器,感兴趣的朋友可以了解下
    2020-08-08
  • django 通过url实现简单的权限控制的例子

    django 通过url实现简单的权限控制的例子

    今天小编就为大家分享一篇django 通过url实现简单的权限控制的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-08-08
  • python集合的新增元素方法整理

    python集合的新增元素方法整理

    在本篇文章里小编给大家整理了一篇关于python集合的新增元素方法整理内容,有需要的朋友们可以学习下。
    2020-12-12
  • 利用 Python 开发一个 Python 解释器

    利用 Python 开发一个 Python 解释器

    这篇文章主要介绍了利用 Python 开发一个 Python 解释器,在本文中,我们将设计一个可以执行算术运算的解释器。下面我们大家一起来看看吧</P><P>
    2022-01-01

最新评论