JavaScript

JavaScriptで補色や反転色、RGBを取得する

#と6桁(もしくは3桁)の英数字(正確には16進数で表記される0から9、aからfの英数字)からなるカラーを、RGBでの数値に変換、もしくはRGBから16進数に変換、はたまた補色や反転色はどんなのか?それをJavaScriptで取得できるようにしてみました。

Color.infoというメソッドを用意して、その引数に16進数もしくはRGB値をセットして実行すると、補色や反転色、RGB値などの色情報が返却されるようにしました。

ロジックはAdobe Illustrator CS4 * カラーの反転色または補色への変更を参考に制作。ロジック部分を抜粋。

反転
カラーの各構成要素をカラースケール上の反対側の値に変更します。例えば、RGB カラーの R の値が 100 の場合に「反転」コマンドを実行すると、R の値は 155 に変更されます(255 - 100 = 155)。

補色
カラーの各構成要素を、選択したカラーの最大の RGB 値と最小の RGB 値の合計を元にして、新しい値に変更します。現在のカラーの RGB 値のうち最大と最小の値が合計され、その値から各構成要素の値を引いて、新しい RGB 値が生成されます。例えば、RGB 値がレッド 102、グリーン 153、ブルー 51 であるカラーを選択したとします。この場合、まず最大値である 153 と最小値である 51 を合計して 204 という値が算出されます。この値から既存のカラーの RGB 値がそれぞれ差し引かれます。つまり、新しいレッドの値は 204 - 102(現在のレッドの値)= 102、グリーンの値は 204 - 153(現在のグリーンの値)= 51、ブルーの値は 204 - 51(現在のブルーの値)= 153 となり、新しい補色の RGB 値が生成されます。

すぐに使えるサンプル

サンプル: たとえば、#cc025fをセットした場合

このサンプルページのソースを見ていただくとお分かりいただけるかと思いますが、color-complement.jsというJSを用意しましたので、このJSを取り込んでもらって、

Color.info('#cc025f');

上記を実行すると、#cc025f の補色や反転色、RGB値などの色情報を取得できます。
#cc025fのところを、取得したい色に変更してください。

すぐに使えるサンプル2

補色と反転色の取得サンプル

補色と反転色の値だけを取得したい場合にご利用いただけます(ただ、この手のはもっと優秀なサイトがゴロゴロありますかね)。

color-complement.js のこと

color-complement.jsを作る際に気にしたことを下記です。

  • 色を指定するだけで、結果を取得できること
  • いろんな入力パターンを想定すること
  • ファイル読み込み後に何度も実行すること想定し、同じ処理を何度も呼び出すことのないようにすること

で、なにがやりたいのかというと

動的に背景色を変え、その際に背景色の上にのるオブジェクトは反転色を使いたかったのです。実行タイミングはいろんなシチュエーションを考えていますが、とりあえずフロント側で変化できるようにしたかったのです。というわけで、最後に分かりやすいデモを作ってみました。

1秒ごとに背景色が変化しテキスト色は背景色を反転するDEMO

さいごに

WindowsとAndroidでの検証は行っておりません。。
確認した端末は、iPhone(iOS 8.1 Safari) / Mac OS10.9.5 にて Safari 7.1, Chrome 38.x, Firefox 33.x。

最近の記事

文章のユーザビリティ

この書籍の中で、ライティングのユーザビリティについて触れている項目があり、激しく共感する部分だったので、ここで備忘録としてピックアップする。 ・・・

ライティング

インタフェースデザイン

この書籍は、I部 リサーチ、II部 デザイン、III部 インプリメンテーションと三部構成になっている。この記事では、その中から、I部 リサーチ、・・・

デザイン思考

フルHD映像を4Kにする → スーパースケール

これを知ったときはマジか!と飛び跳ねた。あらためて思い返してみると、確かに公式チュートリアルでも触れていたことをうっすら思い出す。そしてそのときとやり方がなん・・・

DaVinci Resolve

Macで編集時と書き出し後で色味が変わってしまう場合に試してみたいこと

試したことはまだないけど、Macで編集時と書き出し後で色味が変わって困ったときのために備忘録。 プロジェクト設定 > 「カラーマネジメント・・・

DaVinci Resolve

プロジェクト設定と環境設定

プロジェクト設定と環境設定について詳しく解説されている情報がなかなか見つからないので、要所要所で知り得た情報を更新していきます。 プロジェクト設定 ・・・

DaVinci Resolve

項目”Clipy”は開いているため、ゴミ箱に入れることができません。←アンインストールしようとしたときの話し

Clipyが超絶便利そうだったので、macOS Big Sur にインストール&再起動して使ってみた。ところが、command + c を複数の箇所で行い、c・・・

徒然なままに

setTimeout は requestAnimationFrame に変えるべき?

requestAnimationFrame をはじめて見たので調べていたら、setTimeout や setInterval は requestAnimati・・・

JavaScript

書籍「小さなチーム、大きな仕事」からピックアップ

6年ぶりに読み返したが、今なおハッとさせられることが多く見つかる。 この本で忘れないようにしたい項目をピックアップするだけでも役に立ちそ・・・

起業向け情報

書籍「完全網羅 起業成功マニュアル」からピックアップ

