ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript を使用して画像の平均色を計算するにはどうすればよいですか?

JavaScript を使用して画像の平均色を計算するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-01 07:04:30404ブラウズ

How to Calculate the Average Color of an Image Using JavaScript?

JavaScript で画像の平均色を取得する

問題:

を判断することは可能ですかJavaScript を使用して画像の平均色を計算するには?

解決策:

すぐには分からないかもしれませんが、実際に JavaScript を使用して画像の平均色を計算できます。これを実現する鍵となるのは、HTML5 の利用です。

画像から平均色を抽出するには、次の手順に従います。

  1. を作成します。
  2. drawImage() メソッドを使用して、キャンバス上に画像を描画します。
  3. getImageData() を使用して、キャンバスからピクセル データを取得します。
  4. 各ピクセルを反復処理し、赤、緑、青の値を個別の変数に累積します。

累積された値をピクセルの合計数で割って、平均色を取得します。

<code class="javascript">function getAverageRGB(imgEl) {
    var blockSize = 5, // only visit every 5 pixels
        defaultRGB = { r: 0, g: 0, b: 0 }, // for non-supporting envs
        canvas = document.createElement('canvas'),
        context = canvas.getContext && canvas.getContext('2d'),
        data, width, height,
        i = -4,
        length,
        rgb = { r: 0, g: 0, b: 0 },
        count = 0;

    if (!context) {
        return defaultRGB;
    }

    height = canvas.height = imgEl.naturalHeight || imgEl.offsetHeight || imgEl.height;
    width = canvas.width = imgEl.naturalWidth || imgEl.offsetWidth || imgEl.width;

    context.drawImage(imgEl, 0, 0);

    try {
        data = context.getImageData(0, 0, width, height);
    } catch(e) {
        /* security error, img on diff domain */
        return defaultRGB;
    }

    length = data.data.length;

    while ((i += blockSize * 4) < length) {
        ++count;
        rgb.r += data.data[i];
        rgb.g += data.data[i + 1];
        rgb.b += data.data[i + 2];
    }

    // ~~ used to floor values
    rgb.r = ~~(rgb.r / count);
    rgb.g = ~~(rgb.g / count);
    rgb.b = ~~(rgb.b / count);

    return rgb;
}</code>

説明したアルゴリズムを実装する関数の例を次に示します。

この関数は、画像要素を入力として受け取り、赤、緑、青の平均値を整数として含むオブジェクトを返します。

以上がJavaScript を使用して画像の平均色を計算するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。