PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Thumbnails



AlphaWolf
07.08.2004, 17:08
Ich wollte gerne von 150 Bilder Thumbnails machen aber, da mir das zu lange mit Photoshop dauert und ich im Netz nix gefunden habe, habe ich mir folgendes Script geschrieben:



<html>
<head>
<title>Imagesizer</title>
</head>
<body>
<?
$quelle = "./pics/";
$ziel = "./pics/thumbs/";
$neueBreite = 150;

// Verzeichniss laden
$verz=opendir ($quelle);
//Verzeichnis durchgehen
while ($bild = readdir ($verz)) {

echo "Bearbeite ".$bild;

if ($bild != "." && $bild != "..") {


$id = explode(".",$bild);
//Welche Bilddatei?
if ($id[1] == "jpg" or $id[1] == "gif"){
$dateiname = $bild;
//Berechnung der größe
$size = getimagesize($quelle.$bild);
$breite = $size[0];
$hoehe = $size[1];
$neueHoehe = intval($hoehe*$neueBreite/$breite);
if($size[2]==1) {
// GIF
$altesBild = ImageCreateFromGIF($quelle.$bild);
$neuesBild = imageCreateTrueColor($neueBreite, $neueHoehe);
ImageCopyResized($neuesBild, $altesBild, 0, 0, 0, 0, $neueBreite, $neueHoehe, $breite, $hoehe);
ImageGIF($neuesBild, $ziel.$dateiname);
}

if($size[2]==2) {
// JPEG
$altesBild=ImageCreateFromJPEG($quelle.$bild);
$neuesBild=imageCreateTrueColor($neueBreite, $neueHoehe);
ImageCopyResized($neuesBild, $altesBild, 0, 0, 0, 0, $neueBreite, $neueHoehe, $breite, $hoehe);
ImageJPEG($neuesBild, $ziel.$dateiname);
}

echo "<font color=\"green\"> OK</font><br />\n";

}else{
// Wenn das Format nicht bearbeitbar ist
echo "$id[1]-Kann nicht bearbeitet werden <br>";
}
}
}
?>
</body>
</html>


Es liest ein komplettes Verzeichnis aus und gibt die Thumbnails in ein anderes aus. Klappt auch bis Bild 7 dann kommt ein Fatal Error, weil der ganze Speicher verbraten ist. Also meine Frage:
Wie bekomm ich das weg? Muss ich irgendwo in der Schleife diese ibase_free_result Funktion einfügen?

Dannach möchte ich auch noch einbauen, dass die Pfade in eine Datenbank geschrieben werden um nachher alle Thumbs auf einer Seite aufzulisten. Muss ich dann auch wieder irgendwo Speicher freigeben?

Außerdem sehen die Thumbs bei mir ziemlich schlecht aus. So vergrisselt. Kann das am Server liegen oder habe ich da was vergessen. Ist mein erster Versuch mit der gdlibary.

Übrigens: Das ist das vollständige Script.

Snatch
07.08.2004, 17:27
Also wenn du ein Sript bastelst, das Pics aus einem verzeichniss ausliest und ne Tolle Thumb Seite generiert, dann währste mein Held :)

So lange kann ich dir aber auch diese Art und weise empfehlen
http://www.celebritymarkt.de/showthread.php?t=207ist auch gratis ;)

Gruß
Snatch

AlphaWolf
07.08.2004, 17:31
Genau das habe ich ja vor, Snatch. Ich weiß nur im Moment nicht wie ich Speicher wo freigeben kann, damit das auch bei größeren Bilderansammlungen passt.

Dein Link linkt zu diesem Thread hier. Hattest du wohl das falsche in der Zwischenablage:p

martin
07.08.2004, 22:33
benutz imagedestory() (http://de.php.net/imagedestroy) nachdem das bild gespeichert wurde.

AlphaWolf
08.08.2004, 00:04
Habe ich jetzt gemacht nur der FatalError kommt jetzt immer noch an der gleichen Stelle (keine Veränderung). Die Funktion gibt immer true zurück. Hier mal wo ich das eingefügt habe:



<html>
<head>
<title>Imagesizer</title>
</head>
<body>
<?
$quelle = "./pics/";
$ziel = "./pics/thumbs/";
$neueBreite = 150;

// Verzeichniss laden
$verz=opendir ($quelle);
//Verzeichnis durchgehen
while ($bild = readdir ($verz)) {

echo "Bearbeite ".$bild;

if ($bild != "." && $bild != "..") {


$id = explode(".",$bild);
//Welche Bilddatei?
if ($id[1] == "jpg" or $id[1] == "gif"){
$dateiname = $bild;
//Berechnung der größe
$size = getimagesize($quelle.$bild);
$breite = $size[0];
$hoehe = $size[1];
$neueHoehe = intval($hoehe*$neueBreite/$breite);
if($size[2]==1) {
// GIF
$altesBild = ImageCreateFromGIF($quelle.$bild);
$neuesBild = imageCreateTrueColor($neueBreite, $neueHoehe);
ImageCopyResized($neuesBild, $altesBild, 0, 0, 0, 0, $neueBreite, $neueHoehe, $breite, $hoehe);
ImageGIF($neuesBild, $ziel.$dateiname);
}

if($size[2]==2) {
// JPEG
$altesBild = ImageCreateFromJPEG($quelle.$bild);
$neuesBild = imageCreateTrueColor($neueBreite, $neueHoehe);
ImageCopyResized($neuesBild, $altesBild, 0, 0, 0, 0, $neueBreite, $neueHoehe, $breite, $hoehe);
ImageJPEG($neuesBild, $ziel.$dateiname);

}

echo "<font color=\"green\"> OK</font><br />\n";
$free = ImageDestroy($neuesBild);
echo $free;

}else{
// Wenn das Format nicht bearbeitbar ist
echo "$id[1]-Kann nicht bearbeitet werden <br>";
}
}
}
?>
</body>
</html>

Hoffi
08.08.2004, 15:50
Es wäre interessant zu sehen in welcher Zeile der Fehler kommt.

Alternativ geh mal zu pIMG von powie (http://www.powie.de).

AlphaWolf
09.08.2004, 17:27
Der Fehler ist Zeile 45 also hier:


$altesBild = ImageCreateFromJPEG($quelle.$bild);

Also genau dann, wann der sich das nächste Bild in den Speicher zieht. Hier mal die Anzeige:

http://home.tiscali.de/alexspace/imagesize.gif