Bild hochladen

Hier könnt ihr alle Fragen zu SpiderBasic austauschen.
stevie1401
Beiträge: 659
Registriert: 19.10.2014 15:51
Kontaktdaten:

Re: Bild hochladen

Beitrag von stevie1401 »

Also so?

Code: Alles auswählen

 bild=CreateImage(#PB_Any,100,100,32,rgb(200,10,30))
 *Buffer = ExportFileMemory(bild)  ;*Buffer ist 0
 size=imagewidth(bild)*imageheight(bild) ;Size ist 10000
 BildString=Base64Encoder(*Buffer, Size)

Size scheint falsch zu sein. Programm hängt sich nach dieser Zeile auf.
Auch weiss ich nicht wie ich dann wieder decodieren kann:

Code: Alles auswählen

 *Bildspeicher = AllocateMemory(Size)   ;Wo bekomme ich Size her, wenn ich die noch nicht kenne?
  bild1=Base64Decode(Bildstring, *Bildspeicher, Size)

EncodeImage kapiere ich natürlich auch nicht

Code: Alles auswählen

keineAhnungwasHierRauskommt=EncodeImage(bild)
Und was kann ich nun mit "keineAhnungwasHierRauskommt" anfangen?



Noch einmal zum Upload.
doko-lounge.de ist eine ganz normale Homapage bei Strato. Was muss denn da alles eingerichtet sein, dass das Upload-Beispiel funktioniert?
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 »

Alles Blödsinn und verschwendete Zeit.

Wenn man (wie hier) keinen Zugriff auf den korrekten Bildspeicher hat ist es mit der Base64-Methode einfach nicht möglich.

Wer hier ein Beispiel nach dem Toyota-Motto: "Nichts ist unmöglich." postet -> Respekt!

Ich denke dein Vorhaben ist auf anderer Art zu realisieren.

Hier im Forum gibt es doch einige Web-kundige Leutchen.
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 »

SB ist ja nur eine JavaScript Bibliothek, welche auf dem Client läuft. D.h. er kann dort das Bild laden, Base64 kodieren, fertig. Aber dann dann muss er es irgendwie dem Webserver übermitteln. Dazu benötigt er eine Art Webservice auf seinem Webserver.

@stevie1401: Du hast geschrieben, dass es ein PB Webserver ist. Kannst du an dem Änderungen daran vornehmen? Wenn ja, dann müsstest du den Webserver erweitern, dass er unter einer bestimmten URL die Base64 kodierten Bilddaten annimmt und in eine lokale Datei speichert.
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 »

Der BP Web Server ist nicht das Problem. der kann problemlos Base64.

Hier geht es um Spiderbasic und darum, dass ich eben kein Bild lade, sondern eines mittels CreateImage() erstelle und dieses erstellte Bild an den Purebasic Server senden möchte. Dabei ist es mir wirklich vollkommen egal wie, hauptsache es funktioniert irgendwie.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Bild hochladen

Beitrag von mhs »

Die Antwort ist denke ich schon gefallen.

EncodeImage:
URL \$ = EncodeImage ( #Image [, ImagePlugin [, Flags ]])
Returns the URL containing the encoded image, or an empty string if the encoding has failed.
Da steht, dass EncodeImage eine URL liefert. Da SB auf dem Client läuft, kann es sich dabei eigentlich nur um ein Base64 kodierten Data Stream handeln, d.h. eine URL die den Inhalt des Bildes in Base64 kodiert enthält.

So etwas:
data:image/gif;base64,R0lGODdhEAAQAMwAAPj7+FmhUYjNf......
Probier es doch einfach mal aus und schau, welche URL EncodeImage zurückgibt. Falls es so ist, wie ich vermute, musst du dich dann um nichts weiter kümmern und hast dein Bild bereits Base64 kodiert.
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 »

Kannst du das bitte einmal als Befehlszeile schreiben? Ich blicke kein Wort von dem was du schreibst.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Bild hochladen

Beitrag von mhs »

URL \$ = EncodeImage ( #Image [, ImagePlugin [, Flags ]])
Diese Funktion sollst du mit deinem Bild ausführen und den Rückgabewert "URL" anschauen.

Ist URL ein Base64 kodierter String?
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Bild hochladen

Beitrag von dige »

EncodeImage wandelt dein Bild in einen String, der das Bild Base64 kodiert enthält:

Code: Alles auswählen

CreateImage(0, 8, 8)
Debug EncodeImage(0, #PB_ImagePlugin_PNG)
Ausgabe:
data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAYAAADED76LAAAAEUlEQVQYlWNgYGD4TwCPBAUAgkg/wUYFkqkAAAAASUVORK5CYII=
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
ccode_new
Beiträge: 1214
Registriert: 27.11.2016 18:13
Wohnort: Erzgebirge

Re: Bild hochladen

Beitrag von ccode_new »

Bild

Aua, wie kann man nur so dämlich sein und diesen Befehl die ganze Zeit gekonnt umgehen.

(Damit meine ich mich selber)

Es kann ja doch so einfach sein.

..............
Gibt es auch einen besseren Weg zum Decodieren ?

Eine CatchImage-Funktion, oder ähnlich gibt es ja nicht.

Oder muss man den Weg über ein File gehen ?
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 »

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))
  
  
Zuletzt geändert von stevie1401 am 28.03.2018 18:28, insgesamt 4-mal geändert.
Ich programmiere nur noch mit Linux.
Linux Mint 21.x
Antworten