PHPとGDライブラリを使用して画像処理をするプログラムを作っているのですが、

透過GIFをコピーすると背景の透過部分が黒くなってしまいます。
コピー先の画像も透過させることはできるのでしょうか?
良い例を挙げているサイトなどありましたら教えてください。

(このような処理をしています。)
imagecreatefromgif()で元画像を読み込む
imagecreatetruecolor()でコピー先の空画像を作成
imagecopy()で画像をコピー
imagegif()でコピーした画像を出力

回答の条件
  • 1人3回まで
  • 登録:2006/12/25 19:26:30
  • 終了:2007/01/01 19:30:02

回答(2件)

id:wizemperor No.1

wizemperor回答回数379ベストアンサー獲得回数522006/12/25 20:58:17

ポイント35pt

おそらくですが、透明色の指定が必要なのではないでしょうか?



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関数を入れるとどうでしょうか…?

id:nori_0000

wizemperorさん、ご回答ありがとうございます!

GIFの仕様の話になるのかもしれませんが、透過色は常に(0,0,0)なのでしょうか。

人物のイラストが書かれたgif画像だとして、の髪の毛の色が(0,0,0)だった場合、髪の毛の部分も透過してしまうかと思います。

ソースとなるgif画像から透過色を取得する方法等が必要なのかと思いますが、そのような処理はあるのでしょうか。

2006/12/25 21:38:35
id:wizemperor No.2

wizemperor回答回数379ベストアンサー獲得回数522006/12/25 23:04:02

ポイント35pt

すみません、原因を見落としてました。

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)であるとは限らないと思います。

  • id:nori_0000
    返事が遅れて済みません、詳しい情報ありがとうございました!

    透明色はGIFで持っているのですね、必ず抜き色を指定しなければいけないのかと思っていました。

    教えていただいた項目を試していって、透過されない原因の特定からしていきたいと思います。

    ありがとうございました!

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません