все Python 3до 3.13Удалено из стандартной библиотекипонятие
imghdr
удалённые модули
Определял тип картинки по первым байтам файла. Удалён в Python 3.13 — проверяйте сигнатуру байт сами или берите Pillow, filetype.
Синтаксис
import imghdr # до 3.13
imghdr.what(файл) или imghdr.what(None, h=байты) возвращал 'png', 'jpeg', 'gif' и ещё десяток имён — по магическим байтам в начале. Убран по PEP 594: список форматов устарел (нет WebP-вариантов, AVIF, HEIC), а обновлять его было некому. Как переписать: прочитайте первые байты файла и сравните их с сигнатурами через startswith — b'\x89PNG\r\n\x1a\n' у PNG, b'\xff\xd8\xff' у JPEG, b'GIF8' у GIF. Если картинку всё равно открывать, PIL.Image.open(f).format из Pillow скажет формат и заодно проверит файл. Библиотеки filetype и puremagic знают сотни сигнатур; пакет standard-imghdr возвращает старый модуль.
Примеры
# Python 3.13+
try:
import imghdr
except ModuleNotFoundError as e:
print(type(e).__name__) # → ModuleNotFoundError
# Python 3.13+
SIGNATURES = {b'\x89PNG\r\n\x1a\n': 'png', b'\xff\xd8\xff': 'jpeg', b'GIF8': 'gif'}
def what(head):
for magic, kind in SIGNATURES.items():
if head.startswith(magic):
return kind
return None
print(what(b'\x89PNG\r\n\x1a\n' + bytes(24))) # → png
print(what(b'hello')) # → None
import imghdr
print(imghdr.what(None, h=b'\x89PNG\r\n\x1a\n' + bytes(24))) # → png
print(imghdr.what(None, h=b'hello')) # → None
См. также
Частые ошибки
Открыть в полном глоссарииdocs.python.orgСообщить о неточности