Python制作GIF时图片排序异常问题求助
解决Python制作GIF时图片顺序错误的问题
问题出在默认的字符串排序逻辑:sorted()是按字典序比较字符串的,比如"IMG_11"和"IMG_2"对比时,第五个字符'1'的ASCII码比'2'小,所以会排在"IMG_2"前面,而不是按数字大小排序。
要解决这个问题,需要自定义排序规则,提取文件名里的数字并按整数大小排序,下面是两种可行的修改方案:
方案1:通过字符串分割提取数字
直接按文件名的固定格式分割出数字部分,转成整数作为排序依据:
def make_gif(frame_folder): import glob import moviepy.editor as mpy frames = glob.glob(f"{frame_folder}/*.png") # 按文件名中的数字排序 frames = sorted(frames, key=lambda x: int(x.split('_')[1].split('.')[0])) fps = 5 clip = mpy.ImageSequenceClip(frames, fps=fps) clip.write_gif('movie.gif')
方案2:用正则表达式提取数字(更健壮)
如果文件名格式有轻微变化(比如后缀不是png,或中间有其他字符),用正则匹配数字的方式更可靠:
def make_gif(frame_folder): import glob import moviepy.editor as mpy import re frames = glob.glob(f"{frame_folder}/*.png") # 匹配"IMG_"后面的连续数字,转成整数排序 frames = sorted(frames, key=lambda x: int(re.search(r'IMG_(\d+)', x).group(1))) fps = 5 clip = mpy.ImageSequenceClip(frames, fps=fps) clip.write_gif('movie.gif')
两种方案都能让图片按IMG_1、IMG_2、IMG_3...的正确顺序生成GIF。
内容的提问来源于stack exchange,提问作者jeffoam
相关产品推荐
相关产品推荐

