Что нового

Помогите создать объект изображения на основе base64

mef-t

Осваивающий
Сообщения
306
Репутация
30
Доброго времени суток.

Имеется картинка, закодированная в base64
ниже пример
Код:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEYAAAAMEAQAAAAldN9GAAAAAmJLR0T//xSrMc0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAIaSURBVEjH1ZY9SxxRFIYfI6suuBEtUqWyswsI/gRTCAHFIrCFEi0tDPkDaS3shcCCXRrthEUjgpVrEPwCg6BY7Ba6sjsLyjqyelIchnFm78zeHSUfLwxz5z7nvR9n7tw78A/LcUQqFRHb+EZDY4+O7D1huW6Mt1hM3vDf0v29yM7Oy4x7b6/Ndmq1/y9hYV1c+HM4PraaTyoFm5tgCg6ykxM/ploV0XrTBclZWLOzcH4O9Trs7sLIyPNZSw0Pw/a2eWBBdnbWKsujoxq7seHV7O97nmYW5zs89HyTk8pmZnRiNzewvv6UffskEsXMPiuJQKFgTkwcCyud1rfjut+/hmN9BkND9gxga0vfeGfn09rTU5EoFudrQ6urMDBgnnwzu72NStD8vMYsLAQHb2YAd3ciUcxXpQJXV5DPQ632/qMI9PebGKys2LG2FLcq4ldMwRGBYhEcB/r6grSry8T0WDUzXx0d8PiofWezMD0NIh/eiEQxWF6OZ38wMTA2pjyXezkG0N3t993TA729Wr6+Ts5a65VNULlsc6yNj+t9be25LHiMui5Uq36SGg0tPzyA675+p0+/pur1MIv2WapUEtG/Rn9VlEqmTTguQQcHygcHk7D8l+i2s2+9vufmYGJCy0tLShcXkzD9zbBW8k8pk/F4Ot1MHSfMLi+9tpQVPscNNJXSjblc1g01l4NMBuDnD2/TbmZxvlb6DUz4DnDrarJxAAAAAElFTkSuQmCC
Картинка представлена кодировкой PNG, которую браузер транслирует в картинку.
Т.е. скопируйте содержимое и вставьте в строку браузера

Помогите представить эту картинку в виде объект изображения, без сохранения ее в файл.
Другими словами, мне нужен дескриптор объекта данного изображения
 

---Zak---

Скриптер
Сообщения
455
Репутация
120
Источник "_Base64Decode": Simple Base64 encoder/decoder

Код:
$text = "Überörtlicher Ärger, dem Ökonom wird ärger übel, Muß."
ConsoleWrite("Original: " & $text & @CRLF)

$B64_1 = _Base64Encode($text)
ConsoleWrite("Encoded : " & $B64_1 & @CRLF)

$Text2 = _Base64Decode($B64_1)
ConsoleWrite("DEcoded : " & $Text2 & @CRLF)

$B64_2 = _Base64Encode($Text2)
ConsoleWrite("ENcoded : " & $B64_2 & @CRLF)


; #FUNCTION# ;===============================================================================
;
; Name...........: _Base64Encode
; Description ...: Returns the given strinng encoded as a Base64 string.
; Syntax.........: _Base64Encode($sData)
; Parameters ....: $sData
; Return values .: Success - Base64 encoded string.
;                  Failure - Returns 0 and Sets @Error:
;                  |0 - No error.
;                  |1 - Could not create DOMDocument
;                  |2 - Could not create Element
;                  |3 - No string to return
; Author ........: turbov21
; Modified.......:
; Remarks .......:
; Related .......: _Base64Decode
; Link ..........;
; Example .......; Yes
;
; ;==========================================================================================
Func _Base64Encode($sData)
    Local $oXml = ObjCreate("Msxml2.DOMDocument")
    If Not IsObj($oXml) Then
        SetError(1, 1, 0)
    EndIf

    Local $oElement = $oXml.createElement("b64")
    If Not IsObj($oElement) Then
        SetError(2, 2, 0)
    EndIf

    $oElement.dataType = "bin.base64"
    $oElement.nodeTypedValue = Binary($sData)
    Local $sReturn = $oElement.Text

    If StringLen($sReturn) = 0 Then
        SetError(3, 3, 0)
    EndIf

    Return $sReturn
EndFunc   ;==>_Base64Encode

