Bild hochladen
Re: Bild hochladen
Wenn SpiderBasic in der Lage ist, serverseitig den empfangenen String in eine Datei abzuspeichern, dann wäre das möglich.
Wenn nicht, dann musst du auch für Base64 eine php-Datei, die deinen Base64-String in eine Datei abspeichert.
Wenn nicht, dann musst du auch für Base64 eine php-Datei, die deinen Base64-String in eine Datei abspeichert.
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Bild hochladen
Ich habe als Webserver den Server von dige, also einen Purebasic Server. Purebasic kann ja Base64.
Die Frage ist jetzt, wie wandle ich mit Spider ein Image in einen Base64-String um?
Die Frage ist jetzt, wie wandle ich mit Spider ein Image in einen Base64-String um?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Bild hochladen
Hallo stevie1401,
den Base64-Decoder/Encoder gibt es leider "noch" nicht per Standard bei Spiderbasic.
Aber schaue mal hier:
Base64-Spiderbasic
Anbei: Upps, da wurde ja schon ein Beispiel im Thread gepostet.
den Base64-Decoder/Encoder gibt es leider "noch" nicht per Standard bei Spiderbasic.
Aber schaue mal hier:
Base64-Spiderbasic
Anbei: Upps, da wurde ja schon ein Beispiel im Thread gepostet.
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Bild hochladen
Womit auch klar sein sollte, dass der Webserver kein PHP kann.stevie1401 hat geschrieben:Ich habe als Webserver den Server von dige, also einen Purebasic Server. ...
Michael Hack
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Bild hochladen
Leider wird dort nicht beschrieben wie ich die Proceduren anwenden kann, um Images in Strings umwandeln kann.ccode_new hat geschrieben:Hallo stevie1401,
den Base64-Decoder/Encoder gibt es leider "noch" nicht per Standard bei Spiderbasic.
Aber schaue mal hier:
Base64-Spiderbasic
Anbei: Upps, da wurde ja schon ein Beispiel im Thread gepostet.
Kann mir jemand ein einfaches Beispiel geben?
Code: Alles auswählen
bild=CreateImage(#PB_Any,100,100,32,rgb(200,10,30))
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Bild hochladen
Hier die Antwort:
Code: Alles auswählen
Global base64$="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
Procedure.l Base64Decoder(*in,insize,*out,outsize)
actual=0
If insize%4=0
For loop=0 To insize Step 4
c0=(FindString(base64$,PeekS(*in,loop,1,#PB_Ascii))-1)&$3f
c1=(FindString(base64$,PeekS(*in,loop+1,1,#PB_Ascii))-1)&$3f
PokeB(*out,actual,((c0<<2)|(c1>>4))&$ff)
actual+1
If actual>=outsize
Break
EndIf
c2=(FindString(base64$,PeekS(*in,loop+2,1,#PB_Ascii))-1)&$3f
PokeB(*out,actual,((c1<<4)|(c2>>2))&$ff)
actual+1
If actual>=outsize
Break
EndIf
c3=(FindString(base64$,PeekS(*in,loop+3,1,#PB_Ascii))-1)&$3f
PokeB(*out,actual,((c2<<6)|c3)&$ff)
actual+1
If actual>=outsize
Break
EndIf
Next
EndIf
ProcedureReturn actual
EndProcedure
Procedure$ Base64Encoder(*in,insize)
index=0
out$=""
While index<insize
b0=PeekB(*in,index)&$ff
b1=PeekB(*in,index+1)&$ff
b2=PeekB(*in,index+2)&$ff
index+3
out$+Mid(base64$,((b0>>2)&$3f)+1,1)
out$+Mid(base64$,(((b0<<4)|(b1>>4))&$3f)+1,1)
out$+Mid(base64$,(((b1<<2)|(b2>>6))&$3f)+1,1)
out$+Mid(base64$,(b2&$3f)+1,1)
Wend
outsize=((Len(out$)+3)/4)*4
out$=LSet(out$,outsize,"=")
ProcedureReturn out$
EndProcedure
Procedure.l Base64Decode(string$,*out,outsize)
If string$<>""
insize=((Len(string$)+3)/4)*4
string$=LSet(string$,insize,"=")
*input=AllocateMemory(insize+10)
If *input
PokeS(*input,0,string$,insize,#PB_Ascii)
actual=Base64Decoder(*input,insize,*out,outsize)
FreeMemory(*input)
EndIf
EndIf
ProcedureReturn actual
EndProcedure
Procedure$ Base64DecodeString(string$)
string$=Trim(string$)
If string$<>""
outsize=(Len(string$)*1.5)+64
*out=AllocateMemory(outsize)
If *out
actual=Base64Decode(string$,*out,outsize)
If actual
result$=PeekS(*out,0,actual,#PB_UTF8)
EndIf
FreeMemory(*out)
EndIf
EndIf
ProcedureReturn result$
EndProcedure
Procedure$ Base64EncodeString(string$)
If string$<>""
size=Len(string$)*2
*mem=AllocateMemory(size)
If *mem
size=PokeS(*mem,0,string$,-1,#PB_UTF8)
result$=Base64Encoder(*mem,size)
FreeMemory(*mem)
EndIf
EndIf
ProcedureReturn result$
EndProcedure
;Schaue mal ab hier...
Procedure CreateCallback(Status, Filename$, File, SizeRead)
Select Status
Case #PB_Status_Error
; File saving has failed
EndSelect
EndProcedure
Procedure ReadCallback(Status, Filename$, File, Size)
If Status = #PB_Status_Loaded
Debug "File: " + Filename$ + " - Size: " + Size + " bytes"
*Buffer = ExportFileMemory(0)
CloseFile(0)
SetGadgetText(1, Base64Encoder(*Buffer, Size)) ;Das ist dein Bild als Base64 - String
FileEnde.s = StringField(Filename$, 2, ".")
Debug "Bild."+FileEnde
If CreateFile(1, "Bild."+FileEnde, @CreateCallback(), #PB_LocalStorage)
*Bildspeicher = AllocateMemory(Size)
Base64Decode(GetGadgetText(1), *Bildspeicher, Size)
For i = 0 To Size
WriteByte(1, PeekB(*Bildspeicher,i))
Next i
If Not OpenFile(2, "Bild."+FileEnde, @CreateCallback(), #PB_LocalFile)
ExportFile(1, "image/"+FileEnde, #PB_LocalFile)
EndIf
CloseFile(1)
EndIf
ElseIf Status = #PB_Status_Error
Debug "Error when loading the file: " + Filename$
EndIf
EndProcedure
Procedure RequesterSuccess()
; Process all the selected filename
;
While NextSelectedFile()
Debug "Filename: " + SelectedFileName()
OpenFile(0, SelectedFileName(), @ReadCallback(), #PB_LocalFile)
Wend
EndProcedure
Procedure ButtonEvent()
OpenFileRequester("", @RequesterSuccess(), #PB_Requester_MultiSelection)
EndProcedure
If OpenWindow(0, 100, 100, 200, 240, "File")
ButtonGadget(0, 10, 10, 180, 25, "Open local file...")
EditorGadget(1, 10, 40, 180, 190, #PB_Editor_WordWrap)
BindGadgetEvent(0, @ButtonEvent())
EndIf
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
-
- Beiträge: 659
- Registriert: 19.10.2014 15:51
- Kontaktdaten:
Re: Bild hochladen
Vielen Dank für dein Beispiel.
Ich vermute einmal das hier ist die Zeile wo das Bild umgewandelt wird:
Das ist etwas ungünstig, denn ich kenne bei meinem Beispiel weder *Buffer noch Size
Deshalb noch einmal die Frage:
Wie kann ich in MEINEM Beispiel BILD umwandeln?
erg$=Base64Encoder (*BufferVonBild,SizeVonBild)
Also: Wie komme ich an den *Buffer von BILD und Size von BILD?
Ich vermute einmal das hier ist die Zeile wo das Bild umgewandelt wird:
Code: Alles auswählen
SetGadgetText(1, Base64Encoder(*Buffer, Size)) ;Das ist dein Bild als Base64 - String
Deshalb noch einmal die Frage:
Wie kann ich in MEINEM Beispiel BILD umwandeln?
Code: Alles auswählen
bild=CreateImage(#PB_Any,100,100,32,rgb(200,10,30))
Also: Wie komme ich an den *Buffer von BILD und Size von BILD?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Linux Mint 21.x
Re: Bild hochladen
Vielleicht über ExportImage() ?!Wie kann ich in MEINEM Beispiel BILD umwandeln?
Betriebssysteme: div. Windows, Linux, Unix - Systeme
no Keyboard, press any key
no mouse, you need a cat
no Keyboard, press any key
no mouse, you need a cat
Re: Bild hochladen
nein, damit kann man Bilder herunterladen: http://www.spiderbasic.com/documentatio ... image.htmlccode_new hat geschrieben:Vielleicht über ExportImage() ?!Wie kann ich in MEINEM Beispiel BILD umwandeln?
Hygge
Re: Bild hochladen
@ccode_new: Danke für den Hinweis auf ExportFileMemory() ... jetzt habe ich mir mal die SB Befehlsreferenz angeschaut und so einige spannende Dinge entdeckt
@stevie1401: entweder du lädst das Bild über ExportFileMemory() in einen Memory Puffer oder du nutzt EncodeImage () um ein Bild zu codieren und in einen Memory Puffer zu übertragen.
@stevie1401: entweder du lädst das Bild über ExportFileMemory() in einen Memory Puffer oder du nutzt EncodeImage () um ein Bild zu codieren und in einen Memory Puffer zu übertragen.
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."