この記事では、以前に読んだ際に付箋を付けていたが、その部分だけを備忘録としてピックアップするため、本の要約ではない。実際は、何倍も濃い内容で、練・・・

起業向け情報

書籍「はじめの一歩を踏み出そう」から気になったフレーズをピックアップ

もう一回、全部読み返したいところだが、書籍がありすぎるので、当時付箋紙をつけていたところだけをピックアップ。書籍内ではより具体的な説明があるので・・・

起業向け情報

人気の記事

フォントサイズ

アクセシビリティの観点から文字サイズは固定しない方がいい。 ただ、IE以外のモダンブラウザではフォントサイズを固定しても、実際にはブラウザで拡大表示が可能だ。更・・・

CSS2007年1月19日

2点間の距離を取得する

「2点間 距離 取得 javascript」でググるとそのまま利用できる記事がたくさん見つかる。 いろいろ試したが、どれも数メートルの誤差はあるものの、似通った・・・

JavaScript2017年5月11日

デバイス別、クロスブラウザ別対応 - not useragent

もはや他ブラウザでも問題ないようにクロスブラザ対応だけでなく、スマートフォンやタブレット端末などマルチデバイスに対応できるようになっておかなければ、という時代に・・・

JavaScript2012年5月3日

「現在、このキーワードは非表示(検索サイト)です。

表示させるにはキーワードを変更するか単価を上げてください。」ってメッセージがよく出てしまう。 これを改善するにはどうしたらいいか? アナウンス通りに単価を吊り上・・・

リスティング2006年12月16日

wp_head() で表示される、CSSやJavaScript(JS、jQuery)を削除する

テンプレートをフルカスタマイズで作ろうとしたとき、wp_head() で表示される内容が不要なのでどうにかできないものか。 はじめは、wp_head() メソ・・・

WordPress2017年8月14日

Amazon Product Advertising API(署名入り)をアフィリエイトとして使う

AmazonのProduct Advertising APIをアフィリエイトとして使おうと試みて、その概要をつかむまで2,3日かかってしまった。まず、アカウン・・・

php2010年10月28日

ケータイサイト

制作時の注意点 大きくても200×300(20文字×15行) 特殊文字の積極的利用 電話番号入力で直接電話をかけられる 文字入力ではなく、リストから選択できる・・・

知識編2006年12月31日

「設計」という概念(Webサイト構築とSEO対策)

建物をどのように建てるのか(「Webサイト構築」設計) どんな建築物も設計図なしでは作れない。 建物を建てる場合 Webサイトの場合 何階建て? ・・・

知識編2006年12月24日

整形式文書

整形式文書(well-formed XML document)とは、xmlの文法を守った最も簡単な文書。 xml宣言 xhtmlにおいてはxml宣言は必須項目で・・・

xml2007年6月26日

妥当な文書

妥当な文書(valid XML document)とは、整形式文書の規則を守り、かつタグの取り決めを守っている文書。 文書型定義(DTD:Document Ty・・・

xml2007年6月27日

コメントありの記事

インタフェースデザイン

「test」

デザイン思考

Instagram API を使ってインスタに投稿した画像データを取得する

「>ころころさん コメントありがとうございます! 確かに、APIドキュメント見ましたが、ライブに関する情報は今のところ取得できないようですね。 インスタライ・・・」

API

Sony Eマウント フルサイズ対応のカメラレンズを収集するページを作ってみた

「SIGMAから超軽量で明るい単焦点レンズが2本発売になりましたので、リストにレンズ情報追加しました!」

お仕事・制作日記

overflowをautoにした要素のスクロール位置を変更する → scrollTop scrollLeft

「>名無しさん ご指摘、ありがとうございます! 記事冒頭の「まずはサンプル」のサンプルが動いていませんでしたので修正しました。」

JavaScript

えっ!?Yahooの検索結果から遷移しようとしたら全く違うサイトにリダイレクトされてしまった...

「>前田さん コメントありがとうございます。 環境は分かりかねますが、修正したいファイルのパーミッションを604や644に変更すると書き込みできるようになります(・・・」

お仕事・制作日記

記事の投稿IDなどの投稿者(ユーザー)情報を取得する方法 → get_the_author_meta

「アバターを取得する「get_avatar」についても追記しました!」

WordPress

jQueryでformを操る【nameの値を取得する/クリアする】

「「値をクリアする」を追加しました。チェックボックスやラジオボタンの値を何も選択していない状態に戻すときについて触れています。」

JavaScript

iframeの高さを自動調整する

「>匿名さん コメントありがとうございます。 サンプルでは、beforeは何も処理していないので期待する表示にならない、で正解です。 クリックした後が、対応・・・」

JavaScript

MAMPでMySQL Serverが突然起動しなくなった時 → ログファイル削除

「(匿名)さん コメントありがとうございます。何も設定変更していないのに、それまで使用できていたサーバーが突然使えなくなるのは辛いですよね、、。 ここで紹介したや・・・」

MAMP

イラストレーターでレイヤーごとにPNGで書き出す

「コメントありがとうございます! そもそもできるかはわかりませんが、ソースを書き換える必要はあります。 下記記事などが参考になるかもしれません。 illustra・・・」

Illustorator

WEB制作マークアップJavaScriptJavaScriptで補色や反転色、RGBを取得する | シンプルシンプルデザイン