; #FUNCTION# ;===============================================================================
;
; Name...........: _Base64Decode
; Description ...: Returns the strinng decoded from the provided Base64 string.
; Syntax.........: _Base64Decode($sData)
; Parameters ....: $sData
; Return values .: Success - String decoded from Base64.
;                  Failure - Returns 0 and Sets @Error:
;                  |0 - No error.
;                  |1 - Could not create DOMDocument
;                  |2 - Could not create Element
;                  |3 - No string to return
; Author ........: turbov21
; Modified.......:
; Remarks .......:
; Related .......: _Base64Encode
; Link ..........;
; Example .......; Yes
;
; ;==========================================================================================
Func _Base64Decode($sData)
    Local $oXml = ObjCreate("Msxml2.DOMDocument")
    If Not IsObj($oXml) Then
        SetError(1, 1, 0)
    EndIf

    Local $oElement = $oXml.createElement("b64")
    If Not IsObj($oElement) Then
        SetError(2, 2, 0)
    EndIf

    $oElement.dataType = "bin.base64"
    $oElement.Text = $sData
    Local $sReturn = BinaryToString($oElement.nodeTypedValue, 4)

    If StringLen($sReturn) = 0 Then
        SetError(3, 3, 0)
    EndIf

    Return $sReturn
EndFunc   ;==>_Base64Decode
 
Автор
mef-t

mef-t

Осваивающий
Сообщения
306
Репутация
30
На сколько я понимаю - это текст.
А мне нужно получить картинку


Добавлено:
Сообщение автоматически объединено:

Опять же немного продвинулся.
Получился такой код

Код:
#include "_base64.au3"

$str2 = "iVBORw0KGgoAAAANSUhEUgAAAEYAAAAMEAQAAAAldN9GAAAAAmJLR0T//xSrMc0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAIaSURBVEjH1ZY9SxxRFIYfI6suuBEtUqWyswsI/gRTCAHFIrCFEi0tDPkDaS3shcCCXRrthEUjgpVrEPwCg6BY7Ba6sjsLyjqyelIchnFm78zeHSUfLwxz5z7nvR9n7tw78A/LcUQqFRHb+EZDY4+O7D1huW6Mt1hM3vDf0v29yM7Oy4x7b6/Ndmq1/y9hYV1c+HM4PraaTyoFm5tgCg6ykxM/ploV0XrTBclZWLOzcH4O9Trs7sLIyPNZSw0Pw/a2eWBBdnbWKsujoxq7seHV7O97nmYW5zs89HyTk8pmZnRiNzewvv6UffskEsXMPiuJQKFgTkwcCyud1rfjut+/hmN9BkND9gxga0vfeGfn09rTU5EoFudrQ6urMDBgnnwzu72NStD8vMYsLAQHb2YAd3ciUcxXpQJXV5DPQ632/qMI9PebGKys2LG2FLcq4ldMwRGBYhEcB/r6grSry8T0WDUzXx0d8PiofWezMD0NIh/eiEQxWF6OZ38wMTA2pjyXezkG0N3t993TA729Wr6+Ts5a65VNULlsc6yNj+t9be25LHiMui5Uq36SGg0tPzyA675+p0+/pur1MIv2WapUEtG/Rn9VlEqmTTguQQcHygcHk7D8l+i2s2+9vufmYGJCy0tLShcXkzD9zbBW8k8pk/F4Ot1MHSfMLi+9tpQVPscNNJXSjblc1g01l4NMBuDnD2/TbmZxvlb6DUz4DnDrarJxAAAAAElFTkSuQmCC"
$str2 = _Base64Decode($str2)
$str2 = StringToBinary ($str2)
$filetest = FileOpen("test2.jpg",2+16)
FileWrite($filetest,$str2)

Картинка получается.
Но как мне минуя 2 последние строчки получить дескриптор данной картинки?

P.S. я не до конца разобрался, что такое bitmap, дескриптор изображения, дескриптор файла, hbitmap и прочее, что используется в хелпе.
Просьба подсказать, где можно ознакомиться с информацией на русском.
P.S.S. если я не правильно объясняю, то вот еще попытка. Мне нужен такой же результат, как если бы я воспользовался функцией
Код:
_GDIPlus_ImageLoadFromFile("1.png")



Добавлено:
Сообщение автоматически объединено:

Нашел.

