如何用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中内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python3安装crypto出错及解决方法

    python3安装crypto出错及解决方法

    这篇文章主要介绍了python3安装crypto出错及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 跟老齐学Python之让人欢喜让人忧的迭代

    跟老齐学Python之让人欢喜让人忧的迭代

    跟一些比较牛X的程序员交流,经常听到他们嘴里冒出一个不标准的英文单词,而loop、iterate、traversal和recursion如果不在其内,总觉得他还不够牛X。当让,真正牛X的绝对不会这么说的,他们只是说“循环、迭代、遍历、递归”,然后再问“这个你懂吗?”。
    2014-10-10
  • Python 3.x读写csv文件中数字的方法示例

    Python 3.x读写csv文件中数字的方法示例

    在我们日常开发中经常需要对csv文件进行读写,下面这篇文章主要给大家介绍了关于Python 3.x读写csv文件中数字的相关资料,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。
    2017-08-08
  • Django url.py path name同一app下路由别名定义

    Django url.py path name同一app下路由别名定义

    这篇文章主要为大家介绍了Django url.py path name同一app下路由别名定义详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • Python 字符串操作实现代码(截取/替换/查找/分割)

    Python 字符串操作实现代码(截取/替换/查找/分割)

    这篇文章主要介绍了Python 字符串截取/替换/查找/分割等实现方法,需要的朋友可以参考下
    2013-06-06
  • 利用PyQt5生成过年春联

    利用PyQt5生成过年春联

    这篇文章主要介绍了如何利用PyQt5生成过年春联。通过在界面上输入春联的上、下批和横批汉字从而生成春联图像,最后将春联图片保存。需要的可以参考一下
    2022-01-01
  • python实现将pvr格式转换成pvr.ccz的方法

    python实现将pvr格式转换成pvr.ccz的方法

    这篇文章主要介绍了python实现将pvr格式转换成pvr.ccz的方法,涉及Python实现格式转换的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-04-04
  • 详解Python3.6安装psutil模块和功能简介

    详解Python3.6安装psutil模块和功能简介

    这篇文章主要介绍了详解Python3.6安装psutil模块和功能简介,详细的介绍了安装psutil模块和该模块的使用,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05
  • Python语法糖遍历列表时删除元素方法示例详解

    Python语法糖遍历列表时删除元素方法示例详解

    这篇文章主要为大家介绍了Python语法糖遍历列表时删除元素详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • Python使用random模块实现掷骰子游戏的示例代码

    Python使用random模块实现掷骰子游戏的示例代码

    这篇文章主要介绍了Python使用random模块实现掷骰子游戏的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-04-04

最新评论