Generováni náhledů pomocí php

DD, chtěl bych se zeptat jestli by mi mohl pomoct "zkušenější či profesionálnější" začátečník než sem já.

Můj problém je v generováni obrázku do galerie pomocí PHP ( po vygenerováni jsou rozměry v pořádku ale barvy na obrázku divné) koukněte zde http://sdhstity.wz.cz/test/
, skript si můžete stáhnout zde http://sdhstity.wz.cz/generovani_nahledu_php.zip po více jak dvou dnech si vážně už nevím rady. Tento skript sem převzal z http://www.webguru.cz/clanky/view.php?id=87
Zdravim..

nevim ktere hovado psalo ty funkce na webguru, ale i kdybych to videl jako zacatecnik tak to neokopiruju ale hledam jinde ...

imho je problem v pouziti funkce imagecreate() ktera je zastarala a doporucuje se pouzivat funkce imagecreatetruecolor() ....

http://cz.php.net/imagecreate
http://cz.php.net/imagecreatetruecolor
Aha tak to mu ja az tak moc nerozumim.
Takže jak bude vypadat script pro image_thumb.php

tohle je original:
<?
include "./func.php";
Header("Content-type: image/jpeg");
$exp=GMDate("D, d M Y H:i:s",time()+999);
Header("Expires: $exp GMT");
$img=ImageCreate(100,100);
$info=getimagesize($path);
$size=filesize($path);
$size=Round($size/1024,2);
$text="$info[0]x$info[1], $size kB";
$name=Explode("/",$path);
$max=(SizeOf($name)-1);
$dir="";
for ($i=0;$i<$max;$i++){
$dir.="$name[$i]/";
}
$name=$name[$max];
//int imagecopyresized(resource dst_im, resource src_im, int dstX, int dstY, int srcX, int srcY, int dstW, int dstH, int srcW, int srcH)
if ($info[2]==2){ //JPEG
$img_in=@imagecreatefromjpeg($path);
$new_width = floor($info[0]/($info[1]/100)); // kvuli zarovnani velikostnich pomeru
$new_pozice = (100-$new_width)/2;// kvuli vycentrovani
imagecopyresized($img,$img_in,$new_pozice,0,0,00,$new_width,100,$info[0],$info[1]);
} elseif ($info[2]==3){ //PNG
$img_in=@imagecreatefrompng($path);
$new_width = floor($info[0]/($info[1]/100)); // kvuli zarovnani velikostnich pomeru
$new_pozice = (100-$new_width)/2;// kvuli vycentrovani
imagecopyresized($img,$img_in, 0, 0, 0,$new_width,100,$info[0],$info[1]);
} else {
$img=@imagecreatefrompng("./file.png");
$tmp=Explode(".",$name);
$max=SizeOf($tmp)-1;
$tmp="- $tmp[$max] -";
$tmp=txt2UTF("$tmp");


}

$thumb_file=$dir . $name . "_thumb.jpg";
ImageJpeg($img,$thumb_file);
ImageJpeg($img);
?>
<HTML>Škoda, že tohle fórum nemá [code] pseudotagy, tohle se špatně luští. Podle Freezovy rady však máte zaměnit funkci <code>imagecreate</code> za <code>imagecreatetruecolor</code>.</HTML>
A jo už vím :) stejně to ale negeneruje obrázky v kvalitě
Pro změnu velikosti obrázku můžeš použít místo funkce imagecopyresized() funkci imagecopyresampled(). Je to vylepšená metoda zvětšování/zmenšování obrázku.

Jinak je mít na paměti, že ke změně velikosti dochází k degeneraci obrázku. Takže se musí očekávat horší kvalita oproti originálu.
Tak bude problem v kopirovani obrazku - zkus pouzit i resample -> misto funkce imagecopyresized() pouzij imagecopyresampled()...


______
Osobne mi pro JPG funguje toto uplne bez problemů ..

$image_p = imagecreatetruecolor($NewWidth, $NewHeight);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $NewWidth, $NewHeight, $OrigWidth, $OrigHeight);
imagejpeg($image_p, $copypath, 100);

Proto jsem videl problem v pouziti funkce imagecreate() ...

nahled: http://fotky.icebolt.info/Cyklistak/B1025.jpg
puvodni: http://fotky.icebolt.info/Cyklistak/1025.jpg
nahled: http://fotky.icebolt.info/Cyklistak/B1030.jpg
puvodni: http://fotky.icebolt.info/Cyklistak/1030.jpg

Problem jsem nemel ani s PNG (kdyz se zmenila funkce:) ..
RE: (Tomík, Freeze)
Díky, vaše vzkazy jsou od sebe jen pár minut, takže je vidět že víte o co tu běží.

Vaše rady byly správné a dopadly takto:

základní verze: http://www.sdhstity.wz.cz/puvod/images/DSC01628.JPG_thumb.jpg

po úpravě skriptu:
http://sdhstity.wz.cz/supper/galerie/galerie/DSC01628.JPG_thumb.jpg

Změna je sice (skoro) nepatrná ale vypadá to mnohem lip :) dííky ještě jednou…