Код:
Local $picdata = Binary($Binary) ; Fetch the Data
	Local $piclength = BinaryLen($picdata) ; Get Length
	
	Local $picstruct = DllStructCreate("byte[" & $piclength & "]")
	DllStructSetData($picstruct,1,$picdata)
	Local $picmemory = DllStructGetPtr($picstruct)
	
	$hData = _MemGlobalAlloc($piclength,2)
	$pData = _MemGlobalLock($hData)
    _MemMoveMemory($picmemory,$pData,$piclength)
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]
    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]
 

justaman

Новичок
Сообщения
7
Репутация
0
mef-t,пожалуйста распиши подробней. как ты совместил два отрывка кода из своего предыдущего поста. какие udf задействовал? GDIP или GDIPlus? Какие еще? Сам разобратся немогу, особенно с dll. я тоже нормально сохраняю base64 в файл, а хочется вывести его сразу в gui.
 
Автор
mef-t

mef-t

Осваивающий
Сообщения
306
Репутация
30
Сорри, сейчас нет времени для модификации кода под Ваши нужды, т.е. для вывода в GUI.
Привожу свой код.
Там есть преобразование в Bitmap, которое можно вывести в GUI.
Позже, если будет время, и если сами еще не разберетесь, то доделаю.

Код:
#include <_base64.au3>
#include <GDIPlus.au3>
#include <Memory.au3>


$baseStr = "iVBORw0KGgoAAAANSUhEUgAAACMAAAAMEAQAAAASuhByAAAAAmJLR0T//xSrMc0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAGMSURBVDjLvZQ9a8JQFIZfBZUKOhUXf4KTKFro1g4OxcXiT/BHdOjUsaO/QLoIBQsGOliiYFtQcQm4+TEUxQ9EIQnGQTgdbi/mWwXpCyHhPu97zslNuMAJmkyI+n2iUzL/IknaD9Vq7Z8liWg0Ojxwr8c8u90ZXm65NBYZj8+6Yz4fIIrAvqii6BtEo4wZLzaUPXPLuQySSADNprsxl2OsWuUr3S73Wlmn48yc5OVlgUDA3ZpOs3u9zleSSY9Hzx6fs1nOUikj0+fsNBwSod0mAiqVnw/nLRwMiIBGg7HFAlDVO4EIiESYg7HLVyJAVQFBMDOeAwTh+4rI+AvYyu0z1WrAdArE40ChwHzlspk93PAa5fJ2S8TZ1y2RNceOC0urzeaon+tPwSDzrVZOLHxvV8eam88d+x07TCjEfLMZAMiyPmNkbjmzvIfaKgoR2zVRBDTtLUsE5POMlkoAEA7X64CmvbwTPV3Isp7xHJDJmHNcDmeU287EYqywogDrNVAsAn7/Mez6k8ieGfULhFc5Rz/ePiYAAAAASUVORK5CYII="
$str = _Base64Decode($baseStr)
;~ $str2 = StringToBinary ($str)

$priceValue = ''
$priceValue = _baseToMem($str)
MsgBox(0, 'Заголовок', $priceValue)


Func _baseToMem(ByRef $Binary)
	Local $picdata = Binary($Binary) ; Fetch the Data
	Local $piclength = BinaryLen($picdata) ; Get Length

	Local $picstruct = DllStructCreate("byte[" & $piclength & "]")
	DllStructSetData($picstruct,1,$picdata)
	Local $picmemory = DllStructGetPtr($picstruct)

	Local $priceValue = _memToBitmap($picmemory, $piclength)

	DllStructSetData($picstruct,1,0)
    $picstruct = ""
	Return $priceValue
EndFunc


Func _memToBitmap($Pointer, $nSize)
	$hData = _MemGlobalAlloc($Pointer,2)
	$pData = _MemGlobalLock($hData)
	_MemMoveMemory($Pointer,$pData,$nSize)
	_MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]

	_GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]

	$iBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap, 0xFFFFFFFF)
	$hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($iBitmap)
	$iWidth = _GDIPlus_ImageGetWidth($hBitmap)
	$iHeight = _GDIPlus_ImageGetHeight($hBitmap)
	; clone с преобразованием
	$hBitmap = _GDIPlus_BitmapCloneArea ($hBitmap, 0, 0, $iWidth, $iHeight, $GDIP_PXF01INDEXED)


	Local $priceValue = _Capcha_Rec($hBitmap, $iWidth)


    _GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
	Return $priceValue
EndFunc

