2010-08-16 4 views
2

J'essaie de créer la silhouette de l'image PNG avec des transparents. Voici mon codePHP GD: Flou pour l'image transparente


//file that i am working with 
$file='http://www.google.com/mapfiles/turkey.png'; 
$im =imagecreatefrompng($file); 
imagealphablending($im, false); 
imagesavealpha($im, true); 
$imw  =imagesx($im); 
$imh  =imagesy($im); 
//turkey body color 
$bodycolor=imagecolorallocatealpha($im, 144, 144, 144, 50); 
//imageholder 
$imnew =imagecreatetruecolor($imh, $imh); 
imagealphablending($imnew, false); 
imagesavealpha($imnew, true); 
$transparent_color=imagecolorallocatealpha($imnew, 0, 0, 0, 127); 
imagecolortransparent($imnew, $transparent_color); 
imagefilledrectangle($imnew, 0, 0, $imh, $imh, $transparent_color); 
for ($i=0; $i > 24; 
     //all not transparent pixels are copied to imageholder 
     if ($alpha != 127) 
      { 
      imagesetpixel($imnew, $i, $j, $bodycolor); 
      } 
     } 
    } 
//blur filter 
imagefilter($imnew, IMG_FILTER_GAUSSIAN_BLUR); 
imagefilter($imnew, IMG_FILTER_GAUSSIAN_BLUR); 
imagefilter($imnew, IMG_FILTER_GAUSSIAN_BLUR); 
header ("Content-type: image/png"); 
imagepng ($imnew); 
imagedestroy ($imnew); 
?> 

, je dois donc obtenir la silhouette de The dinde avec des bords flous. Ce que je reçois maintenant ressemble à link text. J'ai besoin que les bords soient flous "dehors", donc plus le pixel était éloigné du bord, plus il était transparent avec le même rbg. Et imagefilter soulève également la dinde un peu :) S'il vous plaît aider, j'essaie de résoudre ce problème pendant des jours.

Répondre

0

Pour images plus complexes manipulations comme celles-ci, je recommande vivement d'utiliser ImageMagick: http://www.imagemagick.org

Il est assez facile à installer vers votre serveur, très rapide et a une grande documentation. Ils ont une section entière pour ce dont vous parlez: http://www.imagemagick.org/Usage/channels/

+0

Malheureusement, je ne peux pas utiliser Imagick sur mon serveur. Mais merci pour la réponse :) – Tim