我正在使用 Python 脚本从 imgur.com 下载大量图像,因为我拥有该格式的所有链接http://imgur.com/{id}
我必须通过将原始网址替换为来强制下载它们http://i.imgur.com/{id}.gif
,然后保存所有图像,不带扩展名。 (我知道有一个 Imgur 的 API,但我无法使用它,因为它对此类工作有限制)
现在下载图像后,我想使用 imghdr 模块来确定图像的原始扩展名:
>>> import imghdr
>>> imghdr.what('/images/GrEdc')
'gif'
问题是这个工作的成功率是80%,剩下的20%都被识别为'None'
检查其中一些我发现它们很可能都是 .jpg 图像。
为什么 imghdr 无法检测到格式?即使没有扩展名,我也可以使用 Ubuntu 的默认图像查看器打开这些图像,所以我认为它们没有损坏。
请注意,2019 年,该错误尚未修复。该解决方案可通过 Paul R. 的链接获取。
解决该问题的一种方法是对问题进行猴子修补:
# Monkeypatch bug in imagehdr
from imghdr import tests
def test_jpeg1(h, f):
"""JPEG data in JFIF format"""
if b'JFIF' in h[:23]:
return 'jpeg'
JPEG_MARK = b'\xff\xd8\xff\xdb\x00C\x00\x08\x06\x06' \
b'\x07\x06\x05\x08\x07\x07\x07\t\t\x08\n\x0c\x14\r\x0c\x0b\x0b\x0c\x19\x12\x13\x0f'
def test_jpeg2(h, f):
"""JPEG with small header"""
if len(h) >= 32 and 67 == h[5] and h[:32] == JPEG_MARK:
return 'jpeg'
def test_jpeg3(h, f):
"""JPEG data in JFIF or Exif format"""
if h[6:10] in (b'JFIF', b'Exif') or h[:2] == b'\xff\xd8':
return 'jpeg'
tests.append(test_jpeg1)
tests.append(test_jpeg2)
tests.append(test_jpeg3)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)