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

Показать сообщение отдельно

Ветеран


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

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


Jr.Janitor, я тоже в своё время искал что-либо подобное, но ничего внятного не нашёл. Я ограничился таким способом:

1. Устанавливал ImageMagick, конкретно версию для работы с 8-битным цветом отсюда: ImageMagick: Install from Binary Distribution.

2. Использовал такой сценарий vbscript:
читать дальше »
Код: Выделить весь код
Option Explicit

On Error Resume Next

Const ERROR_SUCCESS = 0

Dim objArgs
Dim objImg
Dim strResult
Dim sMsgs

Set objArgs = WScript.Arguments

If objArgs.Count <> 1 Then
	WScript.Echo _
		"Usage:   " & WScript.ScriptName & " <FileNamesTemplate>" & vbCrLf & vbCrLf & _
		"Example: " & WScript.ScriptName & " ""c:\windows\*.bmp"""
	
	WScript.Quit 2
Else
	Set objImg = CreateObject("ImageMagickObject.MagickImage.1")
	
	strResult = objImg.Identify("-format", "Name:[%f] Type:[%m] Dim:[%wx%hx%z]\r\n", objArgs(0))
	'strResult = Replace(strResult, vbCrLf, " \n ")
	
	If Err.Number <> ERROR_SUCCESS Then
		ShowError
		Set objImg = Nothing
		WScript.Quit 1
	Else
		'WScript.Echo "NOERROR" & vbCrLf & strResult
		WScript.Echo strResult
		Set objImg = Nothing
		WScript.Quit 0
	End If
End If

'=========================================================================================
Sub ShowError
	sMsgs = ""

	If BasicError(Err.Number) > 5000 Then
		'sMsgs = " ImageMagickObject" & vbCrLf
	End If

	'WScript.Echo sMsgs & vbCrLf & Err.Number & ": " & Err.Description
	WScript.Echo Err.Description
End Sub
'=========================================================================================

'=========================================================================================
Function BasicError(e)
	BasicError = e And &HFFFF&
End Function
'=========================================================================================


3. Привязывал скрипт для выделенного файла в Far Manager посредством «User Menu» и макроса для проверки.

Выглядело в результате сие примерно так:
читать дальше »
Код: Выделить весь код
╔═════════════ Ошибок не обнаружено ═════════════╗
║ Name:[PageAll.jpg] Type:[JPEG] Dim:[616x166x8] ║
║                                                ║
╟────────────────────────────────────────────────╢
║                     { OK }                     ║
╚════════════════════════════════════════════════╝

Или так (Ваш файл):
читать дальше »
Код: Выделить весь код
╔═══════════════════════════════════ Найдены ошибки ════════════════════════════════════╗
║ identity: 325: Corrupt JPEG data: premature end of data segment `C:\attachment.jpg':  ║
║       identity: 325: Corrupt JPEG data: bad Huffman code `C:\attachment.jpg':         ║
║                                                                                       ║
╟───────────────────────────────────────────────────────────────────────────────────────╢
║                                        { OK }                                         ║
╚═══════════════════════════════════════════════════════════════════════════════════════╝


Подобным же образом у меня сделан скрипт на группу выделенных в Far Manager'е файлов. Приводить его не буду, ибо основная идея показана во втором пункте: попытка идентификации изображения, отлов возможной ошибки при этом, далее выход из скрипта с установлением нулевого/не нулевого кода ошибки, который затем используется во внешнем приложении (в данном случае — Far Manager'е) для отображения соответствующего сообщения, а как и чем будете пользоваться Вы — решать Вам.

К сожалению, в то время утилита «identify.exe» ImageMagick (как сейчас — не знаю) не устанавливала ненулевой код возврата при ошибке в изображении, а так можно было бы вполне обойтись без скрипта VBScript (в моём, понятно, случае), одним пакетным файлом с вызовом «identify.exe».

P.S. Вполне возможно, что я плохо искал, или что ситуация изменилась за прошедшее время, и коллеги посоветуют более простое решение.
Это сообщение посчитали полезным следующие участники:

Отправлено: 20:33, 17-06-2011 | #2