色の処理に特化した軽量ライブラリ「Chroma.js」
こんにちは、古見澤(コミザワ)です。最近は寒いですね。
自宅に加湿器を導入して潤いが増した一方、結露が酷くて窓際や玄関がカビそうで困ってます。
さて今回は Chroma.js という色に関するJSライブラリに触れる機会があったのですが、日本語の記事が殆ど見つからなかったため、この紹介をしようと思います。
Chroma.js とは
色を補正したり、色空間の変換をしたり、カラースケールを設定して色を得る事ができる、色に関する振る舞いに特化した軽量(32.8 KB)なJSライブラリです。
多くの色空間に対応しており、CSSやJavaScriptで扱いやすい形で色情報を取得することができます。
ソースはgit上にあり、ライセンスは BSD license です。
サンプル
下の例は色の補正機能を使い、X11カラーのpink(#ffc0cb)をベースに、明るさを下げ、彩度を上げ、出来上がった色を16進数で返しています。
var myColor = chroma('<script>displayColor('pink')</script>').darken().saturate(2).hex();
console.log(myColor); // "<script>displayColor('#ff6c93')</script>"
次の例は、テストの点数を表にしたときに背景色に使う色を取得するものです。
仮に60点を合格点として背景色を白とし、そこから0点に近づくほど濃い青色が、100点に近づくほど濃い赤色を返すサンプルです。
var scores = [80, 98, 92, 75, 60, 74, 68, 90, 55, 76, 38], // テストの点数
scale = chroma.scale(['<script>displayColor('#0000FF')</script>', '<script>displayColor('#FFFFFF')</script>', '<script>displayColor('#FF0000')</script>']).domain([0, 60, 100]);
scores.forEach(function(value){
var bgColor = scale(value);
// 取得した色を使って描画したり、プロパティに代入したり
// ひとまず表示してみる
document.write('<span style="background-color:' + bgColor + '; padding:6px">' + value + '</span> ');
});
実行結果:
導入
npmでインストールできます。
npm install chroma-js
readmeには書いてありませんが、bowerにもありました。
bower install chroma-js
あとは本体である chroma.min.js だけ直接ダウンロードしても大丈夫。
主な機能
以下に一部取り上げます、全ての情報はドキュメントを参照ください。見た目にも綺麗です。
コンストラクタ
chroma('hotpink'); // X11カラーの名称には全て対応
chroma('#ff3399'); // RRGGBBの6桁、3桁も対応。
chroma('F39'); // # はあっても無くてもよく、大文字小文字も区別しない
chroma(0xff3399); // 16進数でもOK
chroma(255, 51, 153); // RGBをそれぞれ1つずつ渡すのもOK
chroma([255, 51, 153]); // RGBを配列にして渡すのもOK
chroma(330, 1, 0.6, 'hsl'); // 最後の引数に明示的な色空間の指定が可能 省略時はRGB
chroma.hsl(330, 1, 0.6); // 色空間名のfunctionを通しても作成可能
chroma(80, 40, 130, 'lch'); // LCH
chroma.lch(80, 40, 130); // 同等
chroma(130, 40, 80, 'hcl'); // 上のLCHとはHとLの順序が逆なだけで、他は同じ
chroma.hcl(130, 40, 80); // 同等
chroma(0.2, 0.8, 0, 0, 'cmyk'); // CMYK
chroma.cmyk(0.2, 0.8, 0, 0); // 同等
chroma(0.6, 0, 0.8, 'gl');