phpbar.de logo

Mailinglisten-Archive

[php] Bild ausgeben mit imagecreatetruecolor und vlibtemplate

[php] Bild ausgeben mit imagecreatetruecolor und vlibtemplate

Dennis Sterzenbach lists at darknoise.de
Sam Jan 29 11:45:52 CET 2005


Hallo Ulrich,

Ulrich Wiederhold wrote:
> ich sitze seit 2 Wochen daran, mir eine Homepage für meine Fotos zu
> basteln und komme nicht weiter. Habe vorher auch noch nichts mit html,
> css und php zu tun gehabt.
Nachdem ich nun Deine E-Mail komplett gelesen habe, frage ich mich, 
warum es dann unbedingt so kompliziert sein muss? Aller Anfang ist 
schwer. Und Du versuchst hier direkt zu Anfang schon etwas recht 
kompliziertes.

> Ich habe die Daten meiner Bilder (alles jpgs) in eine mysql-Datenbank gepackt und
> möchte nun aus dieser meine Seite generieren. Dafür habe ich sie in ein
> array ausgelesen.
> 
> Ich dachte mir, dazu die Funktion imagecreatetruecolor der GD-lib zu
> verwenden. Mit der Info auf
> "http://de2.php.net/manual/de/function.imagecreatetruecolor.php" komme
> ich allerdings nicht weiter.
> Wie rufe ich die Funktion aus html heraus auf? Wo wird der Pfad zum Bild
> übergeben?
Aus HTML gar nicht. Du kannst PHP-Funktionen nur aus/in PHP Code 
aufrufen. Du hast einfach nicht richtig geguckt. imagecreatetruecolor 
ist zum Erstellen eines blanken Bildes, ohne Herkunft aus anderen 
binären Daten. Du müsstest imagecreatefromstring [1] oder 
imagecreatefromjpeg [2] o.ä. verwenden für Deinen Zweck.
Ein Pfad zu einem Bild muss da gar nicht angegeben werden, da Du mit 
einer mySQL Datenbank als Datenhaltung arbeiten möchtest und die 
Bilddaten bei Dir somit in einem String vorliegen, nicht als 
eigenständige Datei im Dateisystem des Servers.

> Da ich mit Templates arbeiten möchte, um das ganze übersichtlicher zu
> halten, wäre wahrscheinlich der Aufruf einer separaten Datei, z.B.
> showimage.php am einfachsten. Aber wie rufe ich die Funktion auf und wo
> übergebe ich die Parameter?
Der Aufruf in einer seperaten Datei ist sogar notwendig, da Bilder 
eigenständige, binäre  Resourcen sind und somit nicht im HTML-Quelltext 
liegen können, wenn sie vom Browser erkannt und dargestellt werden sollen.
Als Parameter würde ich doch einfach nur die ID des Bildes in der mySQL 
Datenbank übergeben. Dann liest Du die Binärdaten aus der Tabelle aus, 
anhand der ID.

> Mache ich die DB-Abfrage dann ambesten auch in dieser showimage.php oder
> wie gestaltet man sowas am besten?
Nur dort macht diese wirklich Sinn, außer du verfolgst folgenden Ansatz:
Du liest alles für die Seite aus und hast dies innerhalb z.B. index.php 
irgendwo in einem Array liegen.
Da nun Bilder wie oben geschrieben als eigenständige Resource von 
Browsern angefragt werden, musst Du also diese getrennt von dem HTML 
ausgeben. Wenn Du keine eigenständige image.php o.ä. haben möchtest 
könntest Du temporäre Bilddateien auf die Platte schreiben.
Zum Beispiel sowas hier:
<html>.......<img src="345879aedf423deff321.jpg">
Dieses Bild ist aus der Datenbank geholt und nach Verarbeitung in deinem 
PHP-Script von diesem temporär mit z.B. imagejpeg($image, 
'345879aedf423deff321.jpg') [3] ausgegeben.

Wenn Du - was ich Dir in Deinem Fall empfehlen möchte - über ein 
eigenständiges PHP-Script die Bilder ausliefern möchtest, musst Du in 
jedem Fall darauf achten, die richtigen Header auszuliefern, bevor Deine 
Binärdaten auf die Reise an den Browser geschickt werden.
Zumindest musst Du
    header('Content-Type: image/jpeg');
bzw. diesen angepasst an den gesendeten Bilddatentyp (gif, ....) senden.
Am gesündesten ist es aber auch nocht den Browser mit Hilfe von weiteren 
zu steuern (die etwa die Datengröße Content-Length: angeben u.a.)

[1] http://de2.php.net/manual/de/function.imagecreatefromstring.php
[2] http://de2.php.net/manual/de/function.imagecreatefromjpeg.php
[3] http://de2.php.net/manual/de/function.imagejpeg.php

-- 
   Dennis Sterzenbach

php::bar PHP Wiki   -   Listenarchive