PDA

View Full Version : PHP+GDで透過処理


shinocha
2002/08/21, 09:01 AM
PHP+GDで透過処理に関して質問です。
透過処理がうまくいきません。
local(Windows2000+IIS+PHP4.2.2+gd.dll)でテストを行ったときは
うまく行ったのですが、xreaサーバーではだめみたいです。


<?php
$img1 = $_GET['img1']; $img2 = $_GET['img2'];

Header("Content-type: image/png");

/* 元の画像 */
$im1 = ImageCreateFromJpeg($img1.".jpg");
/* 合成する画像 */
$im2 = ImageCreateFromPng($img2.".png");

/* 透過色(白)の指定 */
$white = ImageColorAllocate ($im2, 255, 255, 255);
ImageColorTransparent($im2, $white);

/* 元の画像に合成する画像(透過指定とおり)をコピー */
ImageCopy($im1, $im2, 0, 0, 0, 0, 120, 90);

/* 画像作成 */
Imagepng($im1);

/* 後処理 */
ImageDestory($im1);
ImageDestory($im2);
?>


サンプルは、http://shinocha.s15.xrea.com:8080/imgtest/imgtest.php
このような感じです。
よろしくお願いします。

koeta
2002/08/21, 09:16 AM
http://sb.xrea.com/showthread.php?s=&threadid=2386
↑s15サーバにgdライブラリの準備はできてるのかしら・・・

shinocha
2002/08/21, 09:26 AM
phpinfo(); で調べてみたところ、

GD Support enabled
GD Version 1.6.2 or higher
FreeType Support enabled
FreeType Linkage with freetype
JPG Support enabled
PNG Support enabled
WBMP Support enabled

となっていましたので、多分大丈夫だと思いますが...。
ちなみに、合成結果の画像を見ると、色が微妙に変化して見える感じが。

あと、もう一台のlocal(Linux+Apache+PHP4.2.2+GD)マシンで
試してみましたが、透過処理はきちんとできました。

carroll
2002/08/22, 01:00 PM
ローカルのLinux+Apache+PHP 4.2.2+gd-1.8.4ですが、透過されませんでした。

ImageColorAllocate 
の代わりに
ImageColorClosest 
を使うといいようです。

色の変化の方に関しては、はわからないです。

shinocha
2002/08/22, 01:29 PM
Originally posted by carroll
ImageColorAllocate 
の代わりに
ImageColorClosest 
を使うといいようです。


/* 透過色(白)の指定 */
//$white = ImageColorAllocate ($im2, 255, 255, 255);
$white = ImageColorClosest($im2, 255, 255, 255);
ImageColorTransparent($im2, $white);

carrollさんのおっしゃるとおり、上記のように変更したところ、
無事透過することが出来ました。
ありがとうございました。

しかし、まさか近似色の指定をするとは...。

色の変化に関しては引き続き調べてみます。