Bilder mit PHP unter Linux verkleinern

Hier im Blog poste ich ja sehr oft Bilder. Meistens sind es selbst gemacht. Nur kann ich diese Bilder nicht einfach von der Kamera herunterkopieren und dann auf den Server laden, nein, ich muss sie auch noch etwas bearbeiten. Meistens beschränkt sich dieses Bearbeiten nur auf das verkleinern. Normalerweise gibt es für jedes Bild zwei Bilder. Ein grösseres mit einer Höhe von 600 Pixel und ein Thumbnail mit einer Höhe von 150 Pixel. Nun habe ich diese Bilder immer im Gimp verkleinert, aber das ist mir jetzt zu dumm geworden. Jedes Bild öffnen, verkleinern, speichern, für das Thumbnail nochmals verkleinern und wieder speichern. sehr aufwändig.
Um das ganze nun etwas zu vereinfachen, habe ich mir ein Script geschreiben, welches alle Bilder in einem Ordner verkleinert. Es gibt wieder zwei Bilder mit den schon genannten Grössen. Da ich nur in PHP weiss wie man so etwas macht, hab ich ein kleines PHP Script geschrieben. Der Quelltext ist weiter unten zu finden. Für das Script wird die GD Library benötigt, welche aber standardmässig schon installiert ist. Zudem habe ich noch die CLI (Command Line Interpreter) Version von PHP installiert, so kann ich das Script wie ein normales Shellscript starten. Bei fertigen Script musste ich nur noch die Dateiendung entfernen und die Datei ausführbar machen (chmod 755). Jetzt kann ich die Datei mit einem Doppelklick ausführen und so werden meine Bilder ohne grossen Aufwand verkleinert. Ein hoch auf die Technik ;)

Nun aber noch der PHP-Code:
#!/usr/bin/php -q
<?
// Ordner
define("FOLDER","./");

// Funktion zum verkleinern der Bilder
function thumb($orig,$thumb,$height)
{
    
// Vorherige Groesse
    
$size=getImageSize(FOLDER.$orig);
    
$orig_width=$size[0];
    
$orig_height=$size[1];

    
// Bild laden
    
$src=imageCreateFromJpeg(FOLDER.$orig);

    
// Neue Groesse bestimmen
    
if($orig_height>$height)
    {
        
$factor=$orig_height/$height;

        
$new_height=round($orig_height/$factor,2);
        
$new_width=round($orig_width/$factor,2);
    }

    
// Zielbild erstellen
    
$dst=imageCreateTrueColor($new_width,$new_height);

    
// Bild kopieren
    
$buffer=imageCopyResized($dst,$src,0,0,0,0,$new_width,$new_height,$orig_width,$orig_height);

    
// Bild speichern
    // Qualitaet ist 85%
    
imageJpeg($dst,FOLDER.$thumb,85);
}

// Order oeffnen
$dir=openDir(FOLDER);

// Ordner durchgehen
while($object=readDir($dir))
{
    
// Wenn Datei im jpg endet
    
if(subStr($object,-3,3)=="jpg")
    {
        
$orig=$object;

        
// Name fuer Thumb bestimmen
        // Aus test.jpg wird test_thumb.jpg
        
$split=explode(".",$object);
        unSet(
$split[count($split)-1]);
        
$thumb=implode(".",$split)."_thumb.jpg";

        
// Bilder verkleinern
        
thumb($orig,$thumb,150);
        
thumb($orig,$orig,600);
    }
}
?>