|
Компьютерный форум OSzone.net » Сфера Microsoft » Программное обеспечение Windows » Графика - Пакетная проверка кучи jpg/jpeg файлов на предмет повреждений |
|
|
Графика - Пакетная проверка кучи jpg/jpeg файлов на предмет повреждений
|
Новый участник Сообщения: 33 |
Профиль | Отправить PM | Цитировать
На форуме (да и на необъятных просторах сети) поднято множество тем по восстановлению потерянных/поврежденных фотографий, но иногда бывает нужно просто перебрать все графические файлы (наверно 99% - jpg) в каталогах и найти те, что пострадали. Пробовал различные пакетные конверторы (больше всех понравился IrfanView и FastStone), в надежде на получение списка файлов, содержащих ошибки, но все совершенно нормально открывали порченные файлы.
Это расстраивает по 2м причинам: 1. я был уверен, что должно быть великое множество средств диагностики графических файлов 2. может ли быть такое, что явное повреждение данных jpeg-файла не может быть диагностировано? Собственно можно тупо просмотреть все фотки в виде превьюшек и выловить поврежденные в-ручную, но я уверен, что сдуюсь после первой же сотни фоток и замыленный глаз станет пропускать все подряд, а у меня их почти полный 2тб винт, это несколько сотен тысяч фоток (и моих и от друзей), сам процесс восстановления занимал более недели, а он шел без моего присутствия и все что я знаю - при восстановлении были потери. Просил одного знакомого программера сделать эксперимент - открыть средствами GDI заведомо битый JPG и посмотреть, возвращает ли библиотечка хоть какую-то ошибку, тогда можно было-бы написать небольшую програмку по проверки файлов из списка, с формированием списков хороших/поврежденных файлов, но тот уперся, сославшись, что если просмотрщик показывает битый JPG и не ругается, то и какой-нить "TJpegImage" не позволит обнаружить повреждение. * прикладываю пример умышленно "битого" Jpeg`а, может кто чего попробует и посоветует? |
|
Отправлено: 18:54, 17-06-2011 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Jr.Janitor, я тоже в своё время искал что-либо подобное, но ничего внятного не нашёл. Я ограничился таким способом:
1. Устанавливал ImageMagick, конкретно версию для работы с 8-битным цветом отсюда: ImageMagick: Install from Binary Distribution. 2. Использовал такой сценарий vbscript: 3. Привязывал скрипт для выделенного файла в Far Manager посредством «User Menu» и макроса для проверки. Выглядело в результате сие примерно так: Или так (Ваш файл): Подобным же образом у меня сделан скрипт на группу выделенных в Far Manager'е файлов. Приводить его не буду, ибо основная идея показана во втором пункте: попытка идентификации изображения, отлов возможной ошибки при этом, далее выход из скрипта с установлением нулевого/не нулевого кода ошибки, который затем используется во внешнем приложении (в данном случае — Far Manager'е) для отображения соответствующего сообщения, а как и чем будете пользоваться Вы — решать Вам. К сожалению, в то время утилита «identify.exe» ImageMagick (как сейчас — не знаю) не устанавливала ненулевой код возврата при ошибке в изображении, а так можно было бы вполне обойтись без скрипта VBScript (в моём, понятно, случае), одним пакетным файлом с вызовом «identify.exe». P.S. Вполне возможно, что я плохо искал, или что ситуация изменилась за прошедшее время, и коллеги посоветуют более простое решение. |
Отправлено: 20:33, 17-06-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Дополнение:
1. Jr.Janitor, если у Вас есть кто может написать — то можно использовать библиотеки ImageMagick для получения утилиты с потребной именно Вам функциональностью. 2. После поиска обнаружилось, что «identify.exe» всё-таки устанавливает errorlevel при использовании параметра «-regard-warnings»: |
Последний раз редактировалось Iska, 18-06-2011 в 15:02. Причина: Был добавлен пропущенный предлог «с» Отправлено: 20:59, 17-06-2011 | #3 |
Ветеран Сообщения: 3806
|
Профиль | Отправить PM | Цитировать Iska, у ImageMagick глобальная проблема с именами файлов нелатинницей. Приходилось запускать его через обёртку, которая переименовывает файл в латинницу, подаёт на вход IM'а, затем переименовывает обратно :-/
|
Отправлено: 20:15, 18-06-2011 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Busla, в каком смысле? Что выдаёт stdout в ANSI (1251)? Это да, есть такое, но не более. А в остальном нормально отрабатывает, что в скрипте, что в утилите «identify.exe».
А у Вас что не срабатывает (у меня старая версия — «ImageMagick 6.3.4»)? Можете привести пример? |
|
Отправлено: 22:16, 18-06-2011 | #5 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Iska, Огромнейшее спасибо!!!
1. Очень интересная библиотека. Жаль, что тяжелая и надо инсталлить, позже попробую их 8-битную портабельную версию. 2. Скачал текущую версию 6.7.0, в ней для отображения ошибок кроме -regard-warnings нужен еще и -verbose. Мой сменщик помог с батником, закинул все домой РАдмином, запустил, теперь буду ждать результата. вот такой скрип получился: @Echo off setlocal EnableExtensions set IM="%ProgramFiles%\ImageMagick-6.7.0-Q8\identify.exe" set WD="%1" if not defined WD set WD="%CD%" set Log="%CD%\%~n0.txt" set N=0 set T=0 set P=. set CR= pushd %WD% for /f "tokens=1 delims=" %%F in ('dir /a-d /b /s') do call :Check "%%F" popd echo Corrupted or unknown formats: %N%/%T% goto :End :Check if not "%P%"=="%~dp1" (set P=%~dp1 echo %~dp1 ) if "%T:~-1%"=="0" set /P nul=%N%/%T%%CR%<nul set /a T+=1 %IM% -verbose -regard-warnings %1>nul 2>nul || ( echo %~1>>%Log% set /a N+=1 ) exit /b :End |
Последний раз редактировалось Jr.Janitor, 21-06-2011 в 17:16. Отправлено: 14:29, 21-06-2011 | #6 |
Новый участник Сообщения: 33
|
Профиль | Отправить PM | Цитировать Батник пришлось доводить до ума... потерял лишние 2-3 дня - вываливался, гад.
Теперь для экономии времени и нервов, в начале сохраняет каталог в файлик (все в текущем каталоге, так что с поврежденного диска не запускать!), и если файлик имеется, то используется уже готовый (экономится примерно 15 минут времени запуска). Далее добавил срез данных (ну, всего-то 2 параметра - кол-во найденных ошибок и последний проверянный файл по сохраненному каталогу), как в старые добрые времена, когда машины висли каждые 2 часа Так же улучший отображаемую на экран инфу - тек. каталог, штамп времени и счетчики файлов. Проверяется уже 4е сутки без сбоев, на вторые сутки устал от воя кулера, запустил Эверест - оказалось, температура проца 81 градус (АМД), диска - 65 (ИБМ). Срочно принял меры, сейчас, температура не поднимается выше 75/56 (проц/диск). Текущая статистика - 3125 битых из 85280 проверянных (всего почти 313тыс). Большая часть по списку - спотыкания об кириллицу - меня особо не беспокоит, ибо не мои это фотки, у меня все имена исключительно латиницей. Через неделю жду окончательный вердикт. Правленный батник: @Echo off setlocal EnableExtensions set IM="%ProgramFiles%\ImageMagick-6.7.0-Q8\identify.exe" set WD="%1" if not defined WD set WD="%CD%" set Log="%CD%\%~n0.txt" set Lst="%CD%\%~n0.lst" set Stat="%CD%\%~n0.stat" set N=0 set T=0 set CR= if exist %Stat% for /f "usebackq tokens=1,2" %%N in (%Stat%) do set N=%%N & set T=%%O if %T%==0 (set P= ) else set P=skip=%T% pushd %WD% if not exist %Lst% dir /a-d /b /s *.jpg>%Lst% for /f "usebackq %P% tokens=1 delims=" %%F in (%Lst%) do call :Check "%%F" popd echo Corrupted or unknown formats: %N%/%T% goto :End :Check echo %N% %T% %date% %time%>%Stat% if not "%P%"=="%~dp1" set "P=%~dp1" & echo %date% %time% %~dp1 set /P nul=%CR%%N%/%T% <nul set /a T+=1 %IM% -verbose -regard-warnings %1>nul 2>nul set Err=%ErrorLevel% if %Err%==1 echo %~1>>%Log% & echo %~1 if %Err%==1 set /a N+=1 exit /b :End |
Отправлено: 20:47, 29-06-2011 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Jr.Janitor:
У Вас задача, оказывается, совсем другая, нежели решал я — Вам нужна была полная проверка всех наличествующих *.jpg файлов. Теперь стало ясно. |
|
Отправлено: 05:44, 30-06-2011 | #8 |
-!- Сообщения: 3792
|
Профиль | Отправить PM | Цитировать Попробовал последний скрипт с ImageMagick-6.7.1-Q8. 80% провернных фото посчитал корявыми или неизвестными (Corrupted or unknown formats), хотя при просмотре искажений не наблюдаю.
|
Отправлено: 12:30, 14-07-2011 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать dascon, а для одиночного файла, одного из тех, что как бы «Corrupted or unknown formats», скрипт из #2 что «говорит»?
|
Отправлено: 16:13, 14-07-2011 | #10 |
|
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
[решено] Вирус зашифровал doc,xls,rar,zip,jpeg,jpg,psd | gamber | Лечение систем от вредоносных программ | 3 | 05-11-2009 16:49 | |
CMD/BAT - Проверка на предмет установленного SP3 | Cibersoft Prolex | Скриптовые языки администрирования Windows | 1 | 07-05-2009 09:03 | |
Размеры файлов JPEG в вертикальном и горизонтальном соотношении | Absolut | Хочу все знать | 6 | 01-08-2005 01:00 | |
преобразование jpg в jpeg | strannic2005 | Хочу все знать | 7 | 27-12-2004 19:19 | |
Пакетная конвертация или преобразование графических файлов | UTU | Программное обеспечение Windows | 12 | 09-06-2004 19:55 |
|