[ Miroslav Ćurčić @ 19.12.2007. 17:46 ] @
Dali je neko radio resize-ovanje transparentnog PNG-a ?

Imam problem s očuvanjem transparencije tokom poziva funkcije imagecopyresampled.
Naime rezultat vrlo liči na ono što treba dobiti ali kad ga prelepim preko neke druge slike pojave se šrafure na transparentnom delu originala.
Pregledom rezultata u fotošopu ti pixeli se ne vide (visoka transparentost) ali kad pređete pipetom preko slike videće se u onom "Info" prozoru.

Znači kao smetnje (šum) u slici. Iako su vidljivo zanemarljive ipak se pri kasnijem "lepljenju" jasno prikažu.
Izgubih ceo dan na ovo, vidi li neko gde grešim?

Code:

error_reporting(E_ALL);
$width= 126;
$height= 110;

$wm_src = imagecreatefrompng("wm.png");
if(!$wm_src) die('Invalid image!');
$s1= imagesx($wm_src);
$s2= imagesy($wm_src);
   
$wm_small= imagecreatetruecolor($width, $height);

$trans = imagecolorallocate($wm_small,0,0,0);
ImageColorTransparent($wm_small, $trans);
imagefilledrectangle($wm_small, 0, 0, $width, $height, $trans);
imagealphablending($wm_small, false);
imagesavealpha($wm_small, true);

imagecopyresampled($wm_small,$wm_src,0,0,0,0,$width,$height,$s1,$s2);

//snimi skaliran wm i prikaži ga 
header("Content-type: image/png");
imagepng($wm_small, 't.png'); 
imagepng($wm_small);

ImageDestroy($wm_src);
ImageDestroy($wm_small);

Prikačio sam primer png8 sličice.
[ agvozden @ 20.12.2007. 11:11 ] @
Pokusaj ovako:

Code:

$source = imagecreatefrompng($image);
$colorTransparent = imagecolortransparent($source);
$dest = imagecreate($new_width, $new_height);
imagepalettecopy($dest, $source);
imagefill($dest, 0, 0, $colorTransparent);
imagecolortransparent($dest, $colorTransparent);


i na kraju

Code:
imagecopyresized($dest, $source, 0, 0, 0, 0, $new_width, $new_height, $img_width, $img_height);


eventualno mozes i ovako da je eksportujes

Code:
imagejpeg($dest, $image, 100);
[ Miroslav Ćurčić @ 21.12.2007. 07:15 ] @
Sa imagecopyresized bi verovatno radilo kako treba, pitao sam za imagecopyresampled.