CSV2IMGに実装するカラーピッカーを作ろうとしたんですが、カラーチャート※を作る段階でつまづいてしまいました。アルゴリズムそのものを紹介しているページが見つからなかったので、oitakeが独自にアルゴリズムを考えるはめに。そして気が付けばもう日をまたいでいるので、今回は、カラーチャートを生成するPHPの紹介だけです。ふたつあります。
なお、下記PHPを動作させるには、php.iniの「extension=php_gd2.dll」がコメントアウトされている状態、GD2を使用できる状態である必要があります。
まずひとつめはごく簡単なチャート。赤・緑・青、黄色を四隅に配置しています。紫と水色、白と黒を選択できないのが短所。
<?php
$bitmap=imagecreatetruecolor(256,256);
imagefill($bitmap,0,0,imagecolorallocate($bitmap,0,0,0));
for($y=0; $y<256; $y++)
{
for($x=0; $x<256; $x++)
{
$r=255-$y;
$g=$x;
$b=((255-$x)*$y)/255;
imagesetpixel($bitmap,$x,$y,imagecolorallocate($bitmap,$r,$g,$b));
}
}
imagepng($bitmap,'colorchart.png');
imagedestroy($bitmap);
`colorchart.png`;
?>
もうひとつは色相環とかスペクトラムとか呼ばれている虹色のチャート。原色に近い色であればほとんどの色を選択できます。白と黒、色彩の濃淡(彩度)は未実装ですが、Y軸を使えば何とかなるんじゃないかなあ。
<?php
$bitmap=imagecreatetruecolor(256,256);
imagefill($bitmap,0,0,imagecolorallocate($bitmap,0,0,0));
$u=floor(255/6);
$ra=array(0,-1,0,0,1,0);
$ga=array(1,0,0,-1,0,0);
$ba=array(0,0,1,0,0,-1);
for($y=0; $y<256; $y++)
{
$r=255;
$g=0;
$b=0;
for($x=0; $x<256; $x++)
{
imagesetpixel($bitmap,$x,$y,imagecolorallocate($bitmap,$r,$g,$b));
$s=floor($x/$u);
$r+=$ra[$s]*6;
$g+=$ga[$s]*6;
$b+=$ba[$s]*6;
}
}
imagepng($bitmap,'colorchart.png');
imagedestroy($bitmap);
`colorchart.png`;
?>
ぜーったい、もっと良い方法があるに違い。RGBとかHSBとかCMYKとかをゴニョゴニョできる人、教えてください。
※Photoshopのカラーピッカーなんかでおなじみの、グラデーションがかった色とりどりの画像。カラーマップ、カラーテーブル、カラーパレット…など、色んな呼び名がありそう。