摸鱼 | 图片转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 单元格大小
相关推荐
cspttty6 分钟前
2026年财务分析岗JD中的Excel、SQL、BI与业务分析要求
大数据·sql·excel
cspttty10 分钟前
HR数字化校招准备路线:Excel、SQL、BI和AI工具怎么学
人工智能·sql·excel
热爱编程的小李18 分钟前
安卫士设备数实时监测警报脚本
python
程序员清风21 分钟前
Python 操作 MySQL、Redis 与消息队列的完整实践
redis·python·mysql
Q26433650233 小时前
【有源码】基于 Hadoop 生态的化妆品销售数据存储分析与可视化 面向化妆品行业的用户画像构建与销售机会识别研究
大数据·hadoop·python·机器学习·spark·毕业设计·课程设计
2601_962078199 小时前
Python中calendar.weekday用法
python·编程技巧·calendar·日期处理·weekday
2601_962218619 小时前
万象生鲜系统业财一体化底层打通技术自动生成经营账单
大数据·数据库·人工智能·python·算法
2601_966949659 小时前
为什么量化策略需要大量历史股票数据?从回测可信度理解数据规模
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
2601_962885729 小时前
如何用 Python 扫描 A 股跳空缺口并统计缺口回补概率?
java·前端·python
李高钢10 小时前
Python FastAPI 框架入门:从零搭建你的第一个高性能 API 服务
数据库·python·fastapi