2010-06-19 12 views
5

robiąc zdjęcia w serwisie WWW i zmieniając obrazy na miniaturki, które pasują do białego kwadratu o wymiarach 100 x 100. Problem polega na tym, że obrazy wyglądają tak, jakby nie były odpowiednio anty-aliasowe. obrazy w Photoshopie wyglądają gładko, ale te wyglądają jak chrupiące, jak super wyostrzone.php imagejpeg jakość śmierdzi: dlaczego?

spójrz na these samples, pokazując pełny rozmiar po lewej i miniaturki po prawej (widok w 100%). zdjęcie wychodzi na jaw z zaostrzoną fryzurą, ale wielu ludzi może nie przejmować się tym. rysunek jest jednak nie do przyjęcia. te zakrzywione linie w ogóle nie powodują anty-aliasu i stają się przerywanymi liniami.

im przy użyciu imagejpg(), a jakość jpg, którą wybiorę, nie ma wpływu na chrupkość. Oto niektóre z kodu otaczającego go:

$tmp_img = imagecreatetruecolor($maxSize, $maxSize); 
$white = ImageColorAllocate ($tmp_img, 255, 255, 255); 
ImageFill($tmp_img, 0, 0, $white); 
imagecopyresized($tmp_img, $img, $offsetx, $offsety, 0, 0, $new_width, $new_height, $width, $height); 
$thumbFullPath = "{$pathToThumbs}/{$filenameNoExtension}.jpg"; 
imagejpeg($tmp_img, $thumbFullPath, 90); 

jakieś pomysły? czy to normalne? dzięki!

Odpowiedz

15

Możesz spróbować imagecopyresampled zamiast imagecopyresized. Jest wolniejszy, ale używa bardziej wyrafinowanego algorytmu do określania koloru każdego piksela na nowym obrazie.

6

zmiana ostatnia linia:

imagejpeg($tmp_img, $thumbFullPath, 100);

patrz: http://us4.php.net/manual/en/function.imagejpeg.php

także spróbować użyć imagecopyresampled() zamiast imagecopyresized()

patrz: http://us4.php.net/manual/en/function.imagecopyresampled.php

+1

Nie będzie dużej różnicy między 90 a 100. Poza tym, myślę, że to bardziej operacja skalowania niż operacja składowania powoduje marnowanie wyniku. Ponadto OP powiedział, że zmiana jakości niczego nie poprawia. – zneak

+0

prawda, ale może pomóc ... 10% ... 'imagecopyresampled()' zdziałało dla mnie cuda w przeszłości. – jordanstephens

+1

Zgadzam się, "spróbuj użyć imagecopyresampled() zamiast imagecopyresized()" –

Powiązane problemy