摸鱼 | 图片转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 单元格大小
相关推荐
醒过来摸鱼18 小时前
Java classloader
java·开发语言·python
superman超哥18 小时前
仓颉语言中元组的使用:深度剖析与工程实践
c语言·开发语言·c++·python·仓颉
小鸡吃米…18 小时前
Python - 继承
开发语言·python
祁思妙想19 小时前
Python中的FastAPI框架的设计特点和性能优势
开发语言·python·fastapi
Dingdangcat8619 小时前
反恐精英角色识别与定位-基于改进的boxinst_r101_fpn_ms-90k_coco模型实现
python
世界唯一最大变量19 小时前
利用自定义积分公式,目前可以求出所有1元方程和1元积分的近似值
python
写代码的【黑咖啡】19 小时前
深入理解 Python 中的模块(Module)
开发语言·python
爱笑的眼睛1121 小时前
超越 `cross_val_score`:深度解析Scikit-learn交叉验证API的架构、技巧与陷阱
java·人工智能·python·ai
smj2302_796826521 天前
解决leetcode第3782题交替删除操作后最后剩下的整数
python·算法·leetcode
gCode Teacher 格码致知1 天前
Python基础教学:Python 3中的字符串在解释运行时的内存编码表示-由Deepseek产生
python·内存编码