Пишу, по большей части, про историю, свою жизнь и немного про программирование.

Как проверить не битая ли картинка

По работе понадобилось из командной строки проверить несколько тысяч картинок на корректность — со смертью носителя часть картинок разрушилась. Чтобы их найти, придумался такой незамысловатый способ:

convert path_to_image null: 2>&- || echo File is corrupted

Если картинка path_to_image разрушена, то этот однострочник выведет «File is corrupted».

Утилита convert входит в состав пакета «Imagemagick» и достаточно распространена.

Принцип понятен, наверное: я прошу утилиту сконвертировать файл, указанный первым параметром, в псевдоформат NULL (указан до двоеточия во втором параметре) — это специальный формат используется, когда результат конвертации не нужен — обычно для замера производительности.

Входная картинка полностью разбирается кодеком, если это не удаётся сделать, то convert поругается в поток вывода ошибок (который я закрыл) и вернёт код возврата отличный от нуля, на что среагируют две вертикальные черты, которые запустят вторую команду.

Конечно, картинка должна быть в формате, который утилита понимает, но всё хоть немного распростанённое туда входит.

2 комментария
Alexey Shamrin 2018

Недавно столнулся с форматом HEIC. С некоторых пор используется в фотографиях, снятых устройствами Apple. Формат по ссылке упомянут, но с комментарием «HEIC requires the libheif delegate library». Включена ли поддержка этого библиотеки в стандартную поставку Imagemagick?

Евгений Степанищев 2018

Последние два слова моего поста — ссылка, которая ведёт на поддерживаемые форматы.