Wie kann ein Python script als Bild fungieren?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
Ephraim
User
Beiträge: 9
Registriert: Dienstag 15. Februar 2005, 14:59
Kontaktdaten:

Montag 7. Januar 2008, 09:37

Hey,

wie kann ich ein Python Script z.b. in einer Website in einem img Tag als src angeben und dieses Script gibt dann ein Bild aus?

Der einfachste Ansatz hat erstmal noch nicht gefruchtet.
Hier der Code von meinem Ansatz:

Code: Alles auswählen

#!/usr/bin/python2.5
print "Content-type: image/jpg\n\n";

f = open('test.jpg')
print f.read()
f.close()
Vorschläge?

Ciao Ephraim
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Montag 7. Januar 2008, 09:48

Ephraim hat geschrieben:

Code: Alles auswählen

#!/usr/bin/python2.5
print "Content-type: image/jpg\n\n";

f = open('test.jpg')
print f.read()
f.close()
Hallo Ephraim!

Leider hast du uns nicht mitgeteilt, welcher Fehler auftaucht.

Aber eines ist sowiso falsch. Eine Binärdatei, wie sie ein Bild ist, darfst du nicht wie eine Textdatei öffnen. Du musst "b" mit angeben.

Code: Alles auswählen

f = open('test.jpg', "rb")
Außerdem würde ich in Internetprogrammen lieber den absoluten Pfad zu einer Datei angeben.

Und wenn du in deinem CGI-Programm "cgitb" http://docs.python.org/lib/module-cgitb.html verwendest, dann bekommst du evt. bessere Fehlermeldungen.
Ich gehe mal davon aus, dass du CGI verwendest, da dein Code so aussieht.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Ephraim
User
Beiträge: 9
Registriert: Dienstag 15. Februar 2005, 14:59
Kontaktdaten:

Montag 7. Januar 2008, 09:56

Upps :) ...
Na der Browser zeigt kein Bild an, nur den Platzhalter für ein Bild welches nicht gefunden werden kann oder keine korrekte Daten enthält.

Hab mir aber den "Stream" schon als text angeguckt. Das Bild wird auf jeden Fall mal geöffnet und ausgegeben.

Danke für den Hinweise wegen Binär Datei. Leider ändert das nichts. :(

Mit php funktioniert des gleiche Script, der einzige Unterschied der sich für mich daraus ergibt ist die Nutzung der Funktion Header() von PHP.
Insofern geh ich ma davon aus, dass ich mit dem Header noch irgendwas falsch mache, aber sicher weiß ich nicht was die Funktion Header() so alles macht :(.

Ciao Ephraim
Ephraim
User
Beiträge: 9
Registriert: Dienstag 15. Februar 2005, 14:59
Kontaktdaten:

Montag 7. Januar 2008, 10:03

He :) ... jetzt funtzts ;)

Ich hab vergessen, dass print von Python schon selbst ein Newline hinten anhängt.
Dadurch waren nach dem Header drei Newlines anstatt zwei. Das dritte ging dann in die Daten des Bilds mit ein und des geht natürlich nicht :).

Danke für die Hilfe!

Ciao Ephraim

korrekter Code:

Code: Alles auswählen

#!/usr/bin/python2.5
print "content-type: image/jpeg\n";

f = open("test.jpg", "rb")
print f.read()
f.close()
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Montag 7. Januar 2008, 10:22

Genau deswegen kann es oft hilfreich sein, nicht `print`, sondern `sys.stdout.write()` zu verwenden, bei welchem man dann explizit zwei Newlines angibt, die dann auch der tatsächlich ausgegebenen Anzahl entsprechen.
Antworten