Mit GD Thumbnails erstellen

Moinsen :D
hab mal ne Frage bin grad dabei ne Page zu machen, und ich würde halt gerne picz einbinden die dann in der Übersicht als Thumbnail angezeigt werden, ohne dass ich sie verkleinern muss... ich weiß GD kann sowas aber kp wie o0

Dankeschön schon mal im voraus ;)

Habe das im I-Net gefunden aber das klappt nicht gibt nur cryptische Sachen aus so Sonderzeichen usw.
PHP:
<?php
header("Content-type: image/jpeg");
$src    =  "img/imgp4830.jpg";
$img     =  imagecreatefromjpeg($src);
$imgSize =  getImageSize ($src);

$nHoch  =  40;
$factor =  $imgSize[1]/$nHoch;
$nBreit =  $imgSize[0]/$factor;

$nImg   =  imagecreate($nBreit, $nHoch);
$copy   =  imagecopyresized($nImg, $img, 0, 0, 0, 0, $nBreit, $nHoch, $imgSize[0], $imgSize[1]);
imagejpeg($nImg, "", 95);
imagedestroy($nImg);
?>
 
Wenn nur Sonderzeichen ausgegeben werden, dann wird das header("Content-type: image/jpeg") vom Browser nicht richtig interpretiert oder du hast schon Zeichen ausgegeben, bevor du header() angewendet hast. Wenn das nicht der Fall ist, sollte es eigentlich funtkionieren.
 
kannst ja mal hier gucken: http://real-insanity.de/schatznme/index.php?section=picz der gibt da i-wie in dem kasten nur so cryptischen müll bei mir aus x)

Hatte das auch schonmal auspprobiert aber das geht genauso wenig :(
PHP:
//parser liest quellbild ein
$quellbild=imagecreatefromjpeg("img/imgp4830.jpg");

//neue breite -> hoehe wird entsprchend skaliert (px)
$breite_neu = 200;

//breite und hoehe des quellbildes werden in variablen geschrieben
$breite = imagesx($quellbild);
$hoehe = imagesy($quellbild);

//multiplikator fuer die skalierung errechnen
$skalierungsfaktor = $breite/$breite_neu;
//neue hoehe errechnen
$hoehe_neu = $hoehe/$skalierungsfaktor;

//Filehandle fuer das 2te Bild, das eigentliche Thumbnail
$zielbild = imagecreate($breite,$hoehe);

//kopiert das alte bild in das neue und skaliert nach den letzen 4 faktoren
$thumb=imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);
echo "<img src=".$thumb.">";
 
Beim zweiten Codeschnipsel ist ein Fehler drinn, da wird nämlich beim <img>-Tag anstatt einer gültigen Adresse zum Bild das Bild selber in das src-Attribut geschreiben. Du müsstest das Thumbnail in einem Script erzeugen und im anderen Script den <img>-Tag mit der Adresse zum Thumbnail-Script generieren. Das Script enthält auch noch andere Semantik/Syntax-Fehler, korrekt würde es so aussehen:

thumbnail.php:
PHP:
<?php

$quellbild=imagecreatefromjpeg("img/imgp4830.jpg");

$breite_neu = 50;

$breite = imagesx($quellbild);
$hoehe = imagesy($quellbild);
$skalierungsfaktor = $breite/$breite_neu;
$hoehe_neu = $hoehe/$skalierungsfaktor;

$zielbild = imagecreatetruecolor($breite_neu,$hoehe_neu);
imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);
header("Content-type: image/jpeg");
imagejpeg($zielbild, '', 100);

?>

foobar.html:
Code:
... <img src="thumbnail.php" /> ...
 
Mit jedem Aufruf der Seite die Thumbnails on-the-fly mit PHP zu erzeugen geht aber ordentlich auf die Performance... erst recht, wenn man auch noch mehrere davon in einer Galerieansicht hat. Die Thumbnails sollten also eher auf dem Dateisystem abgelegt und dann als normale Bilddateien eingebunden werden.