Func _Capcha_Rec(ByRef $hBitmap, $iWidth)
    $iRes = ''
	$f = 0
	$icountSpace = Int($iWidth/7/4)
	$icountDigit = ($iWidth/7) - $icountSpace
	$i = $icountDigit;
	While $f < ($iWidth - $icountSpace*4 - 6)
		$tagGDIPBD = _GDIPlus_BitmapLockBits($hBitmap, $f, 3, 5, 9, $GDIP_ILMREAD, $GDIP_PXF32ARGB)
		$bData = DllStructGetData(DllStructCreate('byte[' & (5 * 9 * 4) & ']', DllStructGetData($tagGDIPBD, 'Scan0')), 1)
		$bData = StringReplace($bData, '000000FF', 1)
		$bData = StringReplace($bData, 'FFFFFFFF', 0)
;~ 		MsgBox (0,0, $bData)
		_GDIPlus_BitmapUnlockBits($hBitmap, $tagGDIPBD)

        Switch $bData
			Case _
				'0x011111100111001110011100111001110011100101111', _
				'0x011111101111001110011100111001110011110101111', _
				'0x011111110111001110011100111001110011100101111', _
				'0x011111101111001110011100111001110011100101111', _
				'0x011111100111001110011100111001110011101101111', _
				'0x011111100111001110011100111001110011110101111', _
				'0x011111111111001110011100111001110011100101111', _
				'0x011111100111001110011100111001110011111101111', _
				'0x011111101111001110011100111001110011101101111';0
                $iRes &= 0
            Case _
				'0x000110011101111010110001100011000110001100011' ;1
                $iRes &= 1
            Case _
				'0x011111100100001000110001100111011001100011111', _
				'0x011111100100001000110001100110011001100011111', _
				'0x011111100100001000010001100110011001100011111', _
				'0x011111100100001000010001100111011001100011111' ;2
                $iRes &= 2
            Case _
				'0x011111100100001001110000100001000011100101111', _
				'0x011111100100001001110001100001000011100101111', _
				'0x011111100100001001110000100001000011101101111', _
				'0x011111100100001001110001100001000011101101111' ;3
                $iRes &= 3
            Case _
				'0x000110011100111010110101110011111110001100011', _
				'0x000110011100111011110101110011111110001100011' ;4
                $iRes &= 4
            Case _
				'0x011110110011100111111100100001000011100101111', _
				'0x011110110011100111111100100001000011101101111', _
				'0x011110110011000111111100100001000011100101111', _
				'0x011110110011000111111101100001000011100101111', _
				'0x011110110011000111111100100001000011101101111', _
				'0x011110110011100111111101100001000011100101111';5
                $iRes &= 5
            Case _
				'0x001110100111000111111100111001110011100101111', _
				'0x001110100111000111111100111001110011110101111', _
				'0x001110100111000111111101111001110011100101111', _
				'0x000110010001100011110110001100011000110000111', _
				'0x011110100111000111111100111001110011100101111', _
				'0x000110010001100011110110001100011000111000111', _
				'0x001110110111000111111100111001110011110101111', _
				'0x001110110111000111111100111001110011100101111', _
				'0x000110011001100011110110001100011000110000111', _
				'0x011110100111000111111100111001110011110101111', _
				'0x001110010001100011110110001100011000110000111', _
				'0x001110010001100011110110001100011000111000111', _
				'0x000110010001100011110110101100011000110000111';6
                $iRes &= 6
            Case _
				'0x111110000100011000110011000110011000110001100', _
				'0x111110000100011001110011000110011000110001100' ;7
                $iRes &= 7
            Case _
				'0x011111100111001110010111111001110011100101111' ;8
                $iRes &= 8
            Case _
				'0x011111100111001110011100101111000011100101110', _
				'0x011111101111001110011100101111000011100101110', _
				'0x011111100111001110011100101111000011101101110', _
				'0x011111100111001110011100101111000011100101111', _
				'0x011111101111001110011100101111000011101101110', _
				'0x011111101111001110011100101111000011100101111', _
				'0x011111100111001110011100101111000011101101111';9
                $iRes &= 9
            Case Else
				$iRes &= 'x'
				MsgBox (0,0, $bData)
				ClipPut($bData)
;~ 				ExitLoop
        EndSwitch

		$i -= 1
		if Mod($i, 3) = 0 Then
			$f += 10
		Else
			$f += 7
		EndIf
	WEnd
	Return SetError(0, 0, $iRes)
EndFunc
 

justaman

