Может ли файл .BMP храниться в HTA (HTML/VBScript)? - программирование
Подтвердить что ты не робот

Может ли файл .BMP храниться в HTA (HTML/VBScript)?

Я заметил в резервной копии моих закладок FireFox, что значок, который отображается слева от каждой записи, хранится как поток символов в тегах A. Например:

ICON = "data: image/png; base64, iVBOR [данные удалены, чтобы сократить пример] rkJggg =="

У меня есть 3 файла BMP (2 are 4x20 (249 bytes) and 1 is 102x82 (24.7 KB)), которые я хотел бы скрыть в своем приложении HTML, чтобы они не потерялись.

Более крупный отображается в теге стиля 3 раза следующим образом (показано 1 появление):

<style type="text/css">
#frmMainBody
  {background:grey; background-image:url('Background.bmp'); margin:0;
   padding:0; font:normal 10pt Microsoft Sans Serif;}
</style>

Остальные два появляются в подпрограммах VBScript следующим образом:

Sub Button_Glow
  ' Highlights a button when the cursor hovers over it.

  With Window.Event.srcElement.Style
    If .BackgroundColor <> "Lavender" Then
      .BackgroundColor = "Lavender"
      .BackgroundImage = "url(Glow.bmp)"
      .BackgroundPositionY = -2
      .BackgroundRepeat = "Repeat-X"
    End If
  End With

End Sub 'Button_Glow

Возможно ли это?

4b9b3361

Ответ 1

HTA - это текстовый язык разметки, который можно редактировать и редактировать с помощью любого текстового редактора, такого как Notepad ++.

Вы CAN сохраняете любой формат изображения в HTML, CSS и т.д., преобразовывая изображение в base64, а затем вместо

<img src="mypath/myimage.bmp" />

<style type="text/css">
foo { background: url(mypath/myimage.bmp); }
</style>

Вы бы поставили::

<img src="data:image/x-png;base64,iVBORw0KGgoAAAANS....." />

<style type="text/css">
foo { background: url(data:image/x-png;base64,iVBORw0KGgoAAAANS.....); }
</style>

Чтобы сделать это еще проще для вас, вы можете преобразовать изображение в этот формат, используя онлайн-инструмент, например, расположенный здесь → Преобразовать любое изображение в строка Base64 <.

КАК ПРИМЕНЯТЬ ЭТО К КОДУ В ВАШЕМ ВОПРОСЕ

Используя один из инструментов (или создайте свой собственный), найдите и преобразуйте "Background.bmp" в base64, затем измените первый блок кода, который вы разместили, как этот (также сокращенный для экономии места).

<style type="text/css">
#frmMainBody
  {background:grey; background-image:url(data:image/x-png;base64,iVBORw0KGgoAAAANS....); margin:0;
   padding:0; font:normal 10pt Microsoft Sans Serif;}
</style>

Далее, для кода VBScript найдите и преобразуйте 'Glow.bmp' (так же, как и для "Background.bmp" выше) и измените блок кода, чтобы он выглядел следующим образом:

Sub Button_Glow
  ' Highlights a button when the cursor hovers over it.

  With Window.Event.srcElement.Style
    If .BackgroundColor <> "Lavender" Then
      .BackgroundColor = "Lavender"
      .BackgroundImage = "data:image/x-png;base64,iVBORw0KGgoAAAANS....."
      .BackgroundPositionY = -2
      .BackgroundRepeat = "Repeat-X"
    End If
  End With

End Sub

Ответ 2

Изображение с левой стороны называется favicon, а его размер по умолчанию 16x16, и он должен быть в формате .ICO (но это также может быть в другом).

Когда вы писали о скрытии образа .BMP, я думаю, вы хотели сохранить и не скрывать значок, поэтому он всегда будет загружаться, даже если закладки/пользователь отключен. Правильно?

Ответ 3

Я плохо разбираюсь в vb, но вы можете кодировать файл или изображение на base64 (в PHP с помощью функции base64_encode()) для этого должна быть функция в vb. Все, что вам нужно сделать, это просто сохранить содержимое или строки в файле изображения (например, XXXXXX.png) в качестве переменной и передать его в функцию кодирования base64.

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

Ответ 5

Это может помочь - HTA, который использует VBScript для кодирования файла изображения как base64 (с кодом, адаптированным из Base64 Encode String в VBScript и VBScript, чтобы открыть диалог, чтобы выбрать путь к файлу).

Вы можете сгенерировать код base64 и использовать его в качестве источника изображения, например:

<img src="data:image/png;base64, [base64 code inserted here] ">код >

<!DOCTYPE html>
<html>
<head>
 <HTA:APPLICATION
    ID="oHta"
    APPLICATIONNAME="Base64 Encode"
    ICON="favicon.ico"
 />
