透過GIFをコピーすると背景の透過部分が黒くなってしまいます。
コピー先の画像も透過させることはできるのでしょうか?
良い例を挙げているサイトなどありましたら教えてください。
(このような処理をしています。)
imagecreatefromgif()で元画像を読み込む
imagecreatetruecolor()でコピー先の空画像を作成
imagecopy()で画像をコピー
imagegif()でコピーした画像を出力
おそらくですが、透明色の指定が必要なのではないでしょうか?
http://au3.php.net/manual/ja/function.imagecolortransparent.php
imagecreatefromgif()で元画像を読み込む($imgとする)
imagecreatetruecolor()でコピー先の空画像を作成
$black = ImageColorAllocate ($img, 0, 0, 0); //黒(0,0,0)
ImageColorTransparent($img, $black); //$black(黒)を透明色に指定
imagecopy()で画像をコピー
imagegif()でコピーした画像を出力
のような感じで、ImageColorTransparent関数を入れるとどうでしょうか…?
すみません、原因を見落としてました。
GD 2.0.1以降(2.0.28以降推奨)ならば、元々のソースが透過GIFであればそのまま透過できます。
ただし、条件があって、画像が256色モードでなければいけなかったと思います。つまり、256色モード以外では透過GIFの合成はできません。
もしGD 2.0.1以降で元々が透過GIF画像であるにも関わらず、上手く透過できないのであればimagecreatetruecolor関数が原因ではないでしょうか?
imagecreatetruecolor関数ではなく、imagecreate関数を使用すれば256色モードになりますので、透過GIFをそのまま合成できると思います。
http://au3.php.net/manual/ja/function.imagecreate.php
詳しくはないのですが、画像を加工すると透過部分が黒くなることもあるようです(古いバージョンのみ?)。
なお、その都度、透明色を指定する必要があるのは、元々が透過GIFでない場合や透過GIFであっても特定色を透過色にしている場合なので、この場合は透過色は(0,0,0)であるとは限らないと思います。
wizemperorさん、ご回答ありがとうございます!
GIFの仕様の話になるのかもしれませんが、透過色は常に(0,0,0)なのでしょうか。
人物のイラストが書かれたgif画像だとして、の髪の毛の色が(0,0,0)だった場合、髪の毛の部分も透過してしまうかと思います。
ソースとなるgif画像から透過色を取得する方法等が必要なのかと思いますが、そのような処理はあるのでしょうか。