Ich versuche gerade den decodierten String mit dieser Funktion mit Purebasic wieder in ein Image zu verwandeln:
Code: Alles auswählen
Procedure DecodeStringToImage(String.s)
Protected *Buffer, L, *StringAscii, Image
*Buffer = AllocateMemory(StringByteLength(String)) ;Die Binärdatei ist IMMER kleiner, als der String, egal, wir kümmern uns nicht darum.
If *Buffer
CompilerIf #PB_Compiler_Unicode ;Obacht bei Unicode! Base64Decode benötigt den String in Ascii!
*StringAscii = AllocateMemory(StringByteLength(String, #PB_Ascii))
If *StringAscii
PokeS(*StringAscii, String, -1, #PB_Ascii | #PB_String_NoZero)
L = Base64Decoder(*StringAscii, MemorySize(*StringAscii), *Buffer, MemorySize(*Buffer))
FreeMemory(*StringAscii)
EndIf
CompilerElse
;Alles easy, kein Unicode
L = Base64Decoder(@String, StringByteLength(String), *Buffer, MemorySize(*Buffer))
CompilerEndIf
If L
Image = CatchImage(#PB_Any, *Buffer, L)
EndIf
FreeMemory(*Buffer)
EndIf
ProcedureReturn Image
EndProcedure
Funktioniert nur mit Purebasix 5.4x
Man muss sich den Base64-String erst einmal herausnehmen:
Code: Alles auswählen
s="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAEUlEQVQYlWNgYGD4TwCPBAUAgkg/wUYFkqkAAAAASUVORK5CYII="
f=FindString(s,"base64,") ;s ist der String, der gesendet wurde und in dem das als Base64String umgewandelte Image ist.
If f>0
s=Right(s,Len(s)-f-6) ;String links abschneiden
EndIf
i=DecodeStringToImage(s)
ImageGadget(#PB_Any,150,10,ImageWidth(i),ImageHeight(i),ImageID (i))
Ich programmiere nur noch mit Linux.
Linux Mint 21.x