Как можно достоверно определить, является ли файл файлом изображения?

Как можно достоверно определить, является ли файл файлом изображения?

В настоящее время я использую следующую команду:

file image.jpg | cut -d " " -f 2

Пока все хорошо. Это работает и с файлом без расширения изображения. Так что мне было интересно, есть ли другой способ сделать это? Я мог не увидеть определенного случая, когда код выше не сработает.

Редактировать: Я пытаюсь создать скрипт для последовательного переименования файлов изображений в каталоге.

решение1

Проект ImageMagick имеет возможности для идентификации изображений.

Я постоянно использую ImageMagick, в том числе его функцию «идентификации» из командной строки, и он ни разу не подвел при идентификации изображения.

Обратите внимание, что он дает гораздо больше, чем просто формат, например:

$  identify tmp3.jpg 
tmp3.jpg JPEG 1680x1050 1680x1050+0+0 DirectClass 8-bit 293.582kb 

$  identify tmp.png
tmp.png PNG 1012x900 1012x900+0+0 DirectClass 8-bit 475.119kb

решение2

Использование file— надежный метод определения типов файлов. Он не полагается на расширения файлов, а скорее на «магические числа»; начало содержимого файла.

Чтобы сделать ваш процесс более надежным, вы можете использовать libmagicнапрямую. Таким образом, если по какой-то причине формат fileвывода изменится, это не повлияет на вас. Однако это означает, что вам нужно будет написать свой скрипт на языке, который может вызывать функции в библиотеке C.

решение3

Вы уже получили правильную команду, поскольку все, что она делает, это оценивает тип MIME через libmagic. Ее единственная цель — распознатьтипы файловсузорыпредоставлено соответствующимформат файла. Так что ничего лучше вы не найдете. Вы даже можете добавлять собственные расширения для файлов, которые не распознаются правильно. (для magick, а не для командного файла)

Связанный контент