imagecreatetruecolor hiba?

Sziasztok!

Van egy képátméretezési függvényem ami három féle képet csinál az eredetiből. Egy normal (ez az eredeti méret marad), egy thumbnail és egy mini méretet. Most vettem észre a normal méretnél, hogy amikor átméretezi a képet akkor összehasonlítva az eredeti képpel minőségromlást lehet felfedezni. Mintha egy picit szellemképes lenne az átméretezett kép.
Találkozott már valaki ezzel a hibával? Lehet, hogy ez bug?
Előre is köszönöm a válaszokat.

Hozzászólások

Lehet, hogy monitorhiba. :)
Kodot ide.

Íme a kód:

function SaveImage($img, $file, $ext, $size) {
global $img_types;

if (!isset($img_types[$ext])) return false;
$w = imagesx($img);
$h = imagesy($img);
$nw = 365;
$nh = ($h/$w)*$nw;
$resized = imagecreatetruecolor($nw,$nh);
imagecopyresampled($resized, $img, 0, 0, 0, 0, $nw, $nh, $w, $h);
$img_types[$ext][1]($resized, "$file.$ext");
imagedestroy($img);
}
$img_types = array(
'JPG' => array('imagecreatefromjpeg', 'imagejpeg'),
'jpg' => array('imagecreatefromjpeg', 'imagejpeg'),
'jpeg' => array('imagecreatefromjpeg', 'imagejpeg'),
'png' => array('imagecreatefrompng', 'imagepng'),
'gif' => array('imagecreatefromgif', 'imagegif')
);

Ez csinálja a normál képet az eredetiből.

Így módosítottam a függvényt, de ugyanaz a probléma.

function SaveImage($img, $file, $ext, $size) {
global $img_types;

if (!isset($img_types[$ext])) return false;
$w = imagesx($img);
$h = imagesy($img);
$nw = 365;
$nh = ($h/$w)*$nw;
$resized = imagecreatetruecolor($nw,$nh);
imagecopyresampled($resized, $img, 0, 0, 0, 0, $nw, $nh, $w, $h);
imagejpeg($resized, NULL, 100);
$img_types[$ext][1]($resized, "$file.$ext");

}

a kov. kodreszlet egyik scriptembol van - egy nagy csomo keoet dolgoz at es letrehozza a thumbnails -eket. Minoseg megmarad...

for($i=0;$i < sizeof($content);$i++) {
print("Processing ".($i+1)." of ".sizeof($content)." ...");
$img = imagecreatefromjpeg($img_dir . "/" . $content[$i]);
if (!$img) {
print("FAILED\n");
break;
}
$width = imagesx($img);
$height = imagesy($img);
$percent = (150*100)/$width;
$new_width = ceil(($width*$percent)/100);
$new_height = ceil(($height*$percent)/100);
print("original size = (".$width.",".$height."); re-size by ".$percent."%; new size = (".$new_width.",".$new_height.")");
$thumb = imagecreatetruecolor($new_width,$new_height);
imagecopyresized($thumb,$img,0,0,0,0,$new_width,$new_height,$width,$height);
$new_name = str_replace(".jpg","_thumb.jpg",$content[$i]);
if (!imagejpeg($thumb,$img_dir . "/" . $new_name,95)) {
print("FAILED\n");
break;
}
imagedestroy($img); imagedestroy($thumb);
$sql = "insert into pictures values (".$start_id.", ".$albumID.", '".$content[$i]."', '-', 0, '".$new_name."')";
mysql_query($sql);
$start_id++;
print("DONE\n");
}

A gd1 állított elő nagyon csúnya képeket. Neked milyen változat van fenn?
Imagemagick-ot is érdemes lenne használni.

Megtaláltam a hibát. Valóban nem volt beállítva a 100-as képminőség. Ugyebár tömbből vettel a a kép típusát és az alapján a függvényeket.
$img_types = array(
'JPG' => array('imagecreatefromjpeg', 'imagejpeg'),
'jpg' => array('imagecreatefromjpeg', 'imagejpeg'),
'jpeg' => array('imagecreatefromjpeg', 'imagejpeg'),
'png' => array('imagecreatefrompng', 'imagepng'),
'gif' => array('imagecreatefromgif', 'imagegif')
);
A képet pedig így hoztam létre:
$img_types[$ext][1]($resized, "$file.$ext");

És így kell helyesen:
$img_types[$ext][1]($resized, "$file.$ext",100);

Köszönöm mindenkienk a segítő szándékot. További szép estét.