【JavaScript】各種色指定用の文字列を16進カラーコード(#xxxxxx)に変換
指定する分にはいろんな書き方が出来るのは便利でよいのですが、逆のケース、つまり既に指定されている色を取得する場合に、どのフォーマットで返ってくるかわからない、というのでは、少々困ってしまいます。
そこで、色指定用の各種の文字列を、16進カラーコード(#xxxxxx)形式に変換する関数を作ってみました。
color=color.replace(/\s/g,'').toLowerCase();
if (color.match(/^rgb\((\d{1,3})%?,(\d{1,3})%?,(\d{1,3})%?\)$/)) {
// 'rgb(r,g,b)' => '#xxxxxx'
var r=RegExp.$1,g=RegExp.$2,b=RegExp.$3;
if (color.match('%')) {
r=~~(255*r/100); g=~~(255*g/100); b=~~(255*b/100);
}
return (b|(((g|(r|1<<8)<<8))<<8)).toString(16).replace(/^1/,'#');
}
if (!isNaN('0x'+color)) color='#'+color; // 'x'(hexadecimal) => '#x'
if (color.match(/^#([a-f\d])([a-f\d])([a-f\d])$/)) {
// '#rgb' =>'#rrggbb'
var r=RegExp.$1,g=RegExp.$2,b=RegExp.$3;
return '#'+r+r+g+g+b+b;
}
try {
// (any format) => '#xxxxxx'
var fg=document.fgColor;
document.fgColor=color; color=document.fgColor;
document.fgColor=fg;
}
catch(e){
}
return color;
} // end of colorToHex()
【colorToHex()の使い方】サンプルはこちら。
引数に色指定用の文字列を指定してコールしてやれば、#xxxxxx形式のカラーコードを返します。
例1) var hexColor=colorToHex('rgb(0, 23, 255)'); // #0017ff
例2) var hexColor=colorToHex('cadetblue'); // #5f9ea0
とりあえず、RGB color parser in JavaScriptにあったRGBColor()(rgbcolor.js)で同様のことが出来そう、というのはわかりましたが、'red'等の色名については変換テーブルを自前で用意していたりするのでコードが300行近くあり、少々重そうなのが玉に傷。もうちょっとシンプルに出来ないものか……。
これを利用することで、30行弱のコードで当該機能が実現出来るようになったのでした……ブラウザ依存性が高いかもしれませんが(汗)。
また、IE6(Trident)やOperaの場合、同手法では"#xyz"がなぜか"#0x0y0z"に変換されてしまいます……Firefoxでは正しく"#xxyyzz"になるのですが。
2007/11/29(木) 04:16 | 固定リンク
| 記事の編集(管理者用)
「おもいつき」カテゴリの記事
- ちょっと小細工:textareaの高さを自動調節(2008.05.21)
- Yin and Yang:動作改善(?)他(2008.05.14)
- ノイズキャンセル(マスク|マイク)ってないのかな?(2008.05.07)
- 『はてブBOX』と、ココログ用『はてブコメント表示欄』スクリプトの更新(2008.05.05)
- Yin and Yang:リンク先の内容をその場で表示するスクリプトの更新(2008.05.02)
「パソコン・インターネット」カテゴリの記事
- ツールを作る側は対象に与える影響をどこまで気にするか?(2008.05.29)
- "『無断リンクはやめて』という人にはしない方向で"の思考過程(2008.05.24)
- 『無断リンクはやめて』という人にはしない方向で(2008.05.22)
- ちょっと小細工:textareaの高さを自動調節(2008.05.21)
- Yin and Yang:動作改善(?)他(2008.05.14)
「覚書」カテゴリの記事
- ちょっと小細工:textareaの高さを自動調節(2008.05.21)
- Google検索結果画面のHTML構造、変わりました?(2008.04.30)
- Googleの検索結果からH2タグが消える現象の原因(2008.05.03)
- 【JScript】ActiveXObject('htmlfile')で発生する不具合(2008.04.05)
- 【JavaScript】onmouseover/onmouseoutの振る舞い(2008.03.11)

