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.
<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.