私は白い背景を持つhtmlでいくつかの画像を持っています。私は白い背景を削除する必要があります。私はすべての白いピクセルを透明にすることができると考えていましたが、それを行う方法はわかりません。私はhtml/javascriptを使いたいだけです。キャンバスImageData白いピクセルを削除する
6
A
答えて
13
はそれを行う方法..です
function white2transparent(img)
{
var c = document.createElement('canvas');
var w = img.width, h = img.height;
c.width = w;
c.height = h;
var ctx = c.getContext('2d');
ctx.drawImage(img, 0, 0, w, h);
var imageData = ctx.getImageData(0,0, w, h);
var pixel = imageData.data;
var r=0, g=1, b=2,a=3;
for (var p = 0; p<pixel.length; p+=4)
{
if (
pixel[p+r] == 255 &&
pixel[p+g] == 255 &&
pixel[p+b] == 255) // if white then change alpha to 0
{pixel[p+a] = 0;}
}
ctx.putImageData(imageData,0,0);
return c.toDataURL('image/png');
}
とそれを使用するには、このメソッドの戻り値に画像のsrc
を設定します。
このコードが動作するために
http://jsfiddle.net/gaby/UuCys/
var someimage = document.getElementById('imageid');
someimage.src = white2transparent(someimage);
は、画像は、(セキュリティ上の理由
)コードと同じドメインから来なければなりません。
0
「getImageData」を使用してキャンバスオブジェクトから返される画像データは、RGBAピクセル情報(赤、緑、青、アルファ透明度)だけです。したがって、画像データを取得して、一度に4つのピクセルを調べるだけで繰り返し処理できます。白いものが見えるときは、それをゼロにすることができます(アルファ値とともに)。
ここでは、まだ白以外の要素の周囲に「ハロー」が残っているため、結果に満足できません。元の画像は、色のついた領域のエッジで(おそらく)わずかにぼかされ、効果的にアンチエイリアス処理されます。したがって、メイン画像よりも少し明るいエッジに沿ったピクセルがあります。純粋な白いピクセルをすべて削除した後もそのピクセルが表示されます。
エッジを実際にクリーンアップするには、どのような種類のソース画像を使用するのかに応じて、かなりトリッキーです。私はそれが最先端の画像処理や何かではないと思っていますが、それは自明ではありません。ここで
1
JPGを使用する代わりに、画像の周囲に透明な背景を持つPNGを使用します。あなたはより良い結果を得るでしょう。
0
しかし、あなたがしたい場合は、単に短いソリューションがある描画する前に画像データをクリア:)
function clearData(imageData )
{
var d = imageData.data;
var L = d.length;
for (var i = 3; i < L; i += 4)
{
d[i] = 0;
}
}
関連する問題
- 1. キャンバスを削除するときにImageDataを解放する
- 2. キャンバスを使ってイメージからピクセルを削除しますか?
- 3. Pythonのtkinterキャンバスから空白を削除するには?
- 4. キャンバスを使用して不透明なピクセルを白にする
- 5. 透明なPNGの周りの白いピクセルを削除するには?
- 6. JavaFX 8:最後の白いピクセルをコンボボックスのリストから削除するには
- 7. 空白を削除する
- 8. ビットマップ内のピクセルを削除する
- 9. キャンバスでの削除
- 10. HTML5キャンバス:ピクセル
- 11. キャンバスからシェイプを削除
- 12. キャンバスからジオメトリを削除する
- 13. HTML5キャンバスのAndroidピクセル
- 14. JavaScriptキャンバス白いスクリーン
- 15. 余白の削除
- 16. 空白の削除
- 17. Tkinterキャンバス、画像の削除
- 18. 文字イメージ内の黒いピクセルを削除するには
- 19. 単一ピクセルのキャンバスを描画する
- 20. ピクセルをキャンバスに変換
- 21. テーブルの空白を削除する
- 22. div間の空白を削除する
- 23. Rの空白を削除する
- 24. Axes3d(matplotlib)の空白を削除する
- 25. XPathで空白を削除するdom4j
- 26. CSVから空白を削除する
- 27. ハイパーリンクから空白を削除する
- 28. データテーブルの空白行を削除する
- 29. as3空白を削除する
- 30. 行末の空白を削除する