Показать полную графическую версию : Поиск "битых" изображений
После восстановления изображений с винчестера часть из них оказались нерабочими.
Можно ли как-то автоматически отсортировать такие файлы? основная ошибка - часть файла "обнулена" (содержит строки FF FF FF FF...).
Или может быть кто-то знает утилиту проверяющую соответствие структуры JPEG?
На ловца и зверь бежит. Несколько лет назад случилось аналогичное ЧП на сервере файл-помойке фоток. Написал консольную утилиту.
testjpeg.exe filename
возвращает errorlevel:
0 - если filename - корректное jpg изображение
1 - если filename - некорректное jpg изображение))
255 - если filename несуществует.
Спасибо!
А можно чуть подробнее как именно происходит проверка изображения? по каким критериям?
Могу предложить такой вариант:
Option Explicit
Dim strSourceFolder
Dim strDestFolder
Dim objFile
Dim objMagickImage
If WScript.Arguments.Count = 2 Then
strSourceFolder = WScript.Arguments.Item(0)
strDestFolder = WScript.Arguments.Item(1)
With WScript.CreateObject("Scripting.FileSystemObject")
If .FolderExists(strSourceFolder) Then
If .FolderExists(strDestFolder) Then
Set objMagickImage = WScript.CreateObject("ImageMagickObject.MagickImage.1")
For Each objFile In .GetFolder(strSourceFolder).Files
Select Case LCase(.GetExtensionName(objFile.Name))
Case "jpg", "jpeg", "jpe"
On Error Resume Next
objMagickImage.Identify "-format", "Name:[%f] Type:[%m] Dim:[%wx%hx%z]\r\n", objFile.Path
If Err.Number = 0 Then
On Error Goto 0
objFile.Move strDestFolder & "\"
Else
Err.Clear
On Error Goto 0
End If
Case Else
' Nothing to do
End Select
Next
Set objMagickImage = Nothing
Else
WScript.Echo "Destination folder [" & strDestFolder & "] not found."
WScript.Quit 2
End If
Else
WScript.Echo "Source folder [" & strSourceFolder & "] not found."
WScript.Quit 2
End If
End With
Else
WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source folder> <Destination folder>"
WScript.Echo "Example: cscript.exe //nologo " & WScript.ScriptName & " ""E:\Песочница\0335\Source"" ""E:\Песочница\0335\Destination"""
WScript.Quit 1
End If
WScript.Quit 0
с использованием ImageMagick (http://www.imagemagick.org/script/index.php).
pzh2393, не волнуйся, по "хорошим критериям". проверь сам её работу и убедись.
rem e:\хххporno - например коллекция фоток, где есть битые.
md %temp%\bad_jpg
cd /d e:\хххporno
dir /s /b *.jpg >%temp%\jpglist.txt
for /f "delims=*" %%i in (%temp%\jpglist.txt) do (testjpeg "%%i" || (move "%%i" %temp%\bad_jpg\)
и смотрим потом папку %temp%\bad_jpg
по "хорошим критериям" »
Я как бы и не сомневался... просто хотел убедиться, что это будет универсальный вариант под все мои частные случаи. Предпочитаю знать наверняка.
Пы.Сы. Обязательно проверю и напишу результаты с впечатлениями! Ещё раз спасибо!
Могу предложить такой вариант: »
Спасибо! Тоже попробую.
Цитата Опиум:
и смотрим потом папку %temp%\bad_jpg »
Что-то предложенный Вами командный файл у меня не выполняется... может выплнить то же самое на vbs?
Решил скормить утилите пару файлов напрямую
c:\testJPEG\testjpeg.exe c:\testJPEG\000-011.JPG
pauseМне постоянно возвращает "0", хотя некоторые файлы явно нечитаемы, а часть опробованных имеет "обнуленные" области.
Опиум, не возвращает положительный код ошибки на специально подготовленных «битых» файлах *.jpg. Windows XP SP3.
pzh2393 хм. можешь выложить пример битого jpg? который вьювером не открывается, а моя прога даёт errorlevel=0.
з.ы. прога писана на дельфях с подгрузкой файла, как jpegimage
Опиум, мои файлы слишком тяжелые (от 3Mb), форум не даст вложить такой размер, проще на более мелком файле сгенерировать похожую ошибку.
107813 это пример для последовательного (Baseline) режима кодирования где четко видна граница запорченной области, а идентичная ошибка для прогрессивного режима не имеет такого явного визуального дефекта, поскольку ошибка может прийтись на один из последних "сканов" и найти её можно только анализом структуры или при попытке редактирования.
pzh2393, стоп. указанный тобой файл открывается вьювером. да - изображение там подпорчено, но с т.з. человека.
В моём случае надо было хотябы разделить миллион файлов на те, что просматриваются вьювером и те на которых он даёт ошибку.
Опиум, вьювер вьюверу тоже рознь! некоторые могут исправлять незначительные ошибки декодирования, а некоторые нет.
pzh2393, тогда сложно ИМХО корректно удовлетворить твою портребность. Вьювер - тоже прога использующая какую либо графич библиотеку. У тебя есть вьювер, который ругается на опубликованный тобой файл?
Моя прога использует объект из дельфи для определения корректности jpeg.
[offtop]
мой знакомый получил задание написать прогу, которая определяет, отредактирована ли фотография в каком-либо граф редакторе или нет. Причем не на основе тегов, которые оставляет фотодевайс или редактор, а на основе анализа содержимого изображения. Сложно.. но у него есть успехи. Показывал, но саму прогу не даёт)
pzh2393, c «ImageMagick» — всё нормально:
E:\Песочница\0335>"C:\Program Files\ImageMagick-6.3.4-Q8\identify.exe" IK-RA.jpg
IK-RA.jpg JPEG 798x652 798x652+0+0 DirectClass 8-bit 189.443kb 0.047u 0:01
identify.exe: Corrupt JPEG data: premature end of data segment `IK-RA.jpg'.
identify.exe: Unsupported marker type 0x37 `IK-RA.jpg'.
да - изображение там подпорчено, но с т.з. человека. »
Это шутка такая?
Iska, отлично что есть крутая утилита решающая вопрос. Она может быть использована как отдельный экзешник или нужно её инсталлировать пакетом?
Раз в вариантах поставки есть и zip-вариант, то можно и отдельно. Вот что говорит «Dependency Walker»:
http://img577.imageshack.us/img577/4513/2i56.png
У тебя есть вьювер, который ругается на опубликованный тобой файл? »
Пример вьювера сейчас не приведу... мне необходимо чтобы изображение не вызывало ошибки при открытии в Фотошоп, который хоть и не является вьювером, но ругается на несоответствии структуры файла и не открывает его.
Моя прога использует объект из дельфи для определения корректности jpeg. »
Ранее я спрашивал на основе каких параметров происходит определение именно для определения подходит ли мне такое решение.
Под описанную в шапке задачу программа подходит лишь частично, а хотелось бы универсальное решение.
c «ImageMagick» — всё нормально: »
Спасибо, буду пробовать, хотя вариант с маленькой консольной утилитой мне нравился больше чем многомегабайтная "лишняя" программа в системе.
kiripanda
10-12-2013, 23:10
CMD с jpegtran.exe http://forum.wincmd.ru/viewpost.php?p=56916
pzh2393, ок. есть у меня утилитка "посложнее". На твое фото ругнулась. Утилитка делает из файла иконку.
d:\>jpegscale8
JPEGscale8.EXE file_picture.jpg max_dimension_in_Pixels
error: 255
rem это твой файл
d:\>jpegscale8 G:\system\_temp\testjpeg.jpg 128
G:\system\_temp\testjpeg.jpg error: 1
rem это хорошая фотка
d:\>jpegscale8 G:\system\_temp\20130921_082640.jpg 128
G:\system\_temp\20130921_082640.jpg error: 0
возвращает errorlevel и при успехе создаёт файл иконку именем *_thumb.JPG
http://makware.ru/download/jpegutils.rar
© OSzone.net 2001-2012
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.