VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Ответить
Аватара пользователя
pzh2393

VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение pzh2393 »

Доброй ночи!

Помогите, пожалуйста, в написании VBS скрипта подсчитывающего колиество байт DHT секции (Таблицы Хаффмана) JPEG файла.

т.е. необходимо в стуктуре JPEG файла найти тэг "FF C4" и посчитать количество байт до следующей секции (обычно SOS "Начало Сканирования" = "FF DA").



Дополнительно прошу сделать условие, что если размер секции не превышает 200 байт выводить скажем параметр "А", а если превышает 300 - тогда "В". Значения находящиеся в промежутке меня пока не интересуют.



Пы.Сы. Как и в прошлый раз (
VBS/WSH/JS - [решено] вывод данных с конца файла
) это необходимо для подключения скрипта к Тотал Коммандеру и ввода значений в колонки для сортировки.
Аватара пользователя
El Sanchez

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение El Sanchez »

pzh2393,



Код:

Код: Выделить всё

Path =  "c:\temp\Chicken.JPG"
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1
BinaryStream.Open
BinaryStream.LoadFromFile Path
BinaryFile = BinaryStream.Read
For i = 1 To LenB(BinaryFile)
	If AscB(MidB(BinaryFile, i, 1)) < 16 Then S = S & "0" & Hex(AscB(MidB(BinaryFile, i, 1))) Else S = S & Hex(AscB(MidB(BinaryFile, i, 1)))
Next
DHT = (InStr(S, "FFDA")-InStr(S, "FFC4"))/2-2
If DHT = 300 Then WScript.Echo "B"
BinaryStream.Close
Аватара пользователя
pzh2393

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение pzh2393 »

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

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение pzh2393 »

El Sanchez, я пробовал данный подход, и даже не стал выкладывать, поскольку не годится, ибо дико медленно. pzh2393, для данного случая Вам WSH не подойдёт — ну, нет у него вменяемых средств для подобной работы. Лучше попросите о том же в соседней ветке:
Программирование
, если Вам подойдёт исполняемый файл.
Аватара пользователя
El Sanchez

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение El Sanchez »

Цитата Iska:



поскольку не годится, ибо дико медленно
VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла




Iska, да уж, тормоз еще тот. Каюсь, тестировал на файле маленького размера.

pzh2393, предлагаю вариант №2, побыстрее:



Код:

Код: Выделить всё

sPath = "c:\temp\e.jpg"
nChunkSize = 1024
Set BinaryStream = CreateObject("ADODB.Stream")
BinaryStream.Type = 1
BinaryStream.Open
BinaryStream.LoadFromFile sPath
Do While InStr(sRes, "FFDA") = 0
	BinaryFile = Empty
	BinaryFile = BinaryStream.Read(nChunkSize)	
	For i = 1 To nChunkSize
		sRes = sRes & Right("00" & Hex(AscB(MidB(BinaryFile, i, 1))), 2)
	Next
	If InStr(sRes, "FFDA") > 0 Then
		sHuffSection = Mid(sRes, InStr(sRes, "FFC4"), InStr(sRes, "FFDA")-InStr(sRes, "FFC4"))
		Do While InStr(sHuffSection, "FFC4") > 0
			nDHTsz = nDHTsz + CInt("&H" & Mid(sHuffSection, 5, 4)) 
			sHuffSection = Right(sHuffSection, Len(sHuffSection)-CInt("&H" & Mid(sHuffSection, 5, 4))*2-4)
		Loop
	End If
Loop
If nDHTsz = 300 Then WScript.Echo "B"
BinaryStream.Close
Аватара пользователя
pzh2393

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение pzh2393 »

Может всетаки получится, если упростим условие?

Выяснилось, что следующие два байта после тэга "FF C4" указывают на размер секции DHT в 16-ричном виде...

Можно сделать поиск НЕХ значения "FF C4" перевод следующих за этим двух байт в 10-ричное значение и в зависимости от размера выдача результата?



2 El Sanchez Премного благодарен!

Видимо писал предыдущее сообщение в одно время с вами...

Сейчас проверил - срабатывает именно так, как необходимо!
Аватара пользователя
Iska

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение Iska »

Цитата pzh2393:



Выяснилось, что следующие два байта после тэга "FF C4" указывают на размер секции DHT в 16-ричном виде...
VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла




Просите коллегу El Sanchez'а, чтобы сделал; будет отрабатывать ещё шустрее.
Аватара пользователя
El Sanchez

Re: VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла

Сообщение El Sanchez »

Цитата pzh2393:



Выяснилось, что следующие два байта после тэга "FF C4" указывают на размер секции DHT в 16-ричном виде...

Можно сделать поиск НЕХ значения "FF C4" перевод следующих за этим двух байт в 10-ричное значение и в зависимости от размера выдача результата?
VBS/WSH/JS - [решено] Подсчет размера DHT секции JPEG файла




pzh2393, так оно и реализовано. Из объектной переменной BinaryStream, содержащей весь файл, в переменную BinaryFile считывается порция данных размером nChunkSize и переводится в промежуточный строковый буфер sRes до тех пор, пока sRes не будет содержать в себе маркер SOS (FFDA). Из буфера вычленяется секция DHT (разница между вхождением в sRes значения FFDA и первого вхождения маркера DHT (FFCA)) и присваивается переменной sHuffSection. Далее работа идет с этой переменной. В цикле ищутся все вхождения FFCA (таблиц может быть несколько), берутся 4 символа (2 байта) после маркера, переводятся в число, результат добавляется к nDHTsz - общему числу байт, переменная sHuffSection уменьшается на длину маркера и длину данных и далее обрабатывается в цикле, пока есть вхождения FFCA.
Ответить

Вернуться в «Скриптовые языки администрирования Windows»