Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Поиск "битых" изображений

Ответить
Настройки темы
VBS/WSH/JS - Поиск "битых" изображений

Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


После восстановления изображений с винчестера часть из них оказались нерабочими.
Можно ли как-то автоматически отсортировать такие файлы? основная ошибка - часть файла "обнулена" (содержит строки FF FF FF FF...).
Или может быть кто-то знает утилиту проверяющую соответствие структуры JPEG?

Отправлено: 15:27, 09-12-2013

 

Ветеран


Сообщения: 544
Благодарности: 35

Профиль | Сайт | Отправить PM | Цитировать


Вложения
Тип файла: rar testjpeg.rar
(98.5 Kb, 89 просмотров)

На ловца и зверь бежит. Несколько лет назад случилось аналогичное ЧП на сервере файл-помойке фоток. Написал консольную утилиту.

testjpeg.exe filename

возвращает errorlevel:
0 - если filename - корректное jpg изображение
1 - если filename - некорректное jpg изображение))
255 - если filename несуществует.

-------
консольный клиент telegram для Windows: www.elapser.info

Это сообщение посчитали полезным следующие участники:

Отправлено: 18:25, 09-12-2013 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


Спасибо!
А можно чуть подробнее как именно происходит проверка изображения? по каким критериям?

Отправлено: 18:59, 09-12-2013 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Могу предложить такой вариант:
читать дальше »
Код: Выделить весь код
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.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:01, 09-12-2013 | #4


Ветеран


Сообщения: 544
Благодарности: 35

Профиль | Сайт | Отправить PM | Цитировать


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

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 19:11, 09-12-2013 | #5


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Опиум:
по "хорошим критериям" »
Я как бы и не сомневался... просто хотел убедиться, что это будет универсальный вариант под все мои частные случаи. Предпочитаю знать наверняка.
Пы.Сы. Обязательно проверю и напишу результаты с впечатлениями! Ещё раз спасибо!

Цитата Iska:
Могу предложить такой вариант: »
Спасибо! Тоже попробую.

Отправлено: 19:27, 09-12-2013 | #6


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать


Цитата Опиум:
и смотрим потом папку %temp%\bad_jpg »
Что-то предложенный Вами командный файл у меня не выполняется... может выплнить то же самое на vbs?

Решил скормить утилите пару файлов напрямую
Код: Выделить весь код
c:\testJPEG\testjpeg.exe c:\testJPEG\000-011.JPG
pause
Мне постоянно возвращает "0", хотя некоторые файлы явно нечитаемы, а часть опробованных имеет "обнуленные" области.

Последний раз редактировалось pzh2393, 09-12-2013 в 20:43.


Отправлено: 19:50, 09-12-2013 | #7


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Опиум, не возвращает положительный код ошибки на специально подготовленных «битых» файлах *.jpg. Windows XP SP3.

Отправлено: 21:36, 09-12-2013 | #8


Ветеран


Сообщения: 544
Благодарности: 35

Профиль | Сайт | Отправить PM | Цитировать


pzh2393 хм. можешь выложить пример битого jpg? который вьювером не открывается, а моя прога даёт errorlevel=0.
з.ы. прога писана на дельфях с подгрузкой файла, как jpegimage

-------
консольный клиент telegram для Windows: www.elapser.info


Отправлено: 15:38, 10-12-2013 | #9


Пользователь


Сообщения: 93
Благодарности: 2

Профиль | Отправить PM | Цитировать



Опиум, мои файлы слишком тяжелые (от 3Mb), форум не даст вложить такой размер, проще на более мелком файле сгенерировать похожую ошибку.
IK-RA.jpg это пример для последовательного (Baseline) режима кодирования где четко видна граница запорченной области, а идентичная ошибка для прогрессивного режима не имеет такого явного визуального дефекта, поскольку ошибка может прийтись на один из последних "сканов" и найти её можно только анализом структуры или при попытке редактирования.

Последний раз редактировалось pzh2393, 10-12-2013 в 16:12.


Отправлено: 16:04, 10-12-2013 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - Поиск "битых" изображений

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Поиск слова в txt затем поиск по маске "(383)" и вывод инфы rustoss AutoIt 10 29-09-2011 15:27
Вместо "Мой компьютер" открывается "Поиск" и др. ZoolooS Лечение систем от вредоносных программ 5 20-06-2008 14:11
Разное - [решено] Вместо "Мой компьютер" или при двойном щелчке на папке открывается "Поиск" ZoolooS Microsoft Windows 2000/XP 4 18-06-2008 16:34
*Теория* | Очистка реестра от "битых" ссылок на файлы DedAlex Программирование и базы данных 2 01-11-2006 23:08
Запретить/удалить пункт "Programs" ("Программы") из меню кнопки "Start" ("Пуск") submaster Microsoft Windows NT/2000/2003 5 13-09-2006 12:29




 
Переход