我在python中试图从imgur下载一些图像。我一直在使用urrlib和urllib.retrieve,但在保存文件时需要指定扩展名。这对于大多数帖子来说都不是问题,因为链接中有例如.jpg,但是当扩展名不在那里时我不知道该怎么做。我的问题是,在下载文件之前是否有办法确定文件的图像格式。问题主要是imgur具体,但我不介意大多数图像托管网站的解决方案。imgur上的图像格式
在此先感谢
我在python中试图从imgur下载一些图像。我一直在使用urrlib和urllib.retrieve,但在保存文件时需要指定扩展名。这对于大多数帖子来说都不是问题,因为链接中有例如.jpg,但是当扩展名不在那里时我不知道该怎么做。我的问题是,在下载文件之前是否有办法确定文件的图像格式。问题主要是imgur具体,但我不介意大多数图像托管网站的解决方案。imgur上的图像格式
在此先感谢
您可以在Python 2.7和Python 3使用imghdr.what(filename[, h])
来确定图像类型。
阅读here了解更多信息,如果您使用的是Python 2.7。
阅读here更多的信息,如果你使用Python 3
嗯,这似乎不适用于非本地文件。 – user5977016
尽管如此,保存到临时文件,检查图像格式以及将文件移动到适当的目的地都很简单。 – Carsten
假设画面没有文件扩展名,也没有办法确定哪种类型是你下载它。所有图像格式都将其初始字节设置为特定值。要检查这些'魔术'的初始字节,请检查https://github.com/ahupp/python-magic - 它会匹配已知图像格式的初始字节。
下面的代码从imgur下载图片并确定它是哪种文件类型。
import magic
import requests
import shutil
r = requests.get('http://i.imgur.com/yed5Zfk.gif', stream=True) ##Download picture
if r.status_code == 200:
with open('~/Desktop/picture', 'wb') as f:
r.raw.decode_content = True
shutil.copyfileobj(r.raw, f)
print magic.from_file('~/Desktop/picture') ##Determine type
## Prints: 'GIF image data, version 89a, 360 x 270'
Imgur有[API](http://api.imgur.com/)。你应该看看,而不是手动刮。否则,总是有['imghdr'模块](https://docs.python.org/3/library/imghdr.html)。 – Carsten
啊谢谢,我会考虑它! – user5977016