PHP: gri tonlama jpgs, gif, PNG ...

2 Cevap php
$im = ImageCreateFromString(file_get_contents($source_file));
ImageFilter($im, IMG_FILTER_GRAYSCALE);

ben ne yapabilirim bir fikrin, saydamlık düzgün gri tonlu GIF ve PNG için? Bu pasajı aslında iyi çalışır, gri tonlama jpgs ve pngs dönüştürür. Gif biraz "buggy" vardır - ancak onlar her zaman işe yaramaz, bu görüntü bağlıdır. Bazen onlara kalan birkaç soluk renkler de vardır. Üstelik bu pasajı alfa kanalları ile çalışmaz. I transparan bir gif veya png dönüştürmek eğer şeffaf parçaları her zaman kararmış olsun.

Tabii görüntü türünü ve "grayscaling" sonra sorgulama im, ben yine doğru türünü belirleriz.

Eğer herhangi bir fikir var mı?

2 Cevap

Bu kod alfa korumak gerekir, ancak imagefilter daha yavaş:

$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']));
 }

Hala sorunlar ($ width = .. önce) görüntü oluşturma sonra yazıyorum denerseniz:

imagesavealpha($im,true);

PNG için imagesavealpha için basit bir çağrı () alfa kanalı, tam kod siyah piksel sorunu çözer:

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