2016-02-26 60 views
3

我在python中试图从imgur下载一些图像。我一直在使用urrlib和urllib.retrieve,但在保存文件时需要指定扩展名。这对于大多数帖子来说都不是问题,因为链接中有例如.jpg,但是当扩展名不在那里时我不知道该怎么做。我的问题是,在下载文件之前是否有办法确定文件的图像格式。问题主要是imgur具体,但我不介意大多数图像托管网站的解决方案。imgur上的图像格式

在此先感谢

+1

Imgur有[API](http://api.imgur.com/)。你应该看看,而不是手动刮。否则,总是有['imghdr'模块](https://docs.python.org/3/library/imghdr.html)。 – Carsten

+0

啊谢谢,我会考虑它! – user5977016

回答

1

您可以在Python 2.7和Python 3使用imghdr.what(filename[, h])来确定图像类型。

阅读here了解更多信息,如果您使用的是Python 2.7。

阅读here更多的信息,如果你使用Python 3

+0

嗯,这似乎不适用于非本地文件。 – user5977016

+0

尽管如此,保存到临时文件,检查图像格式以及将文件移动到适当的目的地都很简单。 – Carsten

0

假设画面没有文件扩展名,也没有办法确定哪种类型是你下载它。所有图像格式都将其初始字节设置为特定值。要检查这些'魔术'的初始字节,请检查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'