摸鱼 | 图片转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 单元格大小
相关推荐
jiuri_12153 小时前
Docker使用详解:在ARM64嵌入式环境部署Python应用
python·docker·容器
chenchihwen3 小时前
AI代码开发宝库系列:Function Call
人工智能·python·1024程序员节·dashscope
汤姆yu4 小时前
基于python的化妆品销售分析系统
开发语言·python·化妆品销售分析
上去我就QWER5 小时前
Python下常用开源库
python·1024程序员节
程序员杰哥6 小时前
Pytest之收集用例规则与运行指定用例
自动化测试·软件测试·python·测试工具·职场和发展·测试用例·pytest
Jyywww1216 小时前
Python基于实战练习的知识点回顾
开发语言·python
朝朝辞暮i7 小时前
从0开始学python(day2)
python
程序员黄同学7 小时前
Python中的列表推导式、字典推导式和集合推导式的性能和应用场景?
开发语言·python
AI小云7 小时前
【Python高级编程】类和实例化
开发语言·人工智能·python