Bild hochladen

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Bild hochladen

Beitrag von RSBasic »

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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Bild hochladen

Beitrag von stevie1401 »

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?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bild hochladen

Beitrag von ccode_new »

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.
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Bild hochladen

Beitrag von mhs »

stevie1401 hat geschrieben:Ich habe als Webserver den Server von dige, also einen Purebasic Server. ...
Womit auch klar sein sollte, dass der Webserver kein PHP kann.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Bild hochladen

Beitrag von stevie1401 »

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.
Leider wird dort nicht beschrieben wie ich die Proceduren anwenden kann, um Images in Strings umwandeln kann.
Kann mir jemand ein einfaches Beispiel geben?

Code: Alles auswählen

 bild=CreateImage(#PB_Any,100,100,32,rgb(200,10,30))
Wie mache ich jetzt aus "bild" einen String?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bild hochladen

Beitrag von ccode_new »

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
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Bild hochladen

Beitrag von stevie1401 »

Vielen Dank für dein Beispiel.
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
    
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?

Code: Alles auswählen

 bild=CreateImage(#PB_Any,100,100,32,rgb(200,10,30))
erg$=Base64Encoder (*BufferVonBild,SizeVonBild)
Also: Wie komme ich an den *Buffer von BILD und Size von BILD?
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bild hochladen

Beitrag von ccode_new »

Wie kann ich in MEINEM Beispiel BILD umwandeln?
Vielleicht über ExportImage() ?!
Betriebssysteme: div. Windows, Linux, Unix - Systeme

no Keyboard, press any key
no mouse, you need a cat
Benutzeravatar
Kiffi
Beiträge: 10621
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Bild hochladen

Beitrag von Kiffi »

ccode_new hat geschrieben:
Wie kann ich in MEINEM Beispiel BILD umwandeln?
Vielleicht über ExportImage() ?!
nein, damit kann man Bilder herunterladen: http://www.spiderbasic.com/documentatio ... image.html
Hygge
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Bild hochladen

Beitrag von dige »

:shock: @ccode_new: Danke für den Hinweis auf ExportFileMemory() ... jetzt habe ich mir mal die SB Befehlsreferenz angeschaut und so einige spannende Dinge entdeckt :D

@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."
Antworten