2011-07-07 16 views
3

不透明度のあるPNG放射状グラデーションを作成する必要があります。私はGDLibを見てきましたが、放射状のグラデーションを生成する方法はありません。誰かがGDlibやPHP用の他のグラフィックライブラリの方法を知っていますか?PHPで不透明な放射グラデーション

私はGDLibを使ってピクセル単位で生成できる最悪の場合を想定していますが、それにどのように計算を開始するのでしょうか?

目標は、ウェブページ用のセクシーな照明効果の背景PNGを生成することです。効果の例は、this background imageを使用するheader hereに見ることができます。私は一般的な白の照明効果のPNGを試しましたが、それは着色された照明の近くでは見えませんので、私の生成PNGはウェブサイトの配色を考慮に入れます。

CSS radial gradientsのブラウザサポートが非常に甘いので、私はサーバー側が行く方法だとします。

+1

GDはすばやく汚れたイメージマニピュレータです。シンプルな操作はゲームの名前です。放射状の操作は高度なものであり、GDには適していません。 Gimpには、ほとんどの言語のバインディングを使った完全なスクリプトインターフェイスがあります(ただし、PHPはありません)。 –

+0

これはXを使わないでLinuxのWebサーバー上で実行されることです - 私はGimpの実行にどれくらいの成功を収めているのか分かりません – Tak

+2

gimpはコマンドラインの 'batch'モードを持っています。 –

答えて

1

なぜimagecolorallocatealpha()とまたはimagefilledellipse()の組み合わせを使用しないのですか?

編集:

私が何を意味するかの例についてはthis classを参照してください。これを拡張してアルファをサポートできるはずです。

EDIT2:

Iアルファサポートを得るために上記のクラスにいくつかの変更を行いました。私は それをピクセルごとGDLibを使用して生成することができますが、どのよう 1でもやって起動しない最悪のケースを想定

http://codepad.org/1eZ3Km0J

+0

これは面白いです。それは反復的に色をインクリメントし、一連の徐々に小さい楕円を描画します。ただし、アルファチャンネルに楕円を描くことはできません:gd関数はRGBチャンネルの暗黙性を使用しているようです(?) – horatio

+0

@horatio同じ色の127の異なる不透明度を作成してaibの数学をテストしています'imagecolorallocatealpha() 'を使って画素をレンダリングします。私は同じことが同心円の 'imagefilledellipse()'で適用できると思います。 – Tak

+0

オズのコードに基づいた例で答えを更新しました。 –

1

古典的なビデオゲームのトリックは、光を計算するのではなく、グラデーションテクスチャを適用することです。これは技術のための完全な使用です。

大規模ピクセルサイズ(2048px四角形)でグレースケールの勾配を作成し、いくつかの小さなもの(1024,512,256pxなど)は必要に応じて最も近いものを選択します(スケールアップはバンディングを誇張するかもしれません。モアレ)。

imagecopymergeなどのphp gd関数を使用します。意図に応じて、最初の使用時に結果を保存することができます。

+0

素晴らしいですが、私はその勾配テクスチャをダイナミックなソリッドカラーの不透明度マップ(それがフレーズの場合)として適用したいと考えています。 – Tak

+0

ahh。私は*アルファチャンネルを設定してからGDを使ってピクセルを個別に設定する必要があると思う。 – horatio

+0

しかし、ここでもまた、ページの背景色をサンプリングまたは指定し、グラデーションを画像上に単色でコピーし、結果を目的の画像にマージします。明らかに真のアルファチャンネルソリューションではありません。 – horatio

1

:それは完璧ではないのですが、それは楕円などのために働きますそれで の数学?

距離がユークリッドであるalpha = max_alpha - (distance_to_center/radius)の数値は簡単です。すなわち、sqrt((x1-x2)^2 + (y1-y2)^2)です。

+0

私は円形ではないダイヤモンド形状の勾配を得る。私は何とかそれを台無しにしていますか? – Tak

+0

それ以上のπとsin/cosが必要ですか?あなたが正しい方向に私を向けることができれば、私の数学はあまり良くありません。コードの残りの部分は終了しました\ o/ – Tak

+0

古いジョークのように:pi R round、cake r squared。 – horatio

関連する問題