Andi123: Bildausgabe - nur Bytecode auf der Homepage

Hallo,

wieder mal eine Frage.
Ich moechte folgendes realisieren. Bilder die auf meinem Webserver liegen, sollen fuer ein Voting dem Nutzer angezeigt werden.
Nun sollen die Bilder aber nicht in der vollen Groesse, sondern verkleinert angezeigt werden. Das moechte ich aber nicht ueber die IMG-widht/ IMG-height regeln, sondern per PHP und "imagecopyresampled" Wenn ich das Bild dann mit "imagejpeg" im Browser ausgebe, erscheint auf der Webseite nicht das Bild, sondern wirre Zeichen, also quasi, als wenn ich mir das Bild in einem Dateieditor anschauen wuerde.

Was mache ich falsch? Bzw. wie muss die Ausgabe syntaktisch korrekt programiert werden?
Ich habe jetzt
echo "<img src='[pfad]/".bildgroesseaendern(bildname).">";
In der Funktion "bildgroesseaendern" wird das Bild resize't und mit imagejpeg() ausgegeben.

Wenn ich das Bild als File ausgebe, wir das Bild korrekt im Filesystem abgelegt und ich kann es mir mit einem Viewer auch normal anzeigen lassen.

Danke Andi

  1. N'Abend,

    also vorab, ich kenne die PHP-Funktionen nicht so genau, aber wenn das stimmt was du sagst, dann ist da ein konzeptioneller Fehler drin:
    Was gibt <img src="xyz/abc.jpg" /> an?
    Das der Browser ein Bild laden soll, dass als Datei abc.jpg unter dem Pfad xyz erreichbar ist.

    echo "<img src='[pfad]/".bildgroesseaendern(bildname).">";

    Was macht demnach das hier?
    Es fragt ein Bild unter [pfad] ab, das als Resource-Namen den _Inhalt_ einer JPEG-Datei hat. Das ist so aber nicht richtig.
    Du brauchst also vielmehr so etwas wie
    <img src="imageloader.php?bild=$(bildname)">
    und in der imageloader.php dann als einzige Ausgabe das
    echo bildgroesseaendern(bildname);

    Oder seh ich was falsch?

    MfG
    Rouven

    --
    -------------------
    ss:) zu:) ls:& fo:) de:< va:{ ch:? sh:) n4:( rl:? br:$ js:| ie:) fl:(
    1. Hallo,

      Oder seh ich was falsch?

      Nein, ich stimme zu. Wenn du den HTML-Code, der erstellt wird, anschaust, siehst du bestimmt, dass durch PHP nur [pfad].[rückgabewert_der_funktion] als source angegeben ist.
      Du musst als src sozusagen eine .php-Datei verwenden, die mit imagejpeg() das Bild erzeugt.

      Vielleicht sei noch gesagt, dass es schon ein wenig rechenaufwand ist, das Bild (oder sogar mehrere bei einem Seitenaufruf ?!?!?) zu erstellen!
      Vielleicht wäre es schlauer, das Bild zu erstellen und zu speichern, und dann bei jedem weiteren Aufruf nachzuschauen [1], ob das Bild schonmal resized wurde und ggf dieses verwenden.

      werbeklaus

      [1] Du könntest, um die Thumbnails wiederzufinden zum Beispiel den Dateinamen beibehalten und in einem anderen Ordner speichern, oder aber als Dateinamen die md5-checksum des Original-Bildes verwendnen.

  2. Hallo,

    echo "<img src='[pfad]/".bildgroesseaendern(bildname).">";
    In der Funktion "bildgroesseaendern" wird das Bild resize't und mit imagejpeg() ausgegeben.

    Fast richtig, aber trotzdem falsch.

    tmp_dateiname = bildgroesseaendern(bildname)

    wäre eine Lösung, die über die Platte geht.
    Die Funktion ermittelt einen temporären Dateinamen und speichert das skalierte Bild in diese Datei. Als Funktionsergebnis gibt sie bei Erfolg den ermittelten tmp_dateinamen zurück, bei Misserfolg eben einen Dateinamen eines persistenten Fehlerbildes in dem Pfad.

    http://de2.php.net/manual/de/function.tmpfile.php

    Wenn der Dateiname entsprechend gewählt wird, sollte der Webserver sogar den passenden header automatisch voraussenden, denn den brauchen die Browser i.d.R.

    Wenn du eine tmp_datei wählst, verschwindet die bei Scriptende auch automatisch wieder von der Platte.

    Allerdings dürften solche Scripte recht teuer sein, wenn jedes Mal die Dateien berechnet werden müssen.

    LG
    Chris

    1. Hallo,

      echo "<img src='[pfad]/".bildgroesseaendern(bildname).">";
      In der Funktion "bildgroesseaendern" wird das Bild resize't und mit imagejpeg() ausgegeben.

      Fast richtig, aber trotzdem falsch.

      tmp_dateiname = bildgroesseaendern(bildname)

      wäre eine Lösung, die über die Platte geht.
      Die Funktion ermittelt einen temporären Dateinamen und speichert das skalierte Bild in diese Datei. Als Funktionsergebnis gibt sie bei Erfolg den ermittelten tmp_dateinamen zurück, bei Misserfolg eben einen Dateinamen eines persistenten Fehlerbildes in dem Pfad.

      Kleiner Denkfehler noch...

      Du kannst keine Temporärdateinehmen, sondern solltest eine normal persistente Datei nehmen. Ermittel den Namen aus dem Original-Bildnamen. Wenn die thumb-Datei dann schon da ist, brauchst Du sie gar nicht mehr errechnen zu lassen. Das Stammscript endet, bevor der Client (Browser) die Images vom Server anfordert. Daher kannst Du keine Temporärdatei benutzen.

      LG
      Chris