2013-01-03 133 views
0

可能重複:
Remove white background from an image and make it transparent如何用PHP反鋸齒圖像?

我現在有一個代碼,從圖像中刪除白色背景,它看起來像這樣:

function transparent_background($filename, $color) 
{ 
    $img = imagecreatefrompng($_SERVER['DOCUMENT_ROOT'].'/'.$filename); 
    $colors = explode(',', $color); 
    $remove = imagecolorallocate($img, $colors[0], $colors[1], $colors[2]); 
    imagecolortransparent($img, $remove); 
    imagepng($img, $_SERVER['DOCUMENT_ROOT'].'/'.$filename); 
} 

transparent_background('test.png', '255,255,255'); 

然而,一旦出口,邊緣很粗糙。這是什麼樣子(注意,這只是我的形象的一部分):

http://img211.imageshack.us/img211/97/2125c773e32c432b91e1127.png

我添加了一個黑色的背景圖片的背後,顯示一籌。那麼有沒有一種方法可以在函數中添加一行或編輯函數,以便邊緣更平滑/消除鋸齒?謝謝!

+0

你的代碼中沒有任何東西可以繪製,難道粗糙的邊緣在原始圖片中,只是因爲沒有黑色背景而不可見? – AndreKR

+0

@AndreKR我的代碼從我的服務器上的特定PNG圖像中刪除白色背景,並使白色背景透明。然而,輸出邊緣非常粗糙,我想知道是否有辦法讓它更平滑。 – user1930449

+0

您可能會從我的答案中得到一兩個提示,或者從其他答案中得到相同的問題:http://stackoverflow.com/a/8042272/5987 –

回答

0

輸出的最終結果取決於您要導入的圖像的初始圖像質量。 PHP只能在圖像上繪製抗混疊元素。

一個解決方案,一個總大錘的方法,將重新採樣圖像,然後再下來。你的結果會因有問題的圖像而異,而且幾乎總是不好。

針對您的特定問題的最佳解決方案是首先使用質量更好的導入圖像。

1

有沒有簡單的方法來做到這一點。原始圖像的邊緣在白色背景下反鋸齒。當你移除純白色時,你會在邊緣附近留下很多像素接近白色的。當你看到這些像素對着深色時,它們會突出顯得「粗糙」。如果不在源圖像中,您將無法獲得透明背景的平滑邊緣。

+0

也許做一個特殊顏色的洪水填充,刪除所有其他顏色,模糊生成的蒙版並覆蓋它以平滑邊緣。 – AndreKR