0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

完走賞ゲットのため小ネタ 25記事を投稿しようとチャレンジ v2Advent Calendar 2023

Day 14

スポイトツールを呼び出せる「EyeDropper API」を p5.js Web Editor上で試す【完走賞ゲット-14】

Posted at

この記事は、「完走賞ゲットのため小ネタ 25記事を投稿しようとチャレンジ v2 Advent Calendar 2023」の 14日目の記事です。

今回の内容

今回の記事の内容は、ブラウザで使える API の 1つで、スポイトツールを呼び出せる「EyeDropper API」に関する内容です。
ブラウザで使える API のリストを見ている中で見かけて、気になったので試してみたという内容です。

●EyeDropper - Web API | MDN
 https://developer.mozilla.org/ja/docs/Web/API/EyeDropper

EyeDropper

「EyeDropper API」を使ってみた時の様子

詳細はこの後に書いていきますが、「EyeDropper API」を使うことで何ができたかを動画で示します。

スポイトツールで取得した色は、ログ出力する形にしています。
「EyeDropper API」はブラウザ上の処理で用いていますが、そのブラウザとは別アプリである PowerPoint上の色情報を取得できていることが分かります。

補足:現状のステータス

MDN のページの冒頭に書かれているとおり、実験的な機能のようです。
また、MDN のページの下部や、以下の「Can I use...」を見てみると、利用できるブラウザはかなり限定的であるようです。

Can I use...

EyeDropper でできること

「EyeDropper API」を使うと、スポイトツールを呼び出せすことができます。

以下は、上で掲載していた MDN のサイトのデモを動かした時の様子です。
以下の左側にある赤矢印で示している部分が、EyeDropper API で呼び出されたスポイトツールです(※ 右側にある赤矢印で示しているボタンを押すと、スポイトツールが出てきます)。

スポイトツール

MDN に掲載されているスポイトツールの実装例は、以下のとおりです。

document.getElementById("start-button").addEventListener("click", () => {
  const resultElement = document.getElementById("result");

  if (!window.EyeDropper) {
    resultElement.textContent =
      "このブラウザーは EyeDropper API に対応していません";
    return;
  }

  const eyeDropper = new EyeDropper();

  eyeDropper
    .open()
    .then((result) => {
      resultElement.textContent = result.sRGBHex;
      resultElement.style.backgroundColor = result.sRGBHex;
    })
    .catch((e) => {
      resultElement.textContent = e;
    });
});

EyeDropper API を p5.js Web Editor上で試す

それでは p5.js Web Editor上で、EyeDropper API と p5.js とを組み合わせた実装を試してみます。

EyeDropper API と p5.js を組み合わせたプログラム

実装した内容は以下のとおりです。
基本的には、上で掲載していた MDN のページの Vanilla JS での実装を、p5.js用に少し書き直した形です。

function setup() {
  createCanvas(600, 250);
}

function draw() {
  background(220);

  fill(100, 150, 200);
  rect(50, 50, 100, 100);
  fill(150, 250, 200);
  rect(320, 120, 100, 100);
}

function keyPressed() {
  if (!window.EyeDropper) {
    console.log("このブラウザーは EyeDropper API に対応していません");
    return;
  }

  const eyeDropper = new EyeDropper();

  eyeDropper
    .open()
    .then((result) => {
      const hexColor = color(result.sRGBHex);
      console.log(result.sRGBHex);
      // console.log(hexColor);
      console.log(hexColor.levels);
    })
    .catch((e) => {
      console.log(e);
    });
}

EyeDropper API をコンソールから使う

EyeDropper API は、基本的にユーザーの操作をトリガーに実行する必要があるようです(※ 上記の自分の例だと、キー押下の操作をトリガーにしていました)。
しかし、ブラウザのコンソールで処理を行う場合は await new EyeDropper().open(); という処理を実行して、スポイトツールを呼び出せるようです。

●Chrome 95 で追加された画面上の色を取得するEyeDropper APIについて | サイボウズ フロントエンドエキスパートチーム
 https://cybozu.github.io/frontend-expert/posts/eyedropper-api

EyeDropper API をコンソールから使う

出力した内容の補足

スポイトツールから取得できる色情報はカラーコードの形式です。
今回、そのカラーコードをそのまま出力しつつ、それと合わせて RGBA の値も出力しました。

RGBA の値を得る方法は、過去に以下の記事で書いた levels を使った方法を用いました。

●p5.js で p5.Color の toString()・levels・分割代入を使ったり RGB・HSB を扱ったりする #JavaScript - Qiita
 https://qiita.com/youtoy/items/10df2850603909216841

おわりに

今回、ブラウザで使える API の中の 1つで、スポイトツールを呼び出せる「EyeDropper API」というのを見かけたので、p5.js と組み合わせて使ってみました。

今のところ、利用シーンは思いつけてないですが、とりあえず自分用のメモを兼ねて試して記事に書いてみました。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?