TGViewer
Python Заметки Python Заметки @pythonotes · 2.2K subscribers
Post #113 608
Когда-то давно, когда я сел за компьютер примерно третий раз в жизни, я изобрёл... самый быстрый и универсальный конвертор форматов изображений🤓

Схематично он довольно просто (ведь всё гениальное просто):

rename my_image.bmp -> my_image.jpg

Ох уж это наивное IT-детство))) Я действительно думал что победил систему. Если Paint открыл, то значит конвертация прошла успешно! 😭

Если вы пишете какую-то программу работы с изображениями, то порой бывает полезно защититься от таких "гениальных" разработок и однозначно понимать какого типа файл перед вами независимо от его имени. В этом вам поможет стандартная библиотека imghdr.

По умолчанию она понимает следующие форматы:

rgb
gif
pbm
pgm
ppm
tiff
rast
xbm
jpeg
bmp
png
webp
exr

Вы всегда можете добавить свой формат. Для этого в список imghdr.tests нужно добавить функцию проверки с определённым набором аргументов: байты и открытый файл.
Вернуть функция должна либо строку с типом формата либо None.

Пример проверки файла с изменённым расширением

>>> import imghdr
>>> imghdr.what('image.png')
'jpeg'

Как же происходит проверка? Очевидно, что не на основе расширения файла. Каждый тип файла содержит заранее известный паттерн данных (magic number). Функции проверки просто ищут этот паттерн в бинарных данных файла. Если совпадение есть, то формат определён.

Всё станет понятно когда посмотрите исходники этого модуля. Код тестов состоит из 2-3 строк, при этом одна из них это return.

#libs
GitHub cpython/imghdr.py at main · python/cpython The Python programming language. Contribute to python/cpython development by creating an account on GitHub.
More from @pythonotes
  1. Sep 21, 2026­ WebAssembly это мощная технология позволяющая загружать практически любое приложение в б…
  2. Aug 17, 2026Не так давно столкнулся с API который в ответе с ошибкой присылал только статус-код. Без п…
  3. Jul 20, 2026У меня основная ОС это Linux. Но нередко требуется делать сборку клиента под Windows. Соби…
  4. Jul 13, 2026В прошлый раз был пример с понижением привелегий процесса. Проблема в том, что обратно под…
  5. Jul 6, 2026Модуль pwd может использоваться для считывания информации о пользователях из базы данных п…
  6. Jun 22, 2026Недавно я реализовал Multi Tenancy систему на FastAPI + SQLAlchemy и пересобрал её в небол…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →