使用Python实现的Excel像素画

简介:本项目主要使用python语言,将图片转为 Excel,图片中的每一个像素转化为 Excel 中的每一个单元格。主要使用pillow和xlsxwriter这两个模块。项目使用一个python文件即可。

一:项目功能和流程介绍

项目的主要功能:就是将一张人脸图像,画在Excel表格上,图片的每一个像素点对应Excel的一个格子,俗称像素画。

流程:

  • 创建 Excel 表,并设置行高和列宽
  • 打开图片
  • 遍历图片每一个像素点
  • 提取每个像素点的颜色
  • 颜色填充对应的单元格

注意:

  • 图片尺寸过大:进行缩放
  • 颜色过多(Excel 不支持):减少颜色

模块:

  • pillow:图像处理库
  • xlsxwriter:创建 Excel 文件的模块

 二:主要代码及运行结果

 首先在项目下创建一个python文件,命名为:pricture_to_xlsx.py。

from PIL import Image  # 导入PIL库中的Image模块
import xlsxwriter  # 导入xlsxwriter库

DEFAULT_EXCEL_NAME = 'nic.xlsx'  # 默认的Excel文件名
DEFAULT_MAX_WIDTH = 500  # 默认最大宽度
COLOR_REDUCE_LEVEL = 5  # 颜色减少级别


def image_to_excel(pic_file, output_file=DEFAULT_EXCEL_NAME, max_width=DEFAULT_MAX_WIDTH):
    # 检查传入参数类型是否正确
    if not isinstance(pic_file, str) or not isinstance(output_file, str):
        print("参数错误,请检查传入的参数类型")
        return

    # 打开图片并调整大小
    img = Image.open(pic_file)  # 使用PIL库打开传入的图片文件
    img_height = img.height  # 获取图片高度
    img_width = img.width  # 获取图片宽度
    if img.width > max_width:  # 如果图片宽度超过最大宽度
        img_height = int(max_width / img_width * img_height)  # 根据比例调整高度
        img_width = max_width  # 将宽度设为最大宽度
        img = img.resize((img_width, img_height))  # 调整图片大小

    # 创建 Excel 表,并设置行高和列宽
    workbook = xlsxwriter.Workbook(output_file)  # 创建一个Excel文件
    worksheet = workbook.add_worksheet()  # 在Excel文件中添加一个工作表
    worksheet.set_default_row(9)  # 设置默认行高
    worksheet.set_column(0, img_width, width=1)  # 设置列宽

    # 遍历图片每一个像素点
    for x in range(img_width):  # 遍历宽度
        for y in range(img_height):  # 遍历高度
            # 提取每个像素点的颜色
            color = img.getpixel((x, y))  # 获取像素点的颜色
            # 减少颜色种类
            color = tuple([x - x % COLOR_REDUCE_LEVEL for x in color])  # 减少颜色种类
            # 颜色填充对应的单元格
            worksheet.write(y, x, '', workbook.add_format({'bg_color': '#%02X%02X%02X' % color}))  # 在单元格中填充颜色

    # 关闭工作簿
    workbook.close()


if __name__ == '__main__':
    # 转换图片到Excel
    image_to_excel('F:/桌面文件夹/cxk.jpg')  # 调用函数将图片转换为Excel

准备好我们的图片如下,然后运行我们的pricture_to_xlsx.py文件得到nic.xlsx的文件。

运行文件,生成打开nic.xlsx文件后如下图所示。 

 感谢阅读!!!!

  • 10
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
使用Python生成Excel像素画,可以使用openpyxl库来读取和编辑Excel文件,同时使用OpenCV库来处理图像。以下是一个示例代码的步骤: 1. 导入所需的库:import openpyxl, cv2, openpyxl.styles.PatternFill 2. 加载图像:使用OpenCV的cv2.imread函数加载图像文件。 3. 获取图像的RGB通道:使用图像数组的切片操作分别获取红色通道(R)、绿色通道(G)和蓝色通道(B)的像素值。 4. 创建Excel文件:使用openpyxl的load_workbook函数加载现有的Excel文件(如果有)或创建一个新的Excel文件。 5. 获取工作表:使用wb.worksheets[0]获取第一个工作表。 6. 循环遍历像素值:使用两个嵌套的for循环遍历每个像素值。 7. 创建填充样式:根据每个像素的RGB值创建填充样式,并使用PatternFill函数设置填充类型为'solid',前景色为RGB值。 8. 应用填充样式:使用工作表的cell方法选择要应用填充样式的单元格,并将填充样式赋值给单元格的fill属性。 9. 保存Excel文件:使用wb.save函数保存Excel文件。 以下是示例代码: ``` from openpyxl import load_workbook import cv2 as cv from openpyxl.styles import PatternFill image = cv.imread("your_image.jpg", 1) B = image[:, :, 0] G = image[:, :, 1] R = image[:, :, 2] fileName = "output.xlsx" wb = load_workbook(fileName) sheet = wb.worksheets[0] for c in range(1, len(B[0])): for r in range(1, len(B)): d = str(hex(R[r][c])).lstrip("0x").upper() e = str(hex(G[r][c])).lstrip("0x").upper() f = str(hex(B[r][c])).lstrip("0x").upper() while len(d) < 2: d = "0" + d while len(e) < 2: e = "0" + e while len(f) < 2: f = "0" + f RGB = d + e + f fill = PatternFill(fill_type='solid', fgColor=RGB, bgColor="FFFFFF") sheet.cell(row=r, column=c).fill = fill wb.save(fileName) ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值