<?php 

error_reporting
(E_ALL);

/*
 * Hilfsfunktion zur Umwandlung des dritten Parameters von getimagesize
 */ 
function imgType($i) {
    switch(
$i) {
       case 
1: return "gif";
       case 
2: return "jpeg";
       case 
3: return "png";
       default: return 
NULL;
    }
}

/*
 * Komprimiert das angegebene Bild unter Angabe einer maximalen Größe
 * @param fileSrc : string : Pfad zum Bild
 * @param fileDst : string : Pfad des Ausgabebilds
 * @param w : int : Bildbreite (0 = keine Veränderung)
 * @param h : int : Bildhöhe (0 = keine Veränderung)
 * @param q : int : Qualität in Prozent, default 75
 * @param fit : bool : Soll das Bild GENAU die angegebene Größe haben?
 */
function imgResize($fileSrc$fileDst$w=0$h=0$q=100$fit=false) {

    
// Vorbereitung
    
if (!file_exists($fileSrc)) return NULL;
    
$srcDim getimagesize($fileSrc);  // Dimension des Quellbilds
    
$dstDim $srcDim;                 // Dimension des Zielbilds
    
$f $srcDim[0] / $srcDim[1];      // Verhältnis Breite/Höhe des Quellbilds
    
$dx $dy 0;                     // Pixel, die in x- bzw. y-Richtung abgeschnitten werden
    
if ($w == 0$w $srcDim[0];      // Breite beibehalten, wenn nichts angegeben
    
if ($h == 0$h $srcDim[1];      // Höhe beibehalten, wenn nichts angegeben


    // Neue Größe des Bildes berechnen
    
if ($fit) { // Wenn das Bild eine genaue Größe haben soll
        
$dstDim[0] = $w;
        
$dstDim[1] = $h;
        
$dstF $dstDim[0] / $dstDim[1]; // Verhältnis des Zielbilds
        
if ($f $dstF) { // Wenn das Quellbild höher ist als das Zielbild
            
$dy 0.5 * ($srcDim[1] - ($srcDim[0] / $dstF)); // oben und unten was abschneiden
        
}
        if (
$f $dstF) { // Wenn das Quellbild breiter ist als das Zielbild
            
$dx 0.5 * ($srcDim[0] - ($dstF $srcDim[1])); // rechts und links was abschneiden
        
}
    }
    if (
$w $dstDim[0] && !$fit) { // Wenn das Quellbild zu breit ist
        
$dstDim[0] = $w// Breite beschränken
        
$dstDim[1] = $dstDim[0] / $f// und Höhe proportional anpassen
    
}
    if (
$h $dstDim[1] && !$fit) { // Wenn das Zielbild zu hoch ist
        
$dstDim[1] = $h// Höhe beschränken
        
$dstDim[0] = $dstDim[1] * $f// und Breite proportional verkleinern
    
}


    
// Neues Bild erzeugen und speichern
    
$type imgType($srcDim[2]);
    
$loadFunc "imagecreatefrom".$type;
    
$saveFunc "image".$type;
    if (
function_exists($loadFunc) && function_exists($saveFunc)) {
       
$imgSrc $loadFunc($fileSrc); // Quellgrafik öffnen
       
$imgDst imagecreatetruecolor($dstDim[0], $dstDim[1]); // Neue Grafik erzeugen
       
imageantialias($imgDsttrue); // Anti-Aliasing einschalten
       
imagecopyresampled($imgDst$imgSrc00$dx$dy$dstDim[0], $dstDim[1], $srcDim[0]-2*$dx$srcDim[1]-2*$dy); // Grafik kopieren
       
$saveFunc($imgDst$fileDst$q); // Bild speichern
       
imagedestroy($imgSrc); // Bilder aus dem Speicher löschen
       
imagedestroy($imgDst);
    } else {
        
// Wenn keine Unterstützung für das Format vorliegt...
        
echo("<p>Keine Unterst&uuml;tzung f&uuml;r ".$type." Bilder!</p>");
    }
}


// Testaufrufe     
//imgResize("Penguins.jpg", "w200.jpg", 200);
//imgResize("Penguins.jpg", "w200h100.jpg", 200, 100);
//imgResize("Penguins.jpg", "w100h100q75.jpg", 100, 100, 75);
//imgResize("Penguins.jpg", "w0h0q10.jpg", 0, 0, 10);
//imgResize("Penguins.jpg", "w500h300fit.jpg", 500, 300, 100, true);
//imgResize("Penguins.jpg", "w300h500fit.jpg", 300, 500, 100, true);

?>