PNG in String einbinden

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
kaapython
User
Beiträge: 4
Registriert: Samstag 23. Oktober 2021, 14:06

Hallo und guten Abend :)

Ich übergebe in einem Return Wert verschieden formatierte Texte, welche dann später in einer HTML Seite ausgegeben werden. Das funktioniert soweit auch. Ich würde nun aber gern zwischen den Texten ein Bild (.png) einfügen. Leider scheitere ich daran. Ich habe dank anderen Forenbeiträgen, dies gefunden:

Code: Alles auswählen

data_uri = base64.b64encode(open('test.png', 'rb').read()).decode('utf-8')
            img_tag = '<img src="data:image/png;base64,{0}">'.format(data_uri)
Dies ist meine Übergabe in der Funktion. Dort würde ich auch gern das Bild mit übergeben. Da es aber nicht vom Typ string ist, funktioniert das natürlich nicht.

Code: Alles auswählen

return {"messages": messages+text1+text2+img_tag, "hit": hit, "function": solution}
Kann mir jemand einen Tipp geben, wie ich das umgesetzt bekomme, dass ich das Bild mit übergebe?
Danke im Voraus
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

@kaapython,

um Bilder in HTML Seiten darzustellen werden diese in der Regel getrennt vom HTML Dokument gespeichert. Im HTML Dokument steht lediglich der Link zum Ablageort des Bildes. Der Browser setzt das Bild dann an der entsprechenden Stelle ein.

Deine Frage ist auch leider etwas ungenau. Du solltest zunächst allgemein erklären, was du eigentlich machen möchtest.
Was ist das Ziel?

Bitte poste deinen gesamten Code. Einzelne Zeilen ohne Zusammenhang machen wenig Sinn.
Benutzeravatar
__blackjack__
User
Beiträge: 13109
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@kaapython: Was funktioniert denn konkret nicht? Wenn man mal davon absieht, dass das mit dem `open()` ohne ein schliessen der Datei unsauber ist, sollte das soweit eigentlich gehen.

`data_uri` ist als Name falsch, weil das keine URI ist, sondern nur ein Teil davon.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
LukeNukem
User
Beiträge: 232
Registriert: Mittwoch 19. Mai 2021, 03:40

kaapython hat geschrieben: Dienstag 26. Oktober 2021, 19:54 Dies ist meine Übergabe in der Funktion. Dort würde ich auch gern das Bild mit übergeben. Da es aber nicht vom Typ string ist, funktioniert das natürlich nicht.
Dann mach aus dem bytes-Objekt, das base64.b64encode() zurückgibt, ein str-Objekt. Dazu hat das Bytes-Objekt die Methode "decode()".
kaapython
User
Beiträge: 4
Registriert: Samstag 23. Oktober 2021, 14:06

LukeNukem hat geschrieben: Mittwoch 27. Oktober 2021, 00:11
kaapython hat geschrieben: Dienstag 26. Oktober 2021, 19:54 Dies ist meine Übergabe in der Funktion. Dort würde ich auch gern das Bild mit übergeben. Da es aber nicht vom Typ string ist, funktioniert das natürlich nicht.
Dann mach aus dem bytes-Objekt, das base64.b64encode() zurückgibt, ein str-Objekt. Dazu hat das Bytes-Objekt die Methode "decode()".
Das habe ich bereits versucht. Ich erhalte trotzdem folgende Fehlermeldung:

Code: Alles auswählen

Exception has occurred: TypeError       (note: full exception trace is shown but execution is paused at: load_room)
can only concatenate list (not "str") to list
rogerb
User
Beiträge: 878
Registriert: Dienstag 26. November 2019, 23:24

Code: Alles auswählen

can only concatenate list (not "str") to list
Dann enthält die Variable "messages" wohl eine Liste. Aber das kann man an dem gezeigten Codeausschnitt nicht sehen.

Code: Alles auswählen

In [1]: liste = ["a", "b", "c"]

In [2]: liste+"d"
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-2-f5531f9360c7> in <module>
----> 1 liste+"d"

TypeError: can only concatenate list (not "str") to list

In [3]:
kaapython
User
Beiträge: 4
Registriert: Samstag 23. Oktober 2021, 14:06

Danke, eine andere Variable war nicht vom Typ "str". Vielen Dank für die Hilfe
Antworten