PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit thumbnails



schwarzbarde
17-04-2005, 00:19
Hallo! Ich bekomme an folgendem Beispiel an der Fehlerstelle immer ein

Warning: readdir(): supplied argument is not a valid Directory resource in...

Was mache ich falsch?


class thumbnail { //sammelt alle *.jpg sowie *.png dateien in einem Verzeichnis und erstellt eine gallerie daraus

var $gfxpath = "content/gfx/";

function thumbnail() {

$dir = opendir($gfxpath);

while($file = readdir($dir)) { //An dieser Stelle kommt der Fehler
if ( (strpos($file, '.jpg') ) || (strpos($file, '.png') ) ) {
resize_me($file);
echo "<h1>$file</h1><br>"; }

closedir($dir);
}
}

.... Rest der Klasse
}

nEox
17-04-2005, 01:40
Hallo schwarzbarde,

der eigentliche Fehler liegt in

$dir = opendir($gfxpath);
"supplied argument is not a valid Directory resource in..."

D.h. das der Pfad der an opendir() übergeben wird nicht stimmt.
Und das liegt daran das du die Variable $gfxpath mit $this->gfxpath ansprechen musst um an den Wert der Variablen zu kommen.

Ich würde vor dem opendir() noch den Wert der Variable $this->gfxpath mit is_dir() prüfen, dann kannst du auch eine Fehlermeldung ausgeben wenn es kein gültiger Pfad ist. Das würde das Debuggen dann erleichtern :)

Gruß

nEox

schwarzbarde
17-04-2005, 10:44
So, die thumbnail funktion geht nun, aber wenn ich aus ihr die resize_me() funktion aufrufen will, sagt er mir "Call to undefined function: resize_me()".
Wie kann ich die funktion richtig benutzen? Damit wäre mir ein richtig gutes Stück geholfen.

class thumbnail { //sammelt alle *.jpg sowie *.png dateien in einem Verzeichnis und erstellt eine gallerie daraus

var $gfxpath = "content/gfx/";


function thumbnail() {
$dir = opendir($this->gfxpath);

if(!$dir) echo "<h2>FEHLER MIT DEM gfxpath</h2>";

// if (is_dir($dir))
while($file = readdir($dir)) {
if ( (strpos($file, '.jpg') ) || (strpos($file, '.png') ) ) {
resize_me($file);
echo "<h1>$file</h1><br>"; }


}
// else echo "<h2>Verzeichnisfehler! $this->gfxpath</h2>";

closedir($dir);

}
function resize_me($bild) { //verkleinert das jeweils uebergebene Bild und macht es anklickbar

....hier steht die funktion... Funktioniert auch
}



} // Ende der Klasse thumbnail

schwarzbarde
17-04-2005, 11:28
Juhu! Endlich funktioniert alles, meine Thumbnail Funktion geht *freu*.
Sie sieht nun so aus:


<?php

class thumbnail { //sammelt alle *.jpg sowie *.png dateien in einem Verzeichnis und erstellt eine gallerie daraus

var $gfxpath = "content/gfx/";


function thumbnail() {
$dir = opendir($this->gfxpath);

if(!$dir) echo "<h2>FEHLER MIT DEM gfxpath</h2>";

// if (is_dir($dir))
while($file = readdir($dir)) {
if ( (strpos($file, '.jpg') ) || (strpos($file, '.png') ) ) {
$this->resize_me($file);
echo "<h1>$file</h1><br>"; }


}
// else echo "<h2>Verzeichnisfehler! $this->gfxpath</h2>";

closedir($dir);

}
function resize_me($bild) { //verkleinert das jeweils uebergebene Bild und macht es anklickbar
$PicPathIn = $this->gfxpath;
$PicPathOut= $this->gfxpath . "thumbs/";

// Orginalbild
$this->bild = $bild;

// Bilddaten ermitteln
$size=getimagesize("$PicPathIn"."$bild");
$breite=$size[0];
$hoehe=$size[1];
$neueBreite=120;
$neueHoehe=intval($hoehe*$neueBreite/$breite);

if($size[2]==2) {
// JPG
$altesBild=ImageCreateFromJPEG("$PicPathIn"."$bild");
$neuesBild=imageCreate($neueBreite,$neueHoehe);
imageCopyResized($neuesBild,$altesBild,0,0,0,0,$ne ueBreite,$neueHoehe,$breite,$hoehe);
ImageJPEG($neuesBild,"$PicPathOut"."TN"."$bild");
}

if($size[2]==3) {
// PNG
$altesBild=ImageCreateFromPNG("$PicPathIn"."$bild");
$neuesBild=imageCreate($neueBreite,$neueHoehe);
imageCopyResized($neuesBild,$altesBild,0,0,0,0,$ne ueBreite,$neueHoehe,$breite,$hoehe);
ImagePNG($neuesBild,"$PicPathOut"."TN"."$bild");
}

$Thumbnail=$PicPathOut."TN".$bild;

$backlink="$PicPathIn"."$bild";
echo "<A href=\"$backlink\" target=\"framename\" onClick=\"window.open('','framename','scrollbars=no,resizabl e=no,width=$breite,height=$hoehe left=0,top=0');\"><IMG SRC=\"$Thumbnail\" WIDTH=\"$neueBreite\" HEIGHT=\"$neueHoehe\"></A>";
}



} // Ende der Klasse thumbnail

?>

nEox
17-04-2005, 12:50
Hallo schwarzbarde,


Juhu! Endlich funktioniert alles, meine Thumbnail Funktion geht *freu*.
Super :)

Kleiner Tipp:

Mit imagecopyresampled() statt imagecopyresized() wird die Qualität besser weil die Pixel dann interpoliert werden.
Dazu musst du noch imagecreatetruecolor() statt imagecreate() verwenden, sonst sieht das mh.. schlecht aus :)

Gruß

nEox

schwarzbarde
17-04-2005, 12:57
Hallo schwarzbarde,


Super :)

Kleiner Tipp:

Mit imagecopyresampled() statt imagecopyresized() wird die Qualität besser weil die Pixel dann interpoliert werden.
Dazu musst du noch imagecreatetruecolor() statt imagecreate() verwenden, sonst sieht das mh.. schlecht aus :)

Gruß

nEox
Genial! Danke, die Bildqualität ist tatsächlich zur Zeit nicht besonders. Werde das beheben :)