|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - в HEX записана png-картинка, её нужно перевести обратно в Byte Array и записать в png |
|
VBS/WSH/JS - в HEX записана png-картинка, её нужно перевести обратно в Byte Array и записать в png
|
Новый участник Сообщения: 16 |
Здравствуйте!
Помогите переписать скрипт с JS на VBS var outStreamW = new ActiveXObject("ADODB.Stream"); // Text stream in Unicode charset var outStreamA = new ActiveXObject("ADODB.Stream"); // Text stream in ISO-8859-1 charset var binStr = ''; outStreamW.Type = 2; outStreamW.Open(); // couples of HEX values outStreamW.WriteText( hex2text( '89504E470D0A1A0A0000000D4948445200000027000000420803000000E3443FEE0000000C504C5445F0EEEEF95353F59393' ) ); outStreamW.WriteText( hex2text( 'FF04047F58B0FF000000097048597300002E2300002E230178A53F760000014249444154789CED955902C42008434DB8FF9D' ) ); outStreamW.WriteText( hex2text( 'A7AD4BD9AC1C60FCAA363E10115AF38361251D404D27520242A40414290171EB0A409112F0F6AEE2E1C33A033BEA0C1CA413' ) ); outStreamW.WriteText( hex2text( '900374022ECE37900BF30D5494EBB380FB061AA7F6401AC41EE8CEB803D20176C007C76B1C8000D0930A5D4A208D35658D61' ) ); outStreamW.WriteText( hex2text( '9069D28A3821E6CC60FB5E1013A2B679AB7CB7749B026F1A7ADB74157362EE49B9417D1C1349172D636DAF83F1DE7EEB3889' ) ); outStreamW.WriteText( hex2text( 'F729E7B943EE7434B762CFA1269C81EBF74B1BC035E3B80215671DB267E14AABF523E6C57B46F3E315B6960BA16DC4B49E89' ) ); outStreamW.WriteText( hex2text( 'A4F3282F0BD4897F1A2C7606D43BC35F57D7857A1375CF0DF9C297E87A6AF9040B3A2E9DAF48C11134575A32DD0439A0D7AD' ) ); outStreamW.WriteText( hex2text( 'A70857846C00D4DF50349D4C55A45D5B31B2F104231269D95D2DA12F317D96ABBA0BDE5692B9A3EA847AF1794654544EBAE9' ) ); outStreamW.WriteText( hex2text( '5AC7F103F62B06FEC580AB3F0000000049454E44AE426082' ) ); outStreamW.Position = 0; //don't forget it or .Read will return 0 bytes outStreamA.Type = 2; outStreamA.Charset = 'ISO-8859-1'; // to avoid character conversion upper 127 ascii code outStreamA.Open(); outStreamW.CopyTo( outStreamA ); // Copy unicoded stream to ISO-8859-1 stream outStreamA.SaveToFile( 'test.png', 2 ); // save file as... outStreamW.Close(); outStreamA.Close(); // converts couples of HEX values to a string of chars function hex2text( inHexStr ){ binStr = ''; //using global variable will be faster, I think. for ( i = 0; i < ( inHexStr.length / 2 ); i++ ){ binStr += String.fromCharCode( '0x' + inHexStr.substr( i * 2, 2 ) ); } return binStr; } |
|
Отправлено: 08:45, 05-05-2013 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата semen77:
Во-первых, есть вариант гораздо проще: WSH: пример работы с бинарными данными через ADODB.Stream. Во-вторых, byte-array based не единственный способ хранения: vbscript: кодирование по алгоритму base64 (и ещё один способ что-то не найду). А так: WSH: чтение и запись бинарных данных. |
|
Отправлено: 13:42, 05-05-2013 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать png - не панацея, просто взято в качестве образца.
Вот нашел вариант: ' Convert Byte-Array to VBScript ANSI string (c)Paul Randall Function ByteArray2String(bArr) Dim OriginalLocale OriginalLocale = SetLocale("en-us") With CreateObject("ADODB.Stream") .Type = 1 'adTypeBinary .Open .Write bArr .Position = 0 .Type = 2 'adTypeText .Charset = "windows-1251" ByteArray2String = .Readtext End With SetLocale OriginalLocale End Function 'Convert VBScript ANSI string to Byte-Array (c)Paul Randall Function String2ByteArray(str) Dim OriginalLocale OriginalLocale = SetLocale("en-us") With CreateObject("ADODB.Stream") .Type = 2 'adTypeText .Charset = "windows-1251" .Open .WriteText str, 0 .Position = 0 .Type = 1 'adTypeBinary String2ByteArray = .Read End With SetLocale OriginalLocale End Function Function ReadBinaryFile(filename) Dim bArr With CreateObject("ADODB.Stream") .Type = 1 'adTypeBinary .Open .LoadFromFile filename bArr = .Read .Close ReadBinaryFile = bArr End With End Function Function SaveBinaryData(filename, byteArray) Const adSaveCreateOverWrite = 2 With CreateObject("ADODB.Stream") .Type = 1 'adTypeBinary .Open .Write byteArray .SaveToFile filename, adSaveCreateOverWrite .Close End With End Function '============================================================ ' Проверка file = "input.jpg" file_out = "output.jpg" Dim file, file_out, Arr, strArr, strHex, x, i ' Читаем бинарный файл и преобразуем его в строку из hex значений Arr = ReadBinaryFile(file) strArr = ByteArray2String(Arr) strHex = "" For i = 1 To Len(strArr) x = Hex(Asc(Mid(strArr, i, 1))) If Len(x) < 2 Then x = "0" & x strHex = strHex + x Next WScript.Echo strHex ' Читаем строку из hex значений и записываем её в бинарный файл strArr = "" For i = 1 To Len(strHex) Step 2 strArr = strArr & Chr("&H" & Mid(strHex, i, 2)) Next Arr = String2ByteArray(strArr) SaveBinaryData file_out, Arr Iska Смотрел ваши примеры, первый - на js, второй использует MSXml2.DOMDocument хотелось бы без него, пусть останется ADODB.Stream только. P.S.: для сравнения пример в первом посте переводит ту же картинку (256кб/jpeg) HEX -> JPG за 4 секунды на том же core2duo. Устраивает всё за исключением языка реализации. //Нужно VBS Или если совсем просто, как переписать этот JS на VBS: |
Последний раз редактировалось semen77, 05-05-2013 в 14:28. Причина: tak-to Отправлено: 14:16, 05-05-2013 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать semen77, Вы меня не поняли — глобальная Ваша цель какова?
|
Отправлено: 15:23, 05-05-2013 | #4 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать Решить задачу: картинка в hex, hex в скрипте, скрипт в картинку.
//За сравнительно быстрое время. |
|
Отправлено: 15:51, 05-05-2013 | #5 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата semen77:
Option Explicit Const adTypeBinary = 1 Dim strString Dim objUtilities strString = _ "89504E470D0A1A0A0000000D4948445200000027000000420803000000E3443FEE0000000C504C5445F0EEEEF95353F59393" & _ "FF04047F58B0FF000000097048597300002E2300002E230178A53F760000014249444154789CED955902C42008434DB8FF9D" & _ "A7AD4BD9AC1C60FCAA363E10115AF38361251D404D27520242A40414290171EB0A409112F0F6AEE2E1C33A033BEA0C1CA413" & _ "900374022ECE37900BF30D5494EBB380FB061AA7F6401AC41EE8CEB803D20176C007C76B1C8000D0930A5D4A208D35658D61" & _ "9069D28A3821E6CC60FB5E1013A2B679AB7CB7749B026F1A7ADB74157362EE49B9417D1C1349172D636DAF83F1DE7EEB3889" & _ "F729E7B943EE7434B762CFA1269C81EBF74B1BC035E3B80215671DB267E14AABF523E6C57B46F3E315B6960BA16DC4B49E89" & _ "A4F3282F0BD4897F1A2C7606D43BC35F57D7857A1375CF0DF9C297E87A6AF9040B3A2E9DAF48C11134575A32DD0439A0D7AD" & _ "A70857846C00D4DF50349D4C55A45D5B31B2F104231269D95D2DA12F317D96ABBA0BDE5692B9A3EA847AF1794654544EBAE9" & _ "5AC7F103F62B06FEC580AB3F0000000049454E44AE426082" With WScript.CreateObject("ADODB.Stream") .Type = adTypeBinary .Open() Set objUtilities = WScript.CreateObject("CAPICOM.Utilities") .Write(objUtilities.BinaryStringToByteArray(objUtilities.HexToBinary(strString))) .SaveToFile("test2.png") Set objUtilities = Nothing End With WScript.Quit 0 |
|
Отправлено: 16:22, 05-05-2013 | #6 |
Новый участник Сообщения: 16
|
Профиль | Отправить PM | Цитировать ![]() |
Отправлено: 16:55, 05-05-2013 | #7 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 20:00, 05-05-2013 | #8 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Интерфейс - Проблема с отображением PNG | rotten_inside | Microsoft Windows 8 и 8.1 | 0 | 17-10-2012 07:12 | |
Free PNG from any extractor 1.0 | OSZone Software | Новости программного обеспечения | 0 | 03-04-2011 14:30 | |
Иконки PNG и ICO | sergeikom | Microsoft Windows Vista | 0 | 13-05-2007 12:52 | |
upload .PNG on the server | Ginger | Вебмастеру | 15 | 05-04-2005 23:56 | |
В png формат | Guest | Программирование и базы данных | 1 | 08-02-2004 17:16 |
|