[PHP-users 9648] GD関数をもちいて減色処理をしたい。

Yoshitake Shinohara php-users@php.gr.jp
Sat, 31 Aug 2002 17:31:34 +0900 (JST)


よしたけ@YYNです。

GD関数を用いて色数を指定した色数に減色を行いたいのですが、次の通り、
imagetruecolortopalette()関数を用いて色数指定を行っても機能しません。

function 
imageconv($image_data,$conv_fmt,$conv_hsize,$conv_wsize,$conv_color,$s)
{
	$im = ImageCreateFromString ($image_data);
	$conv_im=imagecreatetruecolor($conv_wsize,$conv_hsize);
	imagecopyresampled($conv_im,$im,0,0,0,0,$conv_wsize,$conv_hsize,$wsi
ze,$hsize);
	imagetruecolortopalette($conv_im,TRUE,65535);
echo imagecolorstotal($conv_im);
	ob_start();
	switch ($conv_fmt) {
		case "GIF":
			ImageGIF($conv_im);
			break;
		case "PNG":
			ImagePng($conv_im);
			break;
		case "JPG":
			ImageJpeg($conv_im);
			break;
	}
	$data=ob_get_contents();
	ob_end_clean();
//	return $data;
}

結果:256

65535に指定しましたが、8でも16でも2でも出力結果は256になります。
ちなみに、imagetruecolortopalette()関数をコメントアウトすると、結果は
0になります。(これはカラーパレットが無いからと判断して良いんですよね?)

また、echoをはずして、ImagePng($conv_im);にて出力させても、色数指定にか
ぎらず同じ画像が出力されます。
#変に減色されているので、画質が落ちてます。元データは256色なので、変な色
#になるはずが無いのですが(^^;

環境は、Debian/Woody, PHP 4.1.2, GD 2.0.1 with GIF patchです。

他にGD関数を使用して良い方法がございましたらば、教えていただければと思います。
pearのImageMagic関数を使った方が良いのでしょうか...
データをDBから受け取るため、ImageMagic関数だと一旦ファイルに書く必要があるのが
許せなくって(^^;

------------------------
YYN partnership company
Yoshitake Shinohara
yoshi@yyn.jp