Python Image.seek不';返回图像对象

Python Image.seek不';返回图像对象,python,python-3.x,python-imaging-library,Python,Python 3.x,Python Imaging Library,我正在尝试制作一个程序,从URL获取图像。如果图像已设置动画,则返回gif的第一帧,如果未设置动画,则仅返回图像 代码: def is_animated(im): try: im.seek(1) return True except EOFError: return False def getImg(url): img = Image.open(requests.get(url, stream=True).raw, mod

我正在尝试制作一个程序,从URL获取图像。如果图像已设置动画,则返回gif的第一帧,如果未设置动画,则仅返回图像

代码:

def is_animated(im):
    try:
        im.seek(1)
        return True
    except EOFError:
        return False

def getImg(url):
    img = Image.open(requests.get(url, stream=True).raw, mode='r')
    if is_animated(img):
        return img
    else:
        print('no animation detected')
        return img

问题:我用一张动画图片尝试了它:它在
is_animated()
中返回True,但在
返回img
中不返回图像对象。错误日志为空。这里有什么问题?我将感谢您的帮助,提前谢谢。

seek
不会返回
枕头中的任何内容。它只是寻找下一帧,并将
img
对象指向该帧,因此如果输出
img
,它将显示下一帧

此外,这意味着通过在
中运行
im.seek(1)
,您将自动搜索到下一帧,这意味着您永远不会从
getImg
函数返回序列中的第一个图像。您必须运行
im.seek(0)
才能返回第一帧


来源:(注意在
seek
\u seek
中没有返回任何内容)

好的,谢谢你的提示。但是它仍然不输出图像object@JoshJohnson现在还不清楚你所说的
是什么意思,它仍然不输出图像对象。您是如何尝试输出它的?您现在正在执行
返回img
,这似乎是正确的,但现在还不清楚您是如何输出它的,因为您还没有包含相关的代码。我已经更新了代码,我尝试使用非动画图片运行它,效果非常好。@JoshJohnson您的更新没有真正的帮助,因为它不是我要求的,这就是您试图输出图像的方式。另外,您仍在通过
is\u animated
搜索图像,因此您总是会返回第二帧,除非您在运行
im.seek(1)
后运行
im.seek(0)
。@JoshJohnson您还尝试过其他动画图像吗?您是否尝试过将一个文件保存到磁盘,然后直接加载,以查看是否有任何变化?你有没有看过网上有人用
seek
输出动画图像的例子?
getImg
的返回值是多少?@HåkenLid images那么就没有问题了?@HåkenLid图片稳定时就是图像,但是,当图像设置动画时,这算不了什么。打开图像文件时,应该使用
seek
方法。但您使用的是流式http请求。如果不想下载整个图像文件以确定其是否已设置动画,可以查看此问题。