5.4Beta und CGI Bild einbetten ?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

5.4Beta und CGI Bild einbetten ?

Beitrag 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.)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: 5.4Beta und CGI Bild einbetten ?

Beitrag 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
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: 5.4Beta und CGI Bild einbetten ?

Beitrag von Bisonte »

Den Wald vor lauter Bäumen.... und so :allright:
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: 5.4Beta und CGI Bild einbetten ?

Beitrag 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
a²+b²=mc²
Benutzeravatar
Bisonte
Beiträge: 2468
Registriert: 01.04.2007 20:18

Re: 5.4Beta und CGI Bild einbetten ?

Beitrag 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 ;)
PureBasic 6.21 (Windows x86/x64) | Windows11 Pro x64 | AsRock B850 Steel Legend Wifi | R7 9800x3D | 64GB RAM | GeForce RTX 5080 | ThermaltakeView 270 TG ARGB | build by vannicom​​
Antworten