You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

对JpegImageFile列表排序时报TypeError:不支持两实例间使用'<'比较

错误原因
  • 你当前直接对PIL读取后生成的JpegImageFile对象执行排序,这类图片对象本身没有定义大小比较规则,所以触发了<运算符不支持的报错。
  • 现有写法中sorted(frames)不会改变原frames列表的顺序:sorted()是返回新列表的函数,你没有把返回值赋值给变量,排序操作相当于没执行。
  • 你需要按文件名排序,但先打开图片再排序的逻辑已经丢失了文件名信息,根本无法实现你要的排序效果。
  • 额外注意:你的文件名数字从1到10,如果用默认字符串排序,会出现PhotoIRBalkanf 10排在PhotoIRBalkanf 2前面的问题,需要提取文件名中的数字做数值排序才能得到正确顺序。
修复后代码
import glob
from PIL import Image

def gif_creator(filename, folder):
    # 先拿到所有匹配的图片路径
    img_paths = glob.glob(f"{folder}/{filename}*.JPG")
    # 按文件名末尾的数字做数值排序,避免字符串排序的顺序错乱问题
    img_paths_sorted = sorted(img_paths, key=lambda x: int(x.split()[-1].split('.')[0]))
    # 排序完成后再打开图片生成帧列表
    frames = [Image.open(path) for path in img_paths_sorted]
    frame_one = frames[0]
    # append_images要去掉第一帧,避免第一帧重复出现
    frame_one.save(filename+".gif", format="GIF", append_images=frames[1:], save_all=True, 
    duration=150, loop=0)
补充说明

如果你的文件名格式不是固定的「前缀 数字.JPG」结构,可以用正则提取数字,排序的key写为lambda x: int(re.search(r'\d+$', x.rsplit('.',1)[0]).group(1)),导入re库即可使用。

内容的提问来源于stack exchange,提问作者Gorna Oryahovica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 01:12:02