我想确定 puush.me 图像(链接不是 HTML,只是图像)是 png、jpg 还是 gif。有没有办法做到这一点n python?Urllib 似乎没有打开图像并检测它们。
问问题
2415 次
3 回答
3
要在下载之前确定它来自网络服务器本身的文件类型,您可以检查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
于 2014-06-20T16:32:23.893 回答
2
您可以使用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))
于 2014-06-20T17:19:45.087 回答
1
如果你有文件的数据,你可以检查前几个字节的幻数签名:
- 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')
于 2014-06-20T16:30:08.240 回答