主なアイデア
ブラウザで画像処理をマルチスレッド化する方法を学習する過程で、多くの人は、
Web Workersの結果をキャンバスに表示する問題に直面しています。 これは主に、DOM要素をWeb Workerに渡すことができないという事実によるものです。 解決策は
getImageData()を使用すること
です 。 この記事では、別のストリームで
ぼかしフィルターを処理する例で、このテクノロジーを使用する特定の例を説明します。
このためには、
index.htmlと
filter_worker.jsの 2つのファイルが必要です。
ページレイアウト
index.htmlには、現在のフィルター操作をパーセントで記録するぼかし半径とスパンを指定するためのフォームであるキャンバス要素を1つ配置する必要があります。
HTML<!DOCTYPE html> <html> <head> <title>Web Worker</title> <style> #my_canvas { border: #00ff00 solid 1px; } </style> </head> <body> <form> <input type="text" id="radius" value="5" /> <input type="button" onclick="draw('my_canvas')" value="Draw" /> </form><br> <canvas id="my_canvas" width="200" height="200"></canvas><br> <span id="load_info"></span> </body> </html>
Javascript
キャンバスを構成し、Web Workerを呼び出すJavaScript関数を追加します。
ウェブワーカー
ぼかしフィルターアルゴリズムは次のように機能します。現在のピクセルから特定の半径内にあるすべてのピクセルの色の合計の算術平均を求め、そこに出力カラーを書き込みます。
ウェブワーカー onmessage = function (event) { var imagedata = event.data.imagedata; var width = event.data.width; var height = event.data.height; var radius = event.data.radius; var sum_r, sum_g, sum_b, sum_a;
結論:
この例に基づいて、Webページをフリーズさせない独自の画像処理スクリプトを作成できます。