PHP+GDで画像の透過

| | コメント(0) | トラックバック(0)

 昨日のようにぬりつぶしだと、指定座標の色が透過用ではなかったり、また他の透過させたい背景のところまで色が連続していなかったりするとまるで使えません。そこで今度は正確なカラーインデックスを取得して割り当てれば大丈夫なのでは?ということで透過処理を下記のコードにいれかえます。

$white = imagecolorexact($backimg, 255, 0, 255);
imagecolortransparent($backimg, $white);

これなら行けるかと思えば前回の強制処理とは違うので画像も選ぶ必要があります。
透過書き出しとしっても種類がありFireworksの場合ではgif/pngともに8bit色インデックス透明カラー(255,0,255)を指定します。

早速やってみたところ、元画像gifの場合は成功しましたがpngで失敗。
ちょっとトレースしてみたら、imagecolorexactでgifの場合必ず-1が返ってきていてimagecolortransparentが役に立ってない。pngでは正の整数が返っているようだが…。

と言うことで上記の透過処理そのものを外すとgif/png共に成功… orz...
全然意味ないどころか障害になってた。

前に同じように透過処理をしないまま合成したときはマットカラー?と思われる色が塗りつぶされていたりしたので全く信頼できない不安定状態です。(多分元画像側でしっかりフォーマットを統一させれば大丈夫と思うが最近のデザイナーはフォーマット知識無いから大変)

PHPとGDのどっちがバグってるのか検討も付かないなー。
今のところ元画像をgifにして書き出しをpng/gifで使い分けるほうが安全かもしれないです。

今回の検証用テストPHPはこちら

トラックバック(0)

このブログ記事を参照しているブログ一覧: PHP+GDで画像の透過

このブログ記事に対するトラックバックURL: http://blog.c-production.com/mt/mt-tb.cgi/282

コメントする

このブログ記事について

このページは、管理人が2006年7月14日 05:03に書いたブログ記事です。

ひとつ前のブログ記事は「PHP+GDでアバターの着せ替え」です。

次のブログ記事は「ギター買って1年経った」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。

Powered by Movable Type 4.1