Seite 1 von 1

5.4Beta und CGI Bild einbetten ?

Verfasst: 01.09.2015 12:35
von Bisonte
So dank Kiffi's Entdeckung bekomme ich es nun endlich hin, CGI auch zum laufen zu kriegen ;)

Allerdings stellt sich mir nun die Frage, wie ich ein selbst erstelltes Image nun einbetten kann.
Diverse Test (u.a. die enthaltenen Beispiele) liefen nur darauf hinaus, dass der Browser entweder nur den
binaeren Inhalt als Text anzeigt, als Download anbietet oder aber das Bild ist komplett alleine auf der Seite (abgedunkelter Rest).

Muss ich das erstellte Bild etwa immer erst speichern, und dann per "<img src...." wieder einlesen oder geht das nicht auch direkt ?

Edit :

Gerade selbst drauf gekommen : "<img src="PBCGI.exe>" zum einbinden in die html datei schreiben... (mit Parameter für einen Counter z.B.)

Re: 5.4Beta und CGI Bild einbetten ?

Verfasst: 01.09.2015 13:08
von Kiffi
Bisonte hat geschrieben:Gerade selbst drauf gekommen
hier dennoch ein alternativer Ansatz: Bild in der CGI generieren, als Base64 codieren und dann als img src="data:image/png;base64,... zurückgeben:

Code: Alles auswählen

EnableExplicit

Procedure.s GetB64FromImage()
  
  Protected k
  Protected *Buffer
  Protected *OutputBuffer
  Protected Base64StringLength
  Protected Base64String.s
  
  If CreateImage(0, 255, 255)
    
    StartDrawing(ImageOutput(0))
    
    For k=0 To 255
      FrontColor(RGB(k,0, k))  ; a rainbow, from black to pink
      Line(0, k, 255, 1)
    Next
    
    DrawingMode(#PB_2DDrawing_Transparent)
    FrontColor(RGB(255,255,255)) ; print the text to white !
    DrawText(40, 50, "An image easily created !")
    
    StopDrawing() ; This is absolutely needed when the drawing operations are finished !!! Never forget it !

    *Buffer = EncodeImage(0)
    *OutputBuffer = AllocateMemory(MemorySize(*Buffer) * 2)
    Base64StringLength = Base64Encoder(*Buffer, MemorySize(*Buffer), *OutputBuffer, MemorySize(*Buffer) * 2)
    Base64String = PeekS(*OutputBuffer, Base64StringLength, #PB_Ascii)
    FreeMemory(*OutputBuffer)
    FreeMemory(*Buffer)
    
  EndIf
  
  ProcedureReturn Base64String
  
EndProcedure

If Not InitCGI() Or Not ReadCGI()
  End
EndIf

WriteCGIHeader(#PB_CGI_HeaderContentType, "text/html", #PB_CGI_LastHeader)

WriteCGIString(#CRLF$)

WriteCGIString("<html><title>PureBasic - test</title><body>" +
               "Hello from PureBasic CGI<br>" +
               "<img src='data:image/png;base64," + GetB64FromImage() + "' alt='Testbild' />" + 
               "</body></html>")
Grüße ... Peter

Re: 5.4Beta und CGI Bild einbetten ?

Verfasst: 01.09.2015 13:25
von Bisonte
Den Wald vor lauter Bäumen.... und so :allright:

Re: 5.4Beta und CGI Bild einbetten ?

Verfasst: 01.09.2015 13:39
von Kiffi
Deine Lösung ("<img src="PBCGI.exe>") ist aber auch nicht übel. Hat ein wenig gedauert, bis ich das geschnallt habe. ;-)

Grüße ... Peter

Re: 5.4Beta und CGI Bild einbetten ?

Verfasst: 01.09.2015 18:17
von Bisonte
hehe... Deine Lösung wird genutzt, wenn die komplette Seite per CGI erstellt wird... meine Lösung, wenn man das ganze in eine HTML oder PHP einbetten möchte ;)