Как проверить не битая ли картинка
По работе понадобилось из командной строки проверить несколько тысяч картинок на корректность — со смертью носителя часть картинок разрушилась. Чтобы их найти, придумался такой незамысловатый способ:
convert path_to_image null: 2>&- || echo File is corrupted
Если картинка path_to_image разрушена, то этот однострочник выведет «File is corrupted».
Утилита convert входит в состав пакета «Imagemagick» и достаточно распространена.
Принцип понятен, наверное: я прошу утилиту сконвертировать файл, указанный первым параметром, в псевдоформат NULL (указан до двоеточия во втором параметре) — это специальный формат используется, когда результат конвертации не нужен — обычно для замера производительности.
Входная картинка полностью разбирается кодеком, если это не удаётся сделать, то convert поругается в поток вывода ошибок (который я закрыл) и вернёт код возврата отличный от нуля, на что среагируют две вертикальные черты, которые запустят вторую команду.
Конечно, картинка должна быть в формате, который утилита понимает, но всё хоть немного распростанённое туда входит.
Недавно столнулся с форматом HEIC. С некоторых пор используется в фотографиях, снятых устройствами Apple. Формат по ссылке упомянут, но с комментарием «HEIC requires the libheif delegate library». Включена ли поддержка этого библиотеки в стандартную поставку Imagemagick?
Последние два слова моего поста — ссылка, которая ведёт на поддерживаемые форматы.