通过URL打开图片并检测它是否是Python中的png,jpg或gif?

时间:2014-06-20 16:14:17

标签: python image urllib identification imghdr

我想确定puush.me图像(链接不是HTML,只是图像)是png,jpg还是gif。有没有办法做那个蟒蛇? Urllib似乎没有打开图像并检测它们。

3 个答案:

答案 0 :(得分:2)

要在下载之前确定来自网络服务器本身的文件类型,您可以查看Content-Type标题。

Python 2.x示例

import urllib2
my_url = "http://upload.wikimedia.org/wikipedia/en/b/bc/Wiki.png" #example image
request = urllib2.urlopen(my_url)
mime = request.info()['Content-type']

if mime.endswith("png"):
    print("Image is a png")
elif mime.endswith("jpeg"):
    print("Image is a jpg")
elif mime.endswith("gif"):
    print("Image is a gif")

#Image is a png

List of image mimes you can easily check against

答案 1 :(得分:1)

您可以使用imghdr库(包含在Python标准库中)来确定图像的类型。

import cStringIO
import imghdr
import urllib2

url = "http://www.gnu.org/graphics/gerwinski-gnu-head.png"
response = urllib2.urlopen(url)
data = cStringIO.StringIO(response.read())
print(imghdr.what(data))

答案 2 :(得分:0)

如果您已获得该文件的数据,则可以检查前几个字节是否有魔术数字签名:

  • png 89 50 4E 47 0D 0A 1A 0A
  • jpg FF D8 FF
  • bmp 42 4D
  • gif 47 49 46 38

例如,Python3.x:

with open('image', 'rb') as f:
  bytes = f.read()
  if bytes.startswith(b'89504E470D0A1A0A'):
    print('PNG')
  if bytes.startswith(b'FFD8FF'):
    print('JPG')
  if bytes.startswith(b'424D'):
    print('BMP')
  if bytes.startswith(b'47494638'):
    print('GIF')