Qualität eines erstellten Thumbnails verbessern...

Vaio82

Erfahrenes Mitglied
Problem:

Ein Bild soll vor dem Upload (FTP. keine DB) verkleinert werden... Die Minimierung an sich funktioniert, jedoch leidet die Farbgenauigkeit darunter sehr.

Im folgenden Post werde ich Ein Beispiel und den dazu passenden Code mal veröffentlichen.

Originalbild:

vaio.jpg


Wenn ich jetzt jedoch das Thumbnail erzeuge, bleibt die Bildqualität nicht erhalten, sondern wird verfälscht:

vaio_klein.jpg


Das Bild ist zwar kleiner, die Qualität jedoch nicht akzeptabel!

Folgender Code zeigt die gesamte Datei (ein kopiert- und leicht angepasstes Script aus dem Web). Eine genauere Ansicht der "Problemzone" befindet sich unterhalb dieses Beispiels:

PHP:
<?
### Zielverzeichnisse, ohne abschliessenden Slash                                  #
 $picdir = "pics";             // Originalgrafiken                                 #
 $thumbdir = "thumbs";         // Vorschaugrafiken                                 #
 $height = "100";                                                                  #
 $zusatz = "_klein";                                                               #
 $newext = "jpg";                                                                  #

        $array = explode (".",$file_name);
        $filename = $array[0];
        $extension = strtolower($array[1]);
                                $smallimage = "$thumbdir"."/"."$filename"."$zusatz"."."."$newext";
                                $original = "$picdir"."/"."$filename"."."."$newext";
                        
                                @copy($file, "$picdir/$filename"."."."$newext");
                                echo "<font class='scriptsuccessfont'>&nbsp;Die Datei wurde auf den Server &uuml;bertragen !</font>";
                                if(@copy($file,"$thumbdir/$filename$zusatz"."."."$newext"));
                                        
                                if(file_exists($smallimage))
                                 {
                                        $image = imagecreatefromjpeg("$smallimage");
                                        $ywert=imagesy($image);
                                        $xwert=imagesx($image);

                                        if($xwert > $ywert)
                                         {
                                                $verh = $xwert / $ywert;
                                                $newheight = $height;
                                                $newwidth = $newheight * $verh;
                                         }
                                        else
                                         {
                                                $verh = $ywert / $xwert;
                                                $newheight = $height;
                                                $newwidth = $newheight / $verh;
                                         }

                                        $destimage = imagecreate($newwidth,$newheight);
                                        imagecopyresized($destimage, $image, 0,   0,   0,   0, $newwidth, $newheight,$xwert,$ywert); 
                                        imagejpeg($destimage,$smallimage);
}             
?>

<form method="POST" action="<?php echo $PHP_SELF ?>" enctype="multipart/form-data">
 <input type=file name=file size=25><br>
 <br>        
 <button name="upload" type="submit">Upload</button>
</form><div align="center">
   </div>
<hr class="script">
<br>

<?

        if(isset($original))
         {
                echo "<font class='scriptsuccessfont'>Vorschau</font><br><br>
                <font class='scriptmainfont'>Thumbnail &raquo; <i>"."$smallimage"."</i><br><img src=\""."$smallimage"."\"><br><br>
                Original &raquo; <i>"."$original"."</i></font><br><img src=\"".$original."\">";
         }

        if(!isset($DEFAULTS))
                echo "</body></html>";
?>

Wie gesagt, es handelt sich um ein geklautes Script. Warum auch das Rad neu erfinden? ;-)

Brechen wir es genauer auseinander:

PHP:
destimage = imagecreate($newwidth,$newheight);
                                        imagecopyresized($destimage, $image, 0,   0,   0,   0, $newwidth, $newheight,$xwert,$ywert); 
                                        imagejpeg($destimage,$smallimage);

Hier mus mann meines Erachtens irgendwie mit "imagecreatetruecolor" die Qualität (nicht die createimage(x,x,KOMPREMIEREUNG) ) ändern können.

Genau bin ich da jedoch aus zeitlichen- und wetterbedingten Gründen nicht so genau hintergestiegen.

Ich würde mich sehr über konstruktive Hinweise/Vorschläge/Anregungen/Lösungen freuen und hoffe, dass wir das zusammen hinbekommen :-)

Liebe Grüße aus dem RIGO'nischen Gütersloh ;)
Claus
 
Zuletzt bearbeitet:
Auf jeden Fall musst Du [phpf]imagecreatetruecolor[/phpf] verwenden.
Die Qualität kannst Du dann über den dritten Parameter der Funktion [phpf]
imagejpeg[/phpf] bestimmen.

snuu
 
Das Problem ist nur, dass er das Thumbnail nicht mehr verkleinern, wenn ich ImageCerateTrueColor() verwende....

Habe das alles schon ausprobiert...


PHP:
destimage = imagecreatetruecolor($newwidth,$newheight); 
                                        imagecopyresized($destimage, $image, 0,   0,   0,   0, $newwidth, $newheight,$xwert,$ywert); 
                                        imagejpeg($destimage,$smallimage,30);
 
Zurück