Das sollte einfach möglich sein, indem man imagejpeg() als zweiten Parameter einen Dateinamen übergibt, unter dem das dann abgelegt wird.
 
juhu es klappt x) also das "on-the-fly"
sry bin völliger php noob, bzw. GD-Noob, wie meinstn das @ LX?


hab dennoch eine frage kann man die auch dynamisch verlinken lassen? d.h. meherer bilder inner schleife z.b. aufrufen und die dann mit <a href=""> verlinken...?

Also praktisch wie einen Bildergallerie mit umblättern, wenn ich drauf klicke öffnet sich bild in groß und vllt mysql anbindung :)
 
Wenn du die Bilder "on-the-fly" mit einer Schleife generieren willst, kannst du das so machen:

foobar.php:

PHP:
<?php

$max=count(scandir("img"))-2;

for($i=0; $i<$max; $i++)
    echo "<img src=\"create_pic.php?id=".$i."\" />";

?>

create_pic.php:

PHP:
<?php

$breite_neu = 50;
$handle = opendir("img");

for($i=0; $i<=$_GET['id']+2&&$i>=0; $i++)
    $bild=readdir($handle);

list($breite, $hoehe, $format) = getimagesize("img/".$bild);

switch($format){
    case 1:
      $quellbild = imagecreatefromgif("img/".$bild);
      break;
    case 2:
      $quellbild = imagecreatefromjpeg("img/".$bild);
      break;
    case 3:
      $quellbild = imagecreatefrompng("img/".$bild);
}

$skalierungsfaktor = $breite/$breite_neu;
$hoehe_neu = $hoehe/$skalierungsfaktor;

$zielbild = imagecreatetruecolor($breite_neu,$hoehe_neu);
imagecopyresampled($zielbild,$quellbild,0,0,0,0,$breite_neu,$hoehe_neu,$breite,$hoehe);
header("Content-type: image/jpeg");
imagejpeg($zielbild, '', 100);

?>

So sollten eigentlich alle Bilder im Verzeichnis "/img/" angezeigt werden. Wenn du es nicht "on-the-fly" willst, musst die Thumbnails im Uploadscript generieren und dann speichern.
 
Code:
Fatal error: Call to undefined function: scandir() in /srv/www/htdocs/web81/html/realinsanity/schatznme/inc/inhalt/picz.html on line 5

Das sagt der mit jetzt 0o worann kann das liegen?
 
Scandir() ist erst ab PHP 5 verfügbar, als Alternative kannst du das benutzen:

PHP:
<?php

$handle=opendir("img");
for($max=-2; readdir($handle); $max++);
closedir($handle);

for($i=0; $i<$max; $i++)
    echo "<img src=\"create_pic.php?id=".$i."\" />";

?>
 
Original von Abstauber
juhu es klappt x) also das "on-the-fly"
sry bin völliger php noob, bzw. GD-Noob, wie meinstn das @ LX?
"On-the-fly" heißt soviel wie dass es dann berechnet wird, wenn's benötigt wird... und das jedes Mal. Das heißt, jedes Mal, wenn jemand deine Thumbnail-Übersicht aufruft, rödelt PHP über alle benötigten Bilderdateien, konvertiert und verkleinert die und spuckt sie aus... ein ziemlicher Aufwand. Daher mein Vorschlag, dass du das Generieren der Thumbnails nur einmalig machst und das Ergebnis auf der Platte speicherst, damit du künftig dann direkt das Thumbnail ansprechen kannst.
 
also das klappt jedoch zeigt es mir nur ein pic an... normalerweise müsste es doch mehrere anzeigen bzw. den ganzen ordner inhalt oder?

und vllt ne verlinkung wäre net schlecht ;) aber das probiere ich dann mal selber aus :)
 
Zurück
Oben