Новичок
Сообщения
7
Репутация
0
Огромное спасибо! Кое-что стало получатся. Только вот картинки черно-белые выходят. Поправил.
Код:
#include <_base64.au3>
#include <GDIPlus.au3>
#include <Memory.au3>
#include <GUIConstantsEx.au3>

$baseStr1 = "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"
$baseStr2 = "iVBORw0KGgoAAAANSUhEUgAAACMAAAAMEAQAAAASuhByAAAAAmJLR0T//xSrMc0AAAAJcEhZcwAAAEgAAABIAEbJaz4AAAGMSURBVDjLvZQ9a8JQFIZfBZUKOhUXf4KTKFro1g4OxcXiT/BHdOjUsaO/QLoIBQsGOliiYFtQcQm4+TEUxQ9EIQnGQTgdbi/mWwXpCyHhPu97zslNuMAJmkyI+n2iUzL/IknaD9Vq7Z8liWg0Ojxwr8c8u90ZXm65NBYZj8+6Yz4fIIrAvqii6BtEo4wZLzaUPXPLuQySSADNprsxl2OsWuUr3S73Wlmn48yc5OVlgUDA3ZpOs3u9zleSSY9Hzx6fs1nOUikj0+fsNBwSod0mAiqVnw/nLRwMiIBGg7HFAlDVO4EIiESYg7HLVyJAVQFBMDOeAwTh+4rI+AvYyu0z1WrAdArE40ChwHzlspk93PAa5fJ2S8TZ1y2RNceOC0urzeaon+tPwSDzrVZOLHxvV8eam88d+x07TCjEfLMZAMiyPmNkbjmzvIfaKgoR2zVRBDTtLUsE5POMlkoAEA7X64CmvbwTPV3Isp7xHJDJmHNcDmeU287EYqywogDrNVAsAn7/Mez6k8ieGfULhFc5Rz/ePiYAAAAASUVORK5CYII="
$baseStr3 = "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"
$hGUI = GUICreate("GDI+", 400, 300)
$Btn1 = GUICtrlCreateButton ("Btn1",300, 10, 90,30)
$Btn2 = GUICtrlCreateButton ("Btn2",300, 50, 90,30)
$Btn3 = GUICtrlCreateButton ("Btn3",300, 90, 90,30)
GUISetState()
While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $Btn1
            _drawimg($basestr1)
        Case $Btn2
            _drawimg($basestr2)
        Case $Btn3
            _drawimg($basestr3)			
    EndSwitch
WEnd

Func _drawimg(ByRef $Str)
    Local $Binary = _Base64Decode($Str)
    Local $picdata = Binary($Binary) ; Fetch the Data
    Local $piclength = BinaryLen($picdata) ; Get Length

    Local $picstruct = DllStructCreate("byte[" & $piclength & "]")
    DllStructSetData($picstruct,1,$picdata)
    Local $picmemory = DllStructGetPtr($picstruct)

	$hData = _MemGlobalAlloc($picmemory,2)
    $pData = _MemGlobalLock($hData)
    _MemMoveMemory($picmemory,$pData,$piclength)
    _MemGlobalUnlock($hData)
    $pStream = DllCall( "ole32.dll","int","CreateStreamOnHGlobal", "int",$hData, "long",1, "Int*",0)
    $pStream = $pStream[3]

    _GDIPlus_Startup()
    $pBitmap = DllCall($ghGDIPDll,"int","GdipCreateBitmapFromStream", "ptr",$pStream, "int*",0)
    $pBitmap = $pBitmap[2]

    $iBitmap = _GDIPlus_BitmapCreateHBITMAPFromBitmap($pBitmap, 0xFFFFFFFF)
    $hBitmap = _GDIPlus_BitmapCreateFromHBITMAP($iBitmap)
    $iWidth = _GDIPlus_ImageGetWidth($hBitmap)
    $iHeight = _GDIPlus_ImageGetHeight($hBitmap)

    $hGraphic = _GDIPlus_GraphicsCreateFromHWND ($hGUI)
    _GDIPlus_GraphicsClear($hGraphic,0xFFF0F0F0)
    _GDIPlus_GraphicsDrawImage ($hGraphic, $hBitmap, 0, 0)
    

	_GDIPlus_GraphicsDispose($hGraphic)
    _GDIPlus_BitmapDispose($pBitmap)
    _GDIPlus_Shutdown()
    _WinAPI_DeleteObject($pStream)
    _MemGlobalFree($hData)
EndFunc
 
Верх