2010-01-29 9 views
1

$ im = ImageCreateFromString (file_get_contents ($ source_file)); ImageFilter ($ im, IMG_FILTER_GRAYSCALE);PHP: jpgs, gifs, pngs en niveaux de gris ... aussi avec des canaux alpha?

une idée de ce que je pouvais faire pour graffer correctement les gifs et png avec transperancy? Cet extrait fonctionne bien, il transforme les jpgs et les png en niveaux de gris. Cependant, les gifs sont un peu "buggés" - ils ne fonctionnent pas toujours, cela dépend de l'image. Parfois, il reste quelques couleurs pâles. De plus, cet extrait ne fonctionne pas avec les canaux alpha. Si je convertis un gif ou un png avec transparence, les parties transparentes sont toujours noircies.

Bien sûr que je demande le type d'image et après "grayscaling" il, je vais redéfinir le type approprié.

Avez-vous des idées?

Répondre

3

Ce code doit préserver l'alpha, mais il est plus lent que imagefilter:

$im = ImageCreateFromString(file_get_contents($source_file)); 

$width=imagesx(); 
$height=imagesy(); 
for($x=0;$x<$width;$x++) 
for($y=0;$y<$height;$y++) 
{ 
    $rgb=imagecolorsforindex($im,imagecolorat($im,$x,$y)); 
    $average=ceil(($rgb["red"]+$rgb["green"]+$rgb["blue"])/3); 
    imagesetpixel($im,$x,$y,imagecolorallocatealpha($im,$average,$average,$average,$rgb['alpha'])); 
} 

Si vous avez encore des problèmes essayer d'écrire ceci après la création d'image (avant la largeur de $ = ..):

imagesavealpha($im,true); 
+0

merci! sans imagesavealpha rien ne change du tout. Si je le mets, seul alphachannel de png fonctionne. La transparence Gif est encore noircie. De plus, certains gifs et png ne sont pas correctement grayscalés. D'autres idées – matt

2

pour pngs un simple appel à imagesavealpha() résout le problème de pixels noirs sur le canal alpha, le code complet:

$im = ImageCreateFromString(file_get_contents($source))  
imagefilter($im, IMG_FILTER_GRAYSCALE); 
imagesavealpha($im,true); 
imagepng($im, $output); 
+0

Cela fonctionne pour moi! Ce n'était pas avant en raison du bug dans mon code. Je vous remercie! –

Questions connexes