[PHP-users 35270] アルファチャンネルを持つpng画像同士のimagecopymerge

仲村 鮎美 a-nakamura @ accent-inc.jp
2010年 7月 5日 (月) 20:34:46 JST


ナカムラです。

アルファチャンネルを持つpng画像同士のimagecopymergeについて、
わからない事がありました。
解決方法をお知りの方がおられましたら教えて頂けると助かります。

【目的】
アルファチャンネルを持つpng画像1と2を合成し、
双方のアルファチャンネルを統合保持した画像3を作成したい

【問題点】
画像1、2のアルファチャンネルを併せ持った画像が生成されない
(出力画像の理想サンプル→out_ok.png)

下記ソースで生成した画像は、アルファチャンネル部分が黒(#000000)で
塗りつぶされたものになる→out_type_1.png

【質問内容】
imagecopymerge、もしくはimagecopyでは、アルファチャンネルを持つ
png画像同士の合成はうまくいかないのか?

【環境】
PHP Version 5.2.6
GD Version bundled (2.0.34 compatible) 
OS WindowsXp

【ソース】
下記URLに一式アップロード済み(imagecopymerge.zip)
http://www1.axfc.net/uploader/Sc/so/130789
---------
$img_file_1 = "hoge_1.png";
$img_file_2 = "hoge_2.png";
$out_img    = "out_1.png";

//画像1の読み込み
$img_1 = imagecreatefrompng($img_file_1);
#imagealphablending($img_1, false);
#imagesavealpha($img_1, true);

//画像2の読み込み
$img_2 = imagecreatefrompng($img_file_2);
imagealphablending($img_2, false);
imagesavealpha($img_2, true);	

list($in_w, $in_h, $ext) = getimagesize($img_file_1);

//画像1,2の合成
imagecopy($img_1, $img_2, 0, 0, 0, 0, $in_w, $in_h);
#imagecopymerge($img_1, $img_2, 0, 0, 0, 0, $in_w, $in_h, 100);

if (imagepng($img_1, $out_img)) {
    echo "TYPE_1:OK.";
}

@imagedestroy($img_1);
@imagedestroy($img_2);
---------

アップロードしているソースには、自分なりに考えたアルファ値
保存統合の別バージョンも記述しています。
(結論としてできていません)
アルファ無し画像+アルファ込み画像ならば問題はないのですが、
両方の透明部分を合わせた画像がどうやってもできませんでした。
どうぞよろしくお願いします。

以上です。




PHP-users メーリングリストの案内