15

要素がcanvasあり、キャンバス上の画像を PNG または JPEG に変換する必要があるとします。もちろん、単純に を使用することもできますcanvas.toDataURLが、問題は、これを 1 秒間に 20 回行う必要があり、canvas.toDataURL非常に遅いことです。ブラウザーが PNG への変換でビジーであるため、キャプチャ プロセスがフレームを見逃すほど遅いのです。

私の考えは、 を呼び出すことcontext.getImageData(...)です。これは明らかにはるかに高速であり、返さCanvasPixelArrayれた を Web Worker に送信します。Web Worker は生の画像データを PNG または JPEG に処理します。canvas.toDataURL問題は、Web Worker 内からネイティブにアクセスできないことです。代わりに、純粋な JavaScript に頼る必要があります。Node.js 向けのライブラリを探してみました、C++ で書かれています。生の画像データを PNG または JPEG にレンダリングする純粋な JavaScript のライブラリはありますか?

4

3 に答える 3

9

pnglets (非常に古い)、data:demo、およびPNGlibを含む libpng の JavaScript ポートがいくつかあります。

PNG 仕様自体は非常に単純です。最も困難な部分は、単純な PNG エンコーダーを自分で実装して、ZLIB適切に処理することです (これには、多くの独立した JavaScript 実装も存在します)。

于 2012-08-20T19:51:34.853 に答える
0

実際には、Emscriptenと呼ばれるC++からJavaScriptへのコンパイラがあります。

誰かがlibpngのポートを作成しました。これを確認することをお勧めします。

于 2012-08-20T18:06:42.863 に答える
0

色の数に応じて RGB とパレットの両方をサポートする独自の PNG エンコーダーを作成できました。Web ワーカーとして実行することを目的としています。usain-pngとしてオープンソース化しました。

于 2012-11-30T20:03:07.500 に答える