Поврежденный джипег узнать нетрудно – при загрузке в веб выскочит ошибка и файл не откроется. Но когда дело доходит до тысяч и сотен тысяч файлов, проверить каждый ручками физически невозможно. Нужна автоматизация.
Перед любыми манипуляциями с большими галереями нужно позаботиться о создании бэкапа. Всякое бывает, лучше «пере», чем «недо». Резервных версий можно делать несколько, например, одну на жестком диске, а вторую — в облаке.
Imagecreatefromjpeg создает новое изображение из URL или из файла:
При наличии ошибок возвращает пустую строку.
Jpeginfo находит поврежденные джипеги в указанной директории и субдиректориях. Показывает ошибку или предупреждение:
Для получения списка поврежденных файлов:
Можно попробовать в ImageMagick через функцию
Также полезной будет функция
Но следует помнить, что IMagick проверяет только header, и при этом может провтыкать другие дефекты.
Программа сканирует картинки пачками. Работает просто — установить — указать путь папки — сканировать. Результаты можно посмотреть в виде превьюшек, а можно просто запросить список поврежденных файлов. Работает также с PNG, BMP и GIF.
Поможет удалить посторонние/поврежденные байты. Для комплексного процесса поиска/починки поврежденных фоток можно использовать следующее:
Можно также опробовать Perl-скрипт:
Восстановление побитых изображений — платное удовольствие. Одна из самых популярных программ в сети — Stellar Phoenix JPEG Repair. Заявляют, что за 39$ могут починить абсолютно нечитабельные файлы.
PixRecovery — дорого и сердито, зато качественно. Можно скачать демо-версию и попробовать на деле.
Перед любыми манипуляциями с большими галереями нужно позаботиться о создании бэкапа. Всякое бывает, лучше «пере», чем «недо». Резервных версий можно делать несколько, например, одну на жестком диске, а вторую — в облаке.
Найти
Imagecreatefromjpeg
Imagecreatefromjpeg создает новое изображение из URL или из файла:
imagecreatefromjpeg(string $filename);
При наличии ошибок возвращает пустую строку.
Jpeginfo
Jpeginfo находит поврежденные джипеги в указанной директории и субдиректориях. Показывает ошибку или предупреждение:
find . -name "*jpg" -exec jpeginfo -c {} \; | grep -E "WARNING|ERROR"
Для получения списка поврежденных файлов:
find ./ -name *jpg -exec jpeginfo -c {} \; | grep -E "WARNING|ERROR" | cut -d " " -f 1
ImageMagick
Можно попробовать в ImageMagick через функцию
identify
проверять картинки на наличие инородных байтов:$ identify broken.jpg
broken.jpg JPEG 3264x2448 3264x2448+0+0 8-bit DirectClass 1.018MB 0.000u 0:00.010
identify: Corrupt JPEG data: 29359 extraneous bytes before marker 0xda `broken.jpg' @ warning/jpeg.c/JPEGWarningHandler/346
Также полезной будет функция
convert
:$ convert test.jpg out.jpg
convert: Corrupt JPEG data: 1072 extraneous bytes before marker 0xd8 `test.jpg' @ warning/jpeg.c/EmitMessage/231.
Но следует помнить, что IMagick проверяет только header, и при этом может провтыкать другие дефекты.
Bad Peggy
Программа сканирует картинки пачками. Работает просто — установить — указать путь папки — сканировать. Результаты можно посмотреть в виде превьюшек, а можно просто запросить список поврежденных файлов. Работает также с PNG, BMP и GIF.
Починить
ImageMagick
Поможет удалить посторонние/поврежденные байты. Для комплексного процесса поиска/починки поврежденных фоток можно использовать следующее:
$ for i in *.jpg; do
identify -regard-warnings "$i" > /dev/null;
if [ $? -eq 1 ]; then
mkdir fixed
echo "Writing fixed/$i"
jpegtran -perfect -copy all -outfile "fixed/$i" "$i"
fi
done
Можно также опробовать Perl-скрипт:
#!/usr/bin/perl
processFile("$_") foreach (@ARGV);
#recursively fix images
sub processFile {
my $file=shift;
return (-d "$file")?( do{ processFile("$_") foreach (<"$file"/*>) }) : `convert "$file" "$file"`;
}
Восстановление побитых изображений — платное удовольствие. Одна из самых популярных программ в сети — Stellar Phoenix JPEG Repair. Заявляют, что за 39$ могут починить абсолютно нечитабельные файлы.
PixRecovery — дорого и сердито, зато качественно. Можно скачать демо-версию и попробовать на деле.
Конспект:
- Поиск поврежденных фоток в больших галереях следует автоматизировать.
- Перед любыми манипуляциями с большим количеством изображений нужно создать бэкап.
- Искать поврежденные фотки можно с помощью imagecreatefromjpeg или jpeginfo.
- Починить изображение поможет ImageMagick или платные программы.
datacompboy
А конкретные примеры «качества» восстановления и состояния оригиналов?
Пока статья вышла «я прочитаю первые 5 ссылок поисковика для вас».