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

依赖安装

python 复制代码
pip install Pillow tqdm

源码:

python 复制代码
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 单元格大小
相关推荐
2301_8038756111 小时前
PHP 中处理会话数组时的类型错误解析与修复指南
jvm·数据库·python
m0_7436239211 小时前
c++如何批量修改文件后缀名_std--filesystem--replace_extension【实战】
jvm·数据库·python
2501_9142459312 小时前
CSS如何处理CSS变量作用域冲突_利用特定类名重写变量值
jvm·数据库·python
菜鸟学Python12 小时前
Python生态在悄悄改变:FastAPI全面反超,Django和Flask还行吗?
开发语言·python·django·flask·fastapi
<-->12 小时前
Megatron(全称 Megatron-LM,由 NVIDIA 开发)和 DeepSpeed(由 Microsoft 开发)
人工智能·pytorch·python·深度学习·transformer
测试199812 小时前
2026最新软件测试面试八股文【附文档】
自动化测试·软件测试·python·测试工具·面试·职场和发展·测试用例
maqr_11013 小时前
MySQL数据库迁移到云端如何保障安全_数据加密与SSL连接配置
jvm·数据库·python
u01091476013 小时前
MySQL如何限制触发器递归调用的深度_防止触发器死循环方法
jvm·数据库·python
weixin_3812881813 小时前
MySQL中如何使用HEX函数转换十六进制_MySQL进制转换函数
jvm·数据库·python
maqr_11014 小时前
HTML怎么生成订单预览_HTML只读订单信息结构【操作】
jvm·数据库·python