Python切割单张图片为N行M列的小图片

本文介绍了一个Python脚本,能够将一张图片按照预设的行数和列数进行切割,生成多个小图片。该方法适用于需要批量处理图片的场景。

这个脚本可以将指定的图片,切割成指定行列数的小图片

import os
from PIL import Image

def splitimage(src, rownum, colnum, dstpath):
    img = Image.open(src)
    w, h = img.size
    if rownum <= h and colnum <= w:
        print('Original image info: %sx%s, %s, %s' % (w, h, img.format, img.mode))
        print('开始处理图片切割, 请稍候...')

        s = os.path.split(src)
        if dstpath == '':
            dstpath = s[0]
        fn = s[1].split('.')
        basename = fn[0]
        ext = fn[-1]

        num = 0
        rowheight = h // rownum
        colwidth = w // colnum
        for c in range(rownum):
            for r in range(colnum):
                box = (c * colwidth, r * rowheight, (c + 1) * colwidth, (r + 1) * rowheight)
                img.crop(box).save(os.path.join(dstpath, basename + '_' + str(num) + '.' + ext), ext)
                num = num + 1

        print('图片切割完毕,共生成 %s 张小图片。' % num)
    else:
        print('不合法的行列切割参数!')

src = input('请输入图片
<think>嗯,用户的问题是关于如何从一张图片批量导出小图片,可能与APRS符号相关的。他们提到了APRS符号和图片分割,所以需要先理解APRS是什么。APRS是自动位置报告系统,使用的符号可能是一张包含多个图标的精灵图,需要从中分割出各个小图标。 用户可能的需求是从一个包含多个APRS符号的大图中,按固定尺寸或坐标切割出每个小图标,保存为单独的文件。需要编程或工具实现批量处理。参考之前的引用,用户之前提到过用Python图片切割的例子,所以可能倾向于Python解决方案。 需要检查用户提供的引用内容。引用1是用PIL库横向切割图片,引用2是用OpenCV进网格切割,引用3是CSS精灵图,涉及坐标定位。APRS符号可能排网格或特定坐标,所以需要确定每个小图的起始位置和尺寸。 用户可能需要两种方法:编程实现(Python)和使用工具(如Photoshop脚本或在线工具)。Python方案更灵活,适合自定义尺寸和批量处理。需要确保代码能处理不同的切割方式,比如固定尺寸或根据数分割。 可能的问题是如何确定每个小图的位置和大小。如果APRS符号是等距排的,可以计算数,然后循环切割。例如,假设每个符号是32x32像素,总图是NM,那么每个小图的起始坐标是i*32, j*32。 另外,用户可能需要处理非标准排的情况,这时候需要手动指定坐标或使用图像处理技术自动检测图标位置,但这可能比较复杂。先提供基础的网格分割方法,再提到更高级的可能性。 还要考虑保存文件的命名,可能希望按或APRS符号代码命名,方便后续使用。代码示例需要展示如何循环切割并保存为有意义的文件名。 最后,生相关问题时要覆盖用户可能进一步想知道的内容,比如处理不规则排、批量重命名、性能优化等。</think>### 基于APRS符号的图片分割解决方案 #### 一、核心原理 APRS符号通常以精灵图形式存储,其图标按网格规则排。通过编程定位每个符号的坐标范围,使用图像裁剪技术批量导出小图标。主要涉及以下步骤: 1. **确定图标尺寸**:测量单个APRS符号的宽高,如$w \times h$ 2. **计算数**:若总图尺寸为$W \times H$,则数计算为: $$rows = \lfloor \frac{H}{h} \rfloor,\ cols = \lfloor \frac{W}{w} \rfloor$$ 3. **循环裁剪**:通过双重循环遍历,按坐标批量切割 #### 二、Python实现方案(基于OpenCV) ```python import cv2 # 输入参数配置 input_path = "aprs_symbols.png" output_dir = "output/" symbol_width = 32 # APRS符号标准尺寸 symbol_height = 32 # 读取源图像 src = cv2.imread(input_path) total_height, total_width = src.shape[:2] # 计算可切割数量 rows = total_height // symbol_height cols = total_width // symbol_width # 批量切割 for row in range(rows): for col in range(cols): x = col * symbol_width y = row * symbol_height crop_img = src[y:y+symbol_height, x:x+symbol_width] filename = f"{output_dir}symbol_{row}_{col}.png" cv2.imwrite(filename, crop_img) print(f"共切割{rows*cols}个APRS符号") ``` #### 三、Photoshop脚本方案 1. 使用`文件 > 导出 > 将图层导出到文件` 2. 选择输出格式为PNG 3. 启用`修剪图层`确保边缘对齐[^3] #### 四、进阶处理技巧 1. **非等距排处理**:通过XML配置文件指定坐标范围 2. **批量重命名**:使用正则表达式匹配APRS编码规则 3. **透明通道保留**:添加`cv2.IMREAD_UNCHANGED`参数读取alpha通道
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值