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

В скрипте можно использовать wmctrl, xpropи awk, чтобы использовать время активации, поддерживаемое оконным менеджером. (См., например,. wm -спец. 1.5). Например, используйте (многострочную -строку )командную строку, как показано ниже:

W=$(wmctrl -l | \
    awk '$ ~ "Terminal" {print $1;}' | while read x ; do \
      echo "$x $(xprop -id $(xprop -id $x \
                             | awk '$1 ~ /_NET_WM_USER_TIME/ {print $NF}' \
                             ) \
                 | awk '{print $NF}' \
                 )" ; \
      done | awk '$2>t {i=$1; t=$2} END {print i}' \
    )

Прописью:

  1. пропустите список wmctrlчерез фильтрацию, чтобы выбрать идентификаторы окон названного приложения («Терминал» в приведенном выше примере ); тогда
  2. пропустите это через (самое внутреннее )xprop, чтобы получить (поддельный )идентификатор окна для последнего времени использования, и
  3. использование другого (внешнего)xpropдля получения этой временной метки, которая является (единственным )свойством "окна-притворства" _NET_WM_USER_TIME_WINDOWисходного окна; тогда
  4. пропускают все полученные строки идентификатора и отметки времени через фильтр awk, который сообщает идентификатор с наибольшей отметкой времени.

1
02.04.2020, 13:11
3 ответа

В проекте 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
3
28.04.2021, 23:18

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

1
28.04.2021, 23:18

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

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

1
28.04.2021, 23:18

Теги

Похожие вопросы