2011年10月20日

imagecolorclosest関数でつまづきました


パソコンに初めて触れたのも購入したのも留学していたときでした。
アメリカで Mac からスタート、というかなり恵まれた環境だったのに、
パソコンについてもっと勉強してこなかったことが悔やまれます(^^;)


imagecolorclosest は名前が示すとおり、最も近い色、
つまり指定した色に一番近い色のインデックスを返す関数……

らしいのですが、またつまづきました。
もうヤダ(-_-)

ポイントは、
・引数は画像・赤の度合い・緑の度合い・青の度合いの4つ
・色は三次元座標と見なされて、近さは2色の距離として定義される

とのこと。

まず試したのはこちらのコードです↓

<?php
$image = imagecreatefrompng("black.png");
//シアンに一番近い色のインデックスを検索
$cyanIndex = imagecolorclosest($image, 0, 255, 255);
//RGB値の取得
$colorArray = imagecolorsforindex($image, $cyanIndex);
//RGB値の出力
printf("RGB = (%d, %d, %d)",
$colorArray["red"],
$colorArray["green"],
$colorArray["blue"]);
?>

結果はこちら↓

RGB = (0, 255, 255)

色、変わってないんですけど……。
シアンに最も近い色じゃなくて、シアンそのものなんですけど……(^^;)

何かもっとシンプルなコードで、RGB値だけ取得できないかなぁと思って
次に試してみたのがこちら↓

<?php
$image = imagecreatefrompng("black.png");
//シアンに一番近い色のインデックスを検索
print(imagecolorclosest($image, 0, 255, 255));
?>

結果はこちらです↓

65535

何の値……?
RGB の色の範囲に関係した値みたいなんだけど、よく分かりません(>_<)

一応画像を変えてみたりもしました↓

<?php
$image = imagecreatefrompng("red.png");
//シアンに一番近い色のインデックスを検索
print(imagecolorclosest($image, 0, 255, 255));
?>

結果はこちら↓

0

ますます分からない……。
このやり方では出力できないのかな……?

画像を変えたので、最初に試したコードにも当てはめて実行してみました↓

<?php
$image = imagecreatefrompng("red.png");
//シアンに一番近い色のインデックスを検索
$cyanIndex = imagecolorclosest($image, 0, 255, 255);
//RGB値の取得
$colorArray = imagecolorsforindex($image, $cyanIndex);
//RGB値の出力
printf("RGB = (%d, %d, %d)",
$colorArray["red"],
$colorArray["green"],
$colorArray["blue"]);
?>

これはこうなりました↓

RGB = (255, 0, 0)

これ、シアンどころかただの赤ですよね?

何かおかしいなぁ、何が間違ってんのかなぁ。
画像そのものが真っ赤なんですよね……だからこの結果?

やけくそで、既存の画像を使わずに新しく作成することに……↓

<?php
$image = imagecreate(100, 100);
//シアンに一番近い色のインデックスを検索
$cyanIndex = imagecolorclosest($image, 0, 255, 255);
//RGB値の取得
$colorArray = imagecolorsforindex($image, $cyanIndex);
//RGB値の出力
printf("RGB = (%d, %d, %d)",
$colorArray["red"],
$colorArray["green"],
$colorArray["blue"]);
?>

結果はこちら↓

Warning: imagecolorsforindex() [function.imagecolorsforindex]: Color index -1 out of range in C:\xampp\htdocs\imagecolorclosest.php on line 6
RGB = (0, 0, 0)


ますます遠のきました〜\(^O^;)/

何か根本を勘違いしているか、私?
指定した色に近い、別の色のインデックスが出てくるんじゃないの……?

ちょっと調べてはみたんだけど、
公式マニュアルに書いてあるのと同じ内容しか出てこないんですよねぇ。


<ご案内>----------------------------------------------------------------------------------------

nabecchiDRM.jpg

なべっち式ダイレクトレスポンスマーケティング(DRM) 22,800円

----------------------------------------------------------------------------------------<ご案内>



imagecolorclosest についてはこちらのブログにも書いてます↓
imagecolorclosest関数が微妙〜

関連関数はこちら↓
imagecolorexact関数はうまくいきました
printf関数
imagecreatefrompng関数はもう何度使ったかなぁ



posted by れい at 17:19| Comment(0) | 画像関数 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

×

この広告は1年以上新しい記事の投稿がないブログに表示されております。