如何按指定间隔n及起止文件选择编号图片并水平拼接
自动生成图片路径列表并完成拼接
步骤说明
- 定义三个可灵活调整的核心参数:间隔
n、起始文件名start_file、结束文件名end_file - 从文件名中提取对应的起始编号和结束编号
- 利用
range生成符合间隔要求的编号序列 - 格式化生成完整的图片路径列表,替换原代码中手动指定的列表
修改后的完整代码
import sys from PIL import Image # 可灵活修改的参数 n = 5 # 图片间隔 start_file = 'frame5.jpg' # 起始文件 end_file = 'frame30.jpg' # 结束文件 # 从文件名提取起始/结束编号 start_num = int(start_file.split('frame')[1].replace('.jpg', '')) end_num = int(end_file.split('frame')[1].replace('.jpg', '')) # 自动生成符合规则的图片路径列表 image_paths = [f'frame{num}.jpg' for num in range(start_num, end_num, n)] images = [Image.open(path) for path in image_paths] widths, heights = zip(*(i.size for i in images)) total_width = sum(widths) max_height = max(heights) new_im = Image.new('RGB', (total_width, max_height)) x_offset = 0 for im in images: new_im.paste(im, (x_offset, 0)) x_offset += im.size[0] new_im.save('00final.png')
关键逻辑解释
- 编号提取:通过拆分文件名、移除后缀的方式,将文件名转换为可计算的整数编号
- 序列生成:
range(start_num, end_num, n)会生成从起始编号开始、步长为n且小于结束编号的整数序列,完全匹配你需要的筛选规则(比如示例1中range(5,30,5)得到5,10,15,20,25;示例2中range(0,25,7)得到0,7,14,21) - 路径格式化:用f-string快速将编号转换为标准格式的图片路径
你只需修改n、start_file、end_file三个参数,就能适配不同的筛选需求。
内容的提问来源于stack exchange,提问作者Kukkik
相关产品推荐
相关产品推荐

