当前位置: 首页 > article >正文

摸鱼 | 图片转Excel单元格脚本

依赖安装

pip install Pillow tqdm

源码:

import argparse
from PIL import Image
import openpyxl
from openpyxl.styles import PatternFill
from tqdm import tqdm

def image_to_excel(image_path, excel_path, cell_size=20, sample_ratio=1, output_width=None, output_height=None):
    # 打开图片
    img = Image.open(image_path)
    img = img.convert("RGB")  # 确保是RGB模式

    # 计算新尺寸
    new_width = img.width // sample_ratio
    new_height = img.height // sample_ratio

    # 如果指定了宽度或长度,自动计算另一个维度
    if output_width is not None:
        new_height = int(new_width * img.height / img.width)
    elif output_height is not None:
        new_width = int(new_height * img.width / img.height)

    # 创建一个新的Excel工作簿
    wb = openpyxl.Workbook()
    ws = wb.active

    # 设置列宽和行高
    for col in range(new_width):
        ws.column_dimensions[openpyxl.utils.get_column_letter(col + 1)].width = cell_size / 7
    for row in range(new_height):
        ws.row_dimensions[row + 1].height = cell_size

    # 填充单元格并显示进度条
    for y in tqdm(range(new_height), desc="Processing Rows"):
        for x in range(new_width):
            r, g, b = img.getpixel((x * sample_ratio, y * sample_ratio))
            # 创建填充颜色
            fill = PatternFill(start_color=f'{r:02X}{g:02X}{b:02X}', end_color=f'{r:02X}{g:02X}{b:02X}', fill_type='solid')
            ws.cell(row=y + 1, column=x + 1).fill = fill

    # 保存Excel文件
    wb.save(excel_path)
    print(f"\nSuccessfully converted '{image_path}' to '{excel_path}'.")

def main():
    parser = argparse.ArgumentParser(
        description='Convert an image to an Excel file with pixel colors. '
                    'Each pixel in the image will be represented as a colored cell in the Excel file.'
    )
    parser.add_argument('image_path', type=str, help='Path to the input image file (e.g., image.png).')
    parser.add_argument('excel_path', type=str, help='Path to the output Excel file (e.g., output.xlsx).')
    parser.add_argument('--cell_size', type=int, default=20, help='Size of the Excel cells in pixels (default: 20).')
    parser.add_argument('--sample_ratio', type=int, default=1, help='Sampling ratio (default: 1 means no sampling).')
    parser.add_argument('--output_width', type=int, help='Specify the output width (number of columns).')
    parser.add_argument('--output_height', type=int, help='Specify the output height (number of rows).')

    args = parser.parse_args()

    print("Starting the image to Excel conversion...")
    print(f"Input Image Path: {args.image_path}")
    print(f"Output Excel Path: {args.excel_path}")
    print(f"Cell Size: {args.cell_size} pixels")
    print(f"Sampling Ratio: {args.sample_ratio}")
    print(f"Output Width: {args.output_width if args.output_width else 'Not specified'}")
    print(f"Output Height: {args.output_height if args.output_height else 'Not specified'}")
    
    image_to_excel(args.image_path, args.excel_path, args.cell_size, args.sample_ratio, args.output_width, args.output_height)

if __name__ == '__main__':
    main()

执行示例:
在这里插入图片描述
图片(干饭.png):
在这里插入图片描述

执行效果:
在这里插入图片描述

使用说明:将代码报错到文件并以.py结尾命名(假设文件名为 image2xlsx.py)

  • 输入-h参数会给出所有参数提示
    在这里插入图片描述
  • –sample_ratio 指定图片中多少个像素点,转换成一个单元格。默认是1,转换的单元格和图片像素点一样多。
  • –output_width 指定单元格横向个数(宽),“高”按照图片比例自动生成。
  • –output_height 指定单元格纵向个数(高),“宽”按照图片比例自动生成。
  • – cell_size 单元格大小

http://www.kler.cn/a/301417.html

相关文章:

  • 5. langgraph中的react agent使用 (从零构建一个react agent)
  • 号卡分销系统,号卡系统,物联网卡系统源码安装教程
  • Java基础-集合
  • 【Git】Git Clone 指定自定义文件夹名称:详尽指南
  • 基于语法树的SQL自动改写工具开发系列(2)-使用PYTHON进行简单SQL改写的开发实战
  • vueRouter路由切换时实现页面子元素动画效果, 左右两侧滑入滑出效果
  • 【网易低代码】第2课,页面表格查询功能
  • erlang学习: Mnesia Erlang数据库3
  • misc音频隐写
  • 【深度学习】线性回归的从零开始实现与简洁实现
  • 嵌入式OpenHarmony源码基本原理详解
  • [环境配置]ubuntu20.04安装后wifi有图标但是搜不到热点解决方法
  • laravel 11 区分多模块的token
  • 区块链-P2P(八)
  • 如何禁用公司电脑上的USB接口?这3个妙计锦囊及奉上!【老板的福音!】
  • 坐牢第三十七天(Qt)
  • 影刀RPA实战:自动化同步商品库存至各大电商平台(二)
  • 骨传导耳机哪个品牌好用?良心测评推荐5大高分骨传导耳机!
  • Python | Leetcode Python题解之第393题UTF-8编码验证
  • 大模型LLM之SpringAI:Web+AI(二)
  • Android——service使用详解
  • 快速上手Spring Boot应用
  • Python语言开发学习之使用Python预测天气
  • 二十三种设计模式之建造者模式(类比汽车制造厂好理解一些)
  • sqlite3 相关知识
  • 嵌入式边缘计算:融合创新与未来展望