<LINK id=shortcutlink REL="SHORTCUT ICON" HREF="favicon.ico">
<META http-equiv="x-ua-compatible" content="text/html; charset=utf-8">
<TITLE>Base64 Encoder</TITLE>
</head>

<script language=vbscript>

Function fBase64Encode(sourceStr)

    Dim rarr()

    carr = Array(   "A", "B", "C", "D", "E", "F", "G", "H", _
                    "I", "J", "K", "L", "M", "N", "O" ,"P", _
                    "Q", "R", "S", "T", "U", "V", "W", "X", _
                    "Y", "Z", "a", "b", "c", "d", "e", "f", _
                    "g", "h", "i", "j", "k", "l", "m", "n", _
                    "o", "p", "q", "r", "s", "t", "u", "v", _
                    "w", "x", "y", "z", "0", "1", "2", "3", _
                    "4", "5", "6", "7", "8", "9", "+", "/")     

    n = Len(sourceStr)-1

    ReDim rarr(n\3)

    For i=0 To n Step 3
        a = Asc(Mid(sourceStr,i+1,1))
        If i < n Then
            b = Asc(Mid(sourceStr,i+2,1))
        Else
            b = 0
        End If
        If i < n-1 Then
            c = Asc(Mid(sourceStr,i+3,1))
        Else
            c = 0
        End If
        rarr(i\3) = carr(a\4) & carr((a And 3) * 16 + b\16) & carr((b And 15) * 4 + c\64) & carr(c And 63)
    Next

    i = UBound(rarr)
    If n Mod 3 = 0 Then
        rarr(i) = Left(rarr(i),2) & "=="
    ElseIf n Mod 3 = 1 Then
        rarr(i) = Left(rarr(i),3) & "="
    End If

    fBase64Encode = Join(rarr,"")

End Function
'-------------------------------------------------------------------------------

function fBase64Decode(str)

    fBase64Decode = ""

    table = fGenerateBase64Table

    bits = 0

    for x = 1 to len(str) step 1
        c = table(1+asc(mid(str,x,1)))
        if (c <> -1) then
            if (bits = 0) then
                outword = c*4
                bits = 6
            elseif (bits = 2) then
                outword = c+outword
                strBase64 = strBase64 & chr(clng("&H" & hex(outword mod 256)))
                bits = 0
            elseif (bits = 4) then
                outword = outword + int(c/4)
                strBase64 = strBase64 & chr(clng("&H" & hex(outword mod 256)))
                outword = c*64
                bits = 2
            else
                outword = outword + int(c/16)
                strBase64 = strBase64 & chr(clng("&H" & hex(outword mod 256)))
                outword = c*16
                bits = 4
            end if
        end if
    next

    fBase64Decode = strBase64

end function
'---------------------------------------------------

function fGenerateBase64Table()

    r64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"

    'set up decode table
    dim table(256)
    for x = 1 to 256 step 1
        table(x) = -1
    next
    for x = 1 to 64 step 1
        table(1+asc(mid(r64,x,1))) = x - 1
    next

    fGenerateBase64Table = table

end function
'---------------------------------------------------

function fSelectFile()

    fSelectFile = ""
    strMSHTA = "mshta.exe ""about:<input type=file id=FILE>" & _
               "<"&"script>FILE.click();new ActiveXObject('Scripting.FileSystemObject')" & _
               ".GetStandardStream(1).WriteLine(FILE.value);close();resizeTo(0,0);<"&"/script>"""

    Set wshShell = CreateObject( "WScript.Shell" )
    Set objExec = wshShell.Exec( strMSHTA )
    fSelectFile = objExec.StdOut.ReadLine( )
    Set objExec = Nothing
    Set wshShell = Nothing

end function

'-------------------------------------------------------------------------

sub getBase64()

    'this can be BMP, PNG, ICO
    REM sImgFile = "favicon.ico"
    sImgFile = fSelectFile()

    if sImgFile = "" then exit sub

    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f = fso.GetFile(sImgFile)
    filesize = f.size
    set f = fso.opentextfile(sImgFile,1,0) 'open as ascii
    strBinFile = f.read(filesize)
    f.close
    set fso = nothing

    strPNGFile = fBase64Encode(strBinFile)
    s = s & "Base64 encoding of "&sImgFile&"<br><br>" & strPNGFile & "<br><br>"
    s = s & "<img src=""data:image/bmp;base64," & strPNGFile & """><br><br>" & vbcrlf

    imgbase64.innerhtml = s

end sub
'-------------------------------------------------------------------------

</script>

<style type="text/css">

    body  {font-family:"CONSOLAS";font-size:"10pt";}
    input  {font-family:"CONSOLAS";font-size:"8pt";}

</style>

<body>

<input type=button value="Encode an image file..." 
data-tooltip title="Choose a PNG, BMP, ICO file to encode in base64" 
onclick=getBase64>

<br><br>

<div id=imgbase64 style="word-wrap: break-word;"></div>

</body>
</html>