Thumbnails

snoopy1972fc

Grünschnabel
Hallo,

habe hier ein kleines Script geladen:
Den FS- Thumbnailer v. 1.1
Das was ich vor hatte funktioniert damit bestens.
Leider habe ich das Problem, das das Script kleinere Originalbilder als die eingestellten Werte der Thumbs vergrössern. Habe schon ein paar Dinge versucht und den Support angeschrieben. Leider ohne Erfolg.

Kann mir jemand helfen?

Hier der Scriptausschnitt:
PHP:
<?php

class Thumbnailer {
    ######### Eigenschaften der Klasse/des Objekts
    var $autocreate = true; // soll das verkleinern der Bilder direkt beginnen? wenn ja, müssen die Eigenschaften korrekte Werte erhalten!!
    var $single_mode = false; // sollen nur einige Bilder oder alle Bilder im Ordner verkleinert werden?
    var $image_list = array(); // falls $single_mode = true, dann müssen hier die Bilder reingeschrieben werden, die verkleinert werden sollen
    var $ersetzen = false; // soll, wenn ein Bild bereits vorhanden ist, dieses ersetzt werden?
    var $image_ext = array("gif","jpg","jpeg","png","wbmp"); // unterstütze Bildformate. nicht erweitern!
    var $image_dir = "./original/"; // die Original Bilder
    var $thumb_dir = "./thumb/"; // Ordner in dem die modifizierten Bilder gespeichert werden
    var $thumb_w = 300;//110; // Breite (width) der modifizierten Bilder
    var $thumb_h = 350;//110; // Höhe (height) der modifizierten Bilder
    
    ######### Methoden der Klasse/des Objekts
    ##### gibt alle Bilder mit den korrekten Endungen in einem Array zurück
    function list_all_images() {
        $files = array();
        $dir_handle = opendir($this->image_dir);
        while ($file = readdir($dir_handle)) {
            if ($file != "." && $file != ".." && !is_dir($this->image_dir.$file)) {
                $tmp_file = explode(".",$file);
                $i = 0;
                while ($i < count($this->image_ext)) {
                    if ($this->image_ext[$i] == strtolower($tmp_file[count($tmp_file)-1])) {
                        $files[] = $file;
                    }
                $i++;
                }
            }
        }
        closedir($dir_handle);
        return $files;
    }
    
    ##### Erstellt ein Thumbnail
    function create_thumb($filename) {
        $file = $this->image_dir.$filename;
        if ($this->ersetzen || !file_exists($this->thumb_dir.$filename)) {
            #### Bild- Datei und -Endung
            $tmp_file = explode(".",$file);
            $ext = strtolower($tmp_file[count($tmp_file)-1]);
            #### Bild aus Datei erstellen; Bildtypen müssen unterschieden werden
            if ($ext == "jpg" || $ext == "jpeg") {
                $img = imagecreatefromjpeg($file);
            } elseif ($ext == "gif") {
                $img = imagecreatefromgif($file);
            } elseif ($ext == "png") {
                $img = imagecreatefrompng($file);
            } elseif ($ext == "wbmp") {
                $img = imagecreatefromwbmp($file);
            } else {
                return false;
            }
            #### Größen ablesen
            $old_w = imagesx($img);
            $old_h = imagesy($img);
            #### neue Größen bestimmen
            if ($old_w > $old_h) {
                $thumb_w = $this->thumb_w;
                $thumb_h = $old_h*($this->thumb_w/$old_w);
            }
            if ($old_w < $old_h) {
                $thumb_w = $old_w*($this->thumb_h/$old_h);
                $thumb_h = $this->thumb_h;
            }
            if ($old_w == $old_h) {
                $thumb_w = $this->thumb_w;
                $thumb_h = $this->thumb_h;
            }
            #### Bild erzeugen in korrekter Größe
            $new_img = @imagecreatetruecolor($thumb_w,$thumb_h);
            if (!$new_img) {
                $new_img = imagecreate($thumb_w,$thumb_h);
                imagecopyresized($new_img,$img,0,0,0,0,$thumb_w,$thumb_h,$old_w,$old_h);
            } else {
                imagecopyresampled($new_img,$img,0,0,0,0,$thumb_w,$thumb_h,$old_w,$old_h);
            }
            #### Bild speichern; Bildtypen müssen unterschieden werden
            if ($ext == "jpg" || $ext == "jpeg") {
                imagejpeg($new_img,$this->thumb_dir.$filename);
            } elseif ($ext == "gif") {
                imagegif($new_img,$this->thumb_dir.$filename);
            } elseif ($ext == "png") {
                imagepng($new_img,$this->thumb_dir.$filename);
            } elseif ($ext == "wbmp") {
                imagewbmp($new_img,$this->thumb_dir.$filename);
            } else {
                return false;
            }
            #### Cache leeren
            imagedestroy($new_img);
            imagedestroy($img);
            return true;
        } else {
            return false;
        }
    }
    
    ##### Lässt Thumbnails anhand der Bilder im Ordner erzeugen
    function create_thumbs() {
    	if ($this->single_mode) {
    		$files = $this->image_list;
    	} else {
        	$files = $this->list_all_images();
        }
        $i = 0;
        while ($i < count($files)) {
            $this->create_thumb($files[$i]);
            $i++;
        }
        return true;
    }

    ##### Konstruktor für die Klasse (wird nur ausgeführt, wenn die Klasse sofort starten soll)
    function Thumbnailer() {
        if ($this->autocreate) {
            $this->create_thumbs();
        }
    }
    ######### Ende der Klasse/des Objekts
}

#########
## EOF ##
#########

?>
 
Hallo!

So müsste es eigentlich funktionieren (den gesamten Abschnitt für "neue Größen bestimmen" austauschen):
PHP:
            #### neue Größen bestimmen 
            if ($old_w <= $this->thumb_w && $old_h <= $this->thumb_h) {
                $thumb_w = $old_w;
                $thumb_h = $old_h;
            } else {
                if ($old_w > $old_h) { 
                    $thumb_w = $this->thumb_w; 
                    $thumb_h = $old_h*($this->thumb_w/$old_w); 
                } 
                if ($old_w < $old_h) { 
                    $thumb_w = $old_w*($this->thumb_h/$old_h); 
                    $thumb_h = $this->thumb_h; 
                } 
                if ($old_w == $old_h) { 
                    $thumb_w = $this->thumb_w; 
                    $thumb_h = $this->thumb_h; 
                }
            }
Ist die Höhe und die Breite des Originals kleiner oder gleich gross als wie oben unter $thumb_h und $thumb_w angegeben, wird die Original Grösse genommen.
Andernfalls wird das Bild wie gehabt verkleinert.

Gruss Dr Dau
 
Zurück