Thumbnail erstellen - Qualität

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Thumbnail erstellen - Qualität

    Hallo,

    ich habe ein Problem beim erstellen von Thumbnails.
    Aus irgendeinem Grund erhalte ich wahnsinnig schlechte Thumbs!

    Die maximale Höhe und Breite ist auf 300px beschränkt.
    Kompression ist 100

    Die Vorlage ist ein JPG.
    Ausmaße:
    Höhe: 1600px
    Breite: 1200px


    Das Bild:
    http://img242.imageshack.us/img242/2320/thumbby5.jpg


    Der Code:
    PHP-Code:
    <?php
    //Bildausmaße ermitteln
    $picsize getimagesize($sourcefile);

    //original Bildhöhe und Bildbreite speichern
    $source_x $picsize[0];
    $source_y $picsize[1];

    //Breite überprüfen und evtl. anpassen
    if($source_x == $this->breite || $this->breite == 0){
      
    $dest_x $source_x;
    }
    elseif(
    $source_x $this->breite) {
      
    $dest_x $this->breite;
      
    $dest_y ceil($source_y $dest_x $source_x);
    }

    //Höhe überprüfen und evtl. anpassen
    if($dest_y $this->hoehe){
      
    $old_y $dest_y;
      
    $dest_y $this->hoehe;
      
    //Breite an die neue Höhe anpassen
      
    $dest_x ceil($dest_x $dest_y $old_y);
    }


    //Dateiendung ermitteln
    $fileext strtolower(end(explode('.'$destfile)));

    //Über Dateiendung Bildformat ermitteln und Bild laden
    SWITCH ($fileext) {
      CASE 
    'jpg':  $img_source imageCreateFromJPEG($sourcefile); break;
      CASE 
    'gif':  $img_source imageCreateFromGIF($sourcefile); break;
      CASE 
    'bmp':  $img_source imageCreateFromWBMP($sourcefile); break;
      CASE 
    'png':  $img_source imageCreateFromPNG($sourcefile); break;
    }

    //Neues leeres Bild mit neuen Größen erstellen
    $img_dest imagecreatetruecolor($dest_x$dest_y);

    //Altes Bild in neues Bild einfügen (Größe wird geändert)
    imagecopyresampled($img_dest,$img_source,0,0,0,0,$dest_x,$dest_y,$source_x,$source_y);

    //Thumbnail speichern
    imagejpeg($img_dest,$destfile,100);

    //Speicher wieder freigeben
    @imagedestroy($img_source);
    @
    imagedestroy($img_dest);
    ?>

    Vielleicht weiß ja jemand weiter, ich bin ratlos

    Danke

    Piremilok
    Zuletzt geändert von wahsaga; 13.11.2006, 09:34.

  • #2
    Ist doch (eigentlich) logisch oder nicht? Wenn du die Kompression auf 100 stellst, leidet die Qualität auch 100%... Was passiert denn wenn du den Wert weiter runter drehst? (z.b. 20%)
    "I am what I am and I do what I can..."
    Meine HP -- Mein GPG-Key
    Meine Projekte: WebStorage 2.0 -- easyAJAX-Chat 2.2.0 (beta)

    Kommentar


    • #3
      hast du dir mal alle werte, die errechnet werden per echo ausgeben lassen? das bild sieht irgendwie aus, als hätte eine ausschnittvergrösserung anstelle einer verkleinerung stattgefunden.

      btw:
      - warum gehst du auf die file-extension, wenn dir getimagesize() doch den image-typ liefert?
      - für welche bilder imageCreateFromWBMP() gemacht ist, liest du besser bei google nochmal nach, für windows-bmp jedenfalls nicht
      Kissolino.com

      Kommentar


      • #4
        Hi,

        @nOe: Die Variablenbenennung ist falsch. Es müsste Quality heißen, nicht Kompress.
        Daher passt die 100.


        @wurzel: Vielen Dank! hab die Dateiendung nun aus getimagesize() genommen. Hab das gar net gewusst! Wieder was gelernt.
        Auch bezüglich WBMP: Wireless BMP für WAP.

        Beim informieren darüber, hab ich einen Code gefunden und angepasst.
        Hier:

        PHP-Code:
          function saveThumbnail($image$new_image_path$needed_user_factor 0.2) {
            
        //example: neded_user_factor = 0.2
            
            
        $xSize $this->breite_thumb;
            
        $ySize $this->hoehe_thumb;
            
            if(
        $xSize == || $ySize == 0)
              return array(
        "At the leat one pair of size is 0",0,0);
            
            
        $size getImageSize($image);
            
        $width $size[0];
            
        $height $size[1];
            
        $x_ratio $xSize $size[0];
            
        $y_ratio $ySize $size[1];
            
            if(
        $x_ratio $y_ratio)
              
        $res_ratio $y_ratio;
            else
              
        $res_ratio $x_ratio;
            
            if(
        abs($res_ratio 1) > $needed_user_factor) {
              
        $width ceil($width $res_ratio);
              
        $height ceil($height $res_ratio);
            }
            
            
        $fileinfo pathinfo($image);
            
        $file_type strtolower($fileinfo["extension"]);
            
            if(
        $file_type == "jpg" || $file_type == "jpeg")
              
        $src ImageCreateFromJpeg($image);
            elseif(
        $file_type == "gif")
              
        $src ImageCreateFromGif($image);
            elseif(
        $file_type == "png")
              
        $src ImageCreateFromPNG($image);
            else
              return array(
        "Unknown image format: ".$file_type00); 
            
            
        $output_path = ($new_image_path == "")?$image:$new_image_path;
            
            
        $dst ImageCreateTrueColor($width$height);
            
            
        ImageCopyResized($dst$src0,0,0,0,$width$height$size[0], $size[1]);
            
            if(
        $file_type == "jpg" || $file_type == "jpeg")
              
        ImageJpeg($dst$output_path100);
            elseif(
        $file_type == "gif" || $file_type == "bmp")
              
        ImageGif($dst$output_path);
            elseif(
        $file_type == "png")
              
        ImagePNG($dst$output_path);
            
            
        ImageDestroy($src);
            
        ImageDestroy($dst);
            return 
        'noerror';
          } 
        Damit funktioniert es nun einwandfrei

        Kommentar

        Lädt...
        X