2010-01-29 74 views
1

$ im = ImageCreateFromString(file_get_contents($ source_file)); ImageFilter($ im,IMG_FILTER_GRAYSCALE);PHP:灰度jpgs,gifs,pngs ...還有alpha通道?

任何想法我能做些什麼,以正確的灰度GIF和PNG與transperancy?這段代碼實際上效果不錯,它將jpgs和png轉換爲灰度。然而GIF有點「越野車」 - 它們並不總是有效,它取決於圖像。有時還會留下一些蒼白的顏色。此外,這段代碼不適用於alpha通道。如果我將透明度轉換成gif或png,透明部分總是會變黑。

當然,即時查詢圖像類型和「灰度」後,我會再次設置適當的類型。

你有什麼想法嗎?

回答

3

此代碼應保留阿爾法,但它比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'])); 
} 

如果仍有問題,請嘗試將圖像生成後寫這個(在$寬度= ..前):

imagesavealpha($im,true); 
+0

謝謝!沒有imagesavealpha什麼都沒有改變。如果我設置它,只有png的alpha通道起作用。 Gif透明度仍然變黑。此外,一些GIF和PNG不會得到適當的灰度。任何更多的想法。 – matt 2010-01-29 17:30:19

2

對於PNG圖像簡單地調用imagesavealpha()解決了上α通道的黑色像素的問題,完整的代碼:

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

這適合我!由於我的代碼中存在錯誤,它之前沒有。謝謝! – 2016-05-22 15:20:52

相關問題