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

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

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

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


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

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


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

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

Пы.Сы. Как и в прошлый раз (http://forum.oszone.net/post-1810917.html) это необходимо для подключения скрипта к Тотал Коммандеру и ввода значений в колонки для сортировки.

Отправлено: 01:00, 29-04-2012

 

Аватара для El Sanchez

Ветеран


Contributor


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

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


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 <= 200 Then WScript.Echo "A"
If DHT >= 300 Then WScript.Echo "B"
BinaryStream.Close

Последний раз редактировалось El Sanchez, 04-05-2012 в 21:56. Причина: Не использовать! Пример неудачного скриптописания.

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

Отправлено: 18:36, 03-05-2012 | #2



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

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


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


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

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


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

Отправлено: 22:40, 03-05-2012 | #3


Ветеран


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

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


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

Отправлено: 23:49, 03-05-2012 | #4


Аватара для El Sanchez

Ветеран


Contributor


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

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


Цитата Iska:
поскольку не годится, ибо дико медленно »
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 <= 200 Then WScript.Echo "A"
If nDHTsz >= 300 Then WScript.Echo "B"

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

Отправлено: 21:55, 04-05-2012 | #5


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


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

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


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

2 El Sanchez Премного благодарен!
Видимо писал предыдущее сообщение в одно время с вами...
Сейчас проверил - срабатывает именно так, как необходимо!

Отправлено: 21:56, 04-05-2012 | #6


Ветеран


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

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


Цитата pzh2393:
Выяснилось, что следующие два байта после тэга "FF C4" указывают на размер секции DHT в 16-ричном виде... »
Просите коллегу El Sanchez'а, чтобы сделал; будет отрабатывать ещё шустрее.

Отправлено: 23:00, 04-05-2012 | #7


Аватара для El Sanchez

Ветеран


Contributor


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

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



Цитата pzh2393:
Выяснилось, что следующие два байта после тэга "FF C4" указывают на размер секции DHT в 16-ричном виде...
Можно сделать поиск НЕХ значения "FF C4" перевод следующих за этим двух байт в 10-ричное значение и в зависимости от размера выдача результата? »
pzh2393, так оно и реализовано. Из объектной переменной BinaryStream, содержащей весь файл, в переменную BinaryFile считывается порция данных размером nChunkSize и переводится в промежуточный строковый буфер sRes до тех пор, пока sRes не будет содержать в себе маркер SOS (FFDA). Из буфера вычленяется секция DHT (разница между вхождением в sRes значения FFDA и первого вхождения маркера DHT (FFCA)) и присваивается переменной sHuffSection. Далее работа идет с этой переменной. В цикле ищутся все вхождения FFCA (таблиц может быть несколько), берутся 4 символа (2 байта) после маркера, переводятся в число, результат добавляется к nDHTsz - общему числу байт, переменная sHuffSection уменьшается на длину маркера и длину данных и далее обрабатывается в цикле, пока есть вхождения FFCA.

Отправлено: 11:35, 05-05-2012 | #8



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - [решено] подсчет времени выполнения командного файла mitiya Скриптовые языки администрирования Windows 5 15-04-2014 10:42
VBS/WSH/JS - определение размера файла D_e_n_n Скриптовые языки администрирования Windows 9 24-02-2012 17:09
увеличение размера файла vlasoft Хочу все знать 10 16-10-2011 18:01
JPEG из VOB-файла kankot Видео и аудио: обработка и кодирование 1 28-12-2009 13:10
Информация о содержимом файла: подсчет слов и т.д. Balbec Программирование в *nix 2 08-07-2008 22:36




 
Переход