0

重複
の可能性: 画像から白い背景を削除し、透明にします

現在、画像から白い背景を削除するコードがあります。次のようになります。

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

その画像の後ろに黒い背景を追加して、エッジをよりよく見せました. 関数に線を追加したり、関数を編集して、エッジがよりスムーズ/アンチエイリアスされるようにする方法はありますか? ありがとう!

4

2 に答える 2

1

これを行う簡単な方法はありません。元の画像のエッジは、白い背景にアンチエイリアス処理されています。真っ白な白を削除すると、エッジの近くに白に近いピクセルがたくさん残ります。暗い色に対してこれらのピクセルを見ると、目立ち、「ラフ」に見えます。ソース画像にない場合、透明な背景に対して滑らかなエッジを得ることができません。

于 2013-01-03T20:53:29.770 に答える
0

出力の最終結果は、インポートする画像の初期画質によって決まります。PHP は、画像上に描画された要素のみをアンチエイリアスできます。

1 つの解決策である完全なハンマー アプローチは、画像を上に再サンプリングしてから、再度下にサンプリングすることです。結果は問題の画像によって異なり、ほとんどの場合、良くありません。

特定の問題に対する最善の解決策は、最初に高品質のインポートされた画像を使用することです。

于 2013-01-03T20:50:23.403 に答える