wahsaga: Bildobjekt in Session übergeben

Beitrag lesen

hi,

ich hänge immer noch an meinem Problem, ein Bild als Stream in einer HTML-Seite auszugeben.

Darf man fragen, _warum_ du das Bild erst in der Session zwischenspeichern möchtest - anstatt es vom erzeugenden Script auch gleich an den Client ausgeben zu lassen?

Das Bild wird in einem Script so erzeugt:
$im = @imageCreate (100, 100) or die ("Fehlermeldung");

$im ist jetzt eine "Image resource" - es enthält nicht die eigentlichen Bilddaten, sondern es ist lediglich eine Art "Zeiger" auf ein Bildobjekt irgendwo im Speicherbereich deines Scriptes.

session_start();
$_SESSION['map'] = $im;
session_write_close();

Jetzt hast du lediglich diesen Zeiger in die Session geschrieben.

Im Script "image.php" steht dann folgendes:

header("Content-type:image/png");
session_start();
$im = $_SESSION['map'];
ImagePNG($im);

Jetzt hast du dir den "Zeiger" wiedergeholt. Dieser mag eine bestimmte Speicheradresse oder sonstwas enthalten (ich weiß nicht genau, wie PHP das realisiert hat) - auf jeden Fall zeigt er jetzt auf irgendeinen Murks, und nicht mehr auf dein Bild - denn dieses war ein Objekt des vorherigen Scriptes, und ist deshalb mit dessen Ende natürlich ins Datennirwana geschickt worden.

lasse ich das ganz dann laufen, dann bringt mir image.php folgende Fehlermeldung:

imagepng(): supplied argument is not a valid Image resource

Logisch, wie oben gesagt: Du hast irgendein altes Lesezeichen - aber das Buch ist längst weggeworfen worden. (OK, der hinkt ein wenig :-))

Ich denke, der Fehler liegt daran, dass ich eine Bildressource nicht so einfach in eine Sessionvariable schreiben kann.

Kannst du schon - aber sie ist außerhalb des Scriptes, in dem sie erzeugt wurde, wertlos.

Ich habe auch schon probiert, Das Bild per $_SESSION['map'] = serialize($im) in die Session zu schreiben und per $im = unserialize($_SESSION['map']) wider aus der Session zu lesen. Bringt aber nix, kommt die selbe Fehlermeldung.

Wie gesagt, $im enthält _nicht_ die Bilddaten.

Die Bilddaten gibt dir imagepng() zurück.
Du könntest diese Ausgabe abfangen (Stichwort: output buffering), und dann serialisiert in die Session schreiben.

Das dürfte aber idR. ziemlich unperformant sein.

gruß,
wahsaga

--
/voodoo.css:
#GeorgeWBush { position:absolute; bottom:-6ft; }