Razorback: Probleme mit gd-lib

Hallo zusammen,

ich habe folgendes Problem mit der gdlib in PHP:

Also ich habe auf meiner Seite ein Fotoalbum. Die Fotos sind idR in 1024x768 auf dem Server hinterlegt. Ruft man nun das Fotoalbum auf wird das erste Bild in einer verkleinerten Version (mit gdlib auf 350x233 verkleinert) angezeigt, darunter eine Menüzeile mit Buttons zum vor- und zurückblättern und ein Button der das Bild auf Wunsch in voller Grösse in einem neuen Fenster öffnet. So weit, so unspektakulär.

Da die gdlib an mehreren Stellen verwendet wird habe ich dafür eine eigene Datei erstellt >imageresize.php<. Die Dateinamen der Fotos sind in der Datenbank gespeichert. Soll nun ein Foto angezeigt werden sucht das Skript den entsprechenden Dateinamen $bild aus der DB und übergibt ihn zusammen mit der gewünschten neuen Grösse im Image-Tag an o.g. Skript um das Bild zu verkleinern:

$bild = 'fotos/2005/143.jpg';
<img src='skripte/imageresize.php?bild=$bild&neueBreite=350'>

Bei etwa der Hälfte Bilder funktioniert das perfekt, merkwürdigerweise bei den restlichen nicht. Alle Bilder sind in gleicher Art und Weise in der Datenbank aufgelistet, es sind auch alle Bilder korrekt hochgeladen, denn auch bei den Bildern wo das mit der Vorschau nicht klappt funktioniert die Darstellung in voller Grösse wenn man den entsprechenden Button klickt.

In meiner Verzweifelung habe ich die imageresize.php mal allein im Browser aufgerufen mit den entsprechenden Parametern um zu schauen was das Skript zurückgibt. Bei einem Bild wo die Vorschau funktioniert blieb das Fenster erwartungsgemäß leer (weil ja kein Image-Tag drin ist), bei einem Bild wo die Vorschau nicht funktioniert erschien folgendes:

CREATOR: gd-jpeg v1.0 (using IJG JPEG v62), default quality

und darunter etwa 100 Zeilen Hyroglyphen, ich denke mal Binärcode von irgendwas...

Das daraus kein Foto angezeigt werden kann leuchtet mir zwar ein, aber warum kommt das nur manchmal und vor allem: Was ist das und wie kann ich es beheben ? Hat vielleicht jemand ne Idee ?

Die Datei imageresize.php sieht folgendermassen aus:

####imageresize.php############

$size=getimagesize($bild);
$breite=$size[0];
$hoehe=$size[1];

if($neueHoehe=="")
  {
      $neueHoehe=intval($hoehe*$neueBreite/$breite);
  }

$altesBild=ImageCreateFromJPEG($bild);
$neuesBild=imagecreatetruecolor($neueBreite,$neueHoehe);
ImageCopyResized($neuesBild,$altesBild,0,0,0,0,$neueBreite,$neueHoehe,$breite,$hoehe);
ImageJPEG($neuesBild);

###############################

Bin für alle Ideen dankbar.

  1. hi,

    Die Datei imageresize.php sieht folgendermassen aus:

    Du sagst darin nirgendwo dem Browser, dass Bilddaten ausgeliefert werden.
    Also muss er _raten_, um was für eine Art von Ressource es sich handeln könnte - und dies macht er wohl manchmal halbwegs passabel, und manchmal weniger gut.

    Benutze header(), um vor der Ausgabe der Bilddaten auch einen passenden Content-type Header zu schicken.

    gruß,
    wahsaga

    --
    /voodoo.css:
    #GeorgeWBush { position:absolute; bottom:-6ft; }
    1. Hat sich schon erledigt, ich habs gerade gemerkt woran es liegt:

      Die Bilder die angezeigt werden haben die Endung .jpg , die bilder die nicht klappen haben die Endung .JPG

      Offensichtlich besteht da in der gdlib im Gegensatz zum Browser ein Unterschied. Trotzdem danke für deinen Hinweis, das mit den Headern hab ich zur Sicherheit auch noch direkt eingefügt. Schaden kann es ja nicht.

      Gruss
      Razor

      hi,

      Die Datei imageresize.php sieht folgendermassen aus:

      Du sagst darin nirgendwo dem Browser, dass Bilddaten ausgeliefert werden.
      Also muss er _raten_, um was für eine Art von Ressource es sich handeln könnte - und dies macht er wohl manchmal halbwegs passabel, und manchmal weniger gut.

      Benutze header(), um vor der Ausgabe der Bilddaten auch einen passenden Content-type Header zu schicken.

      gruß,
      wahsaga