人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPとGDライブラリを使用して画像処理をするプログラムを作っているのですが、
透過GIFをコピーすると背景の透過部分が黒くなってしまいます。
コピー先の画像も透過させることはできるのでしょうか?
良い例を挙げているサイトなどありましたら教えてください。

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



●質問者: nori_0000
●カテゴリ:コンピュータ ウェブ制作
✍キーワード:Gd GIF PHP コピー サイト
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● wizemperor
●35ポイント

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



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

◎質問者からの返答

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

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

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

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


2 ● wizemperor
●35ポイント

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

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

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