Thumbnails erstellen und "cachen"

chrigu

chrigu

Aktives Mitglied
Thread Starter
Dabei seit
08.03.2004
Beiträge
155
Reaktionspunkte
0
Ich habe mir ein Script erstellt, das bei aufrufen mittels <img src="images/fotos/thumb.php?image=auto.jpg"> ein Thumbnail des in der Variabel definierten Bildes zurückgibt.

Das thumb.php liegt im gleichen Verzeichniss wie die Bilder, von denen ein Thumb erstellt wird oder gegebenenfalls aus dem Cache Ordner ausgelesen wird.

PHP:
<?php
// Bilderzeugung - thumb.php



if (!is_dir("cache")) {
    mkdir("cache", 0777); 
    }else {
    system("chmod 0777 ".cache);
    }

$verz = dir("images/fotos/cache");

if (file_exists($verz.$_GET['image'])) {
    $iscached = true;
    }else {
    $iscached = false;
    }



if (!$iscached) {
  
  header("Content-type: image/jpeg");
  
  $scale = 4;
  $size = getimagesize($_GET['image']);
  $width = round($size[0]/$scale);
  $height = round($size[1]/$scale);
  $src = imagecreatefromjpeg($_GET['image']);
  $dest = imagecreatetruecolor(69,69);
  imagecopyresized($dest, $src, -10, -10, 0, 0, $width, $height, $size[0], $size[1]);
  imagejpeg($dest, $verz.$_GET['image']);
  imagedestroy($dest);
  imagedestroy($src);

  }
  
  $image = $verz.$_GET['image'];
  
  $image = fopen($image, "rb");
  fpassthru($image);
  fclose($image);
  
?>

Leider will es nicht so, sobald ich den Inhalt der Verzweigung (!iscached) lösche ist das Script fehlerfrei, aber funktioniert natürlich nicht wie gewünscht. Ich vermute dort einen Fehler, den ich nicht gefunden habe, es könnte aber durchaus sein, dass ich generell einen Überlegungsfehler gemacht habe.

Ich danke jedenfalls fürs mithelfen!
 
Hat dir immer noch keiner geholfen? :)

Ich werds mal versuchen.

Dazu brauch ich aber zuerst mal die Fehlermeldung wenn es eine gibt.
Wenns die nicht gibt, dann einfach mal beschreiben wie sich der Browser verhält.
 
Also wenn der Browser einfach abbricht dann ist das meinst ein zeichen dafür das.
ImageCreate (In irgend einer Form )nicht geklappt hat.

Hab ich zumindest gerade gelesen.

Im Fehlerfall gibt ImageCreateFromJPEG() eine leere Zeichenkette zurück. Zudem wird eine Fehlermeldung erzeugt, die im Browser als Verbindungsabbruch dargestellt wird.

Probier es mal mit absoluten Pfaden. Damit kannst du das zumindest schonmal ausschliessen.
 
Grundsätzlich bei PHP:

Soweit vereinfachen wie möglich, die gemeldeten Fehler helfen eher selten.
Setz das Verzeichnis manuell, setze die Rechte manuell, kommentier das Setzen von ischached aus und entferne die if-clause. Per phpinfo nachsehen, ob gdlib funktioniert. Ist libjpeg installiert ? Sonst geht jpeg nämlich nicht.

Sind size[0] und [1] gesetzt ?, nach welcher Zeile wird denn ein Fehler ausgegeben, wie lautet er? dann kann ich evtl. mehr sagen. Ich hab jetzt erst mal ne Besprechung...
 
//Ihr seid schon zuvorkommend, weil beim nachbar phpforum habe ich bis
//jetzt vergebens auf Hilfe gewartet.

Ich bin mittlerweile soweit, dass die Variable $verz nun folgenden Wert: $verz = "cache/" hat, damit werden nun die Thumbs im Cache Ordner erstellt. kleiner Erfolg!

Jetzt scheint die Übergabe der Bilder an den Browser nicht zu funktionieren, bin mir nicht sicher, ob ich das richtig gemacht habe. Wenn der Browser das Bild mit dem HTML-Tag <img src="images/fotos/thumb.php?image=auto.jpg">aufruft erscheint dieses Bild mit dem Fragezeichen.

Ich weiss nicht so recht wo ich die
PHP:
header("Content-type: image/jpeg");
Funktion einbauen soll, die soll ja verantwortlich sein damit das Bild an den Browser übergeben wird.

Thanks, und grosses Lob an die Macuser-Community pepp
 
Hi,
fein das es doch noch geklappt hat.

den header musst du so oder so senden wenn du kein html img ausgeben willst.
also immer wenn du vom filesystem liest und das dann an den browser ausgeben willst.

in deinem fall also immer, egal ob gecachte version oder nicht.
auf jedenfall aber for dem fpassthru();

wenn das nicht klappt sind hier noch ein paar header die vielleicht auch noch mitmüssten (nach dem mime-type)

ach ja und einen zeilenumbruch nach jedem geschickten header. und nicht zu vergessen keine leerzeichen vor oder nach dem php-block.

header("Content-Transfer-Encoding: binary\n");
header("Content-Length: {$deine_file_groesse}\n");
 
Zurück
Oben Unten