キャンバス経由でのRGBAフォーマットへの色変換とパフォーマンス問題の解決
2022-01-27 08:06:47
任意の色をRGBA形式に変換する
フロントエンドのプログラミングをしていると、さまざまな色形式("red", "#F00", "#FF0000" など)をRGBA形式に変換する必要にしばしば遭遇します。また、Webを検索すると、たくさんのソリューションが見つかります。
ここでは、canvasのpixel fetchメソッドを使って、任意の色のRGBA値を取得する方法を説明します。おおよその手順は以下の通りです。
- まず、サイズ1*1のキャンバスを作成し、そのキャンバスの描画コンテキストctxを取得します。
- ctx.fillStyleに指定された色を設定します。
- ctx.fillRectでキャンバスを塗りつぶす。
- ctx.getImaegeDataでImagedataオブジェクトを取得し、その中のピクセル値を取得します(取得したピクセル値はたまたまRGBA形式でした)。
サンプルコードは以下の通りです。
function getRgba(color) {
var canvas = document.createElement("canvas");
canvas.width = 1;
canvas.height = 1;
var ctx = canvas.getContext('2d');
ctx.fillStyle = color;
ctx.fillRect(0, 0, 1, 1);
var colorData = ctx.getImageData(0, 0, 1, 1).data;
return {
r: colorData[0],
g: colorData[1],
b: colorData[2],
a: colorData[3]
};
}
パフォーマンスの問題に注意を払う
なお、上記のメソッドが頻繁に呼び出される場合、パフォーマンスの問題が発生しますが、これは私のパートナーの一人が経験したことです。このコードでは頻繁に canvas オブジェクトを作成しているため、常にオブジェクトを作成することによるパフォーマンス上のペナルティがあり、JavaScript 自身もガベージ コレクション フェーズでこれらの作成したオブジェクトをリサイクルし続ける必要があるため、これもパフォーマンス上のペナルティとなります。
これを処理する良い方法は、グローバルな canvas オブジェクトを作成し、そのオブジェクトを毎回再利用することです。わずかな変更で、次のコードをご覧ください。
var canvas = document.createElement("canvas");
canvas.width = 1;
canvas.height = 1;
var ctx = canvas.getContext('2d');
function getRgba(color) {
ctx.fillStyle = color;
ctx.fillRect(0, 0, 1, 1);
var colorData = ctx.getImageData(0, 0, 1, 1).data;
return {
r: colorData[0],
g: colorData[1],
b: colorData[2],
a: colorData[3]
};
}
以上、本記事の全内容をご紹介しましたが、皆様の学習のお役に立てれば幸いです。また、Script Houseをより一層応援していただければ幸いです。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
HTML5の再適応スキームとビューポート適応の問題点を解説
-
キャンバスベースのモバイル用画像編集ソフトの実装
-
AmazeUI モバイルページ トップナビゲーションバー ヘッダーとサイドナビゲーションバー offCanvas サンプルコード
-
HTML5 Blobオブジェクトの使用方法
-
顔決済機能の実装をベースにしたHTML5+tracking.js
-
html5 自動再生 mov形式動画サンプルコード
-
人気のあるいくつかのHTML5 UIフレームワークの比較(要約)
-
印刷用のクリア画像を生成するhtml2canvasのサンプルコード
-
html5 canvas 自動改行でテキストを描画するサンプルコード
-
もしかしたら、これらがあなたの欲しいH5ソフトキーボード対応ソリューションかもしれません(要約)。