Схематично он довольно просто (ведь всё гениальное просто):
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