2011-07-04 18 views
0

私は他の2つから1つのPNG画像を作成しています。GD with PHPを使って画像をマージする

画像AとBは同じ寸法ですが、どちらも200x400pxです。最終的なイメージは同じです。

私はPHPでGDライブラリを使用しています。

オリジナルのPNG-8からPNG-24を作成し、次にカラー透明度を使用して、最後に2番目の画像を この新しいPNG-24にコピーすることでした。色の透明度とPNG-24からPNG-8に行くときの問題は、とにかく最初のステップで表示されます。

これは、元のPNG-8を取得することであり、それは寸法です:

$png8 = imagecreatefrompng($imageUrl); 
$size = getimagesize($imageUrl); 

今私が作成します

imagecolortransparent($png24, $transparentIndex);  
:これは、透明な緑の色を作るためである

$png24 = imagecreatetruecolor($size[0], $size[1]); 
$transparentIndex = imagecolorallocate($png24, 0x66, 0xff, 0x66); 
imagefill($png24, 0, 0, $transparentIndex); 

:新しいPNG、それは緑の色(画像中に存在していない)と背景の塗りつぶし

それから私は、PNG-24にPNG8をコピーします。

imagecopy($png24, $png8, 0, 0, 0, 0, $size[0], $size[1]); 

ので、ここで問題です:オリジナルのPNG-8がよさそうだが、それは、元の画像の中に形状を囲む緑の枠線を持っています。本当に説明するのは難しいです。緑色の背景の一部が残りのPNGに残っているようです。

私は何ができますか?事前に

おかげ

よろしく、

フェルナンド

答えて

1

私は前にPNG透明性といくつかの問題を抱えていたし、このパターンでそれらを解決することができた:私は思う

// allocate original image to copy stuff to 
$img = imagecreatetruecolor(200, 100); 

// create second image 
$bg = imagecreatefrompng('bg.png'); 

// copy image onto it using imagecopyresampled 
imagecopyresampled($img, $bg, 0, 0, 0, 0, 200, 100, 200, 100); 
imagedestroy($bg); 

// create third image 
// do same routine 
$fg = imagecreatefrompng('fg.png'); 
imagecopyresampled($img, $fg, 50, 50, 0, 0, 50, 50, 50, 50); 
imagedestroy($fg); 

// output image 
imagepng($img); 
imagedestroy($img); 

私とあなたの間の唯一の違いはimagecopy()imagecopyresampled()です。私はかなり前のことでしたが、それに問題があることを覚えているようです。 http://www.ipnow.org/images/1/bggrad/bg4/yes/TRANSIST.TTF/8B0000/custombrowserimage.jpg(私は空白の画像を割り当て、背景画像をコピーして、透明でオーバーレイをコピーします)

+0

私はあなたのコードに続く両方の画像を組み合わせることができました。私が今持っている問題は、それらの画像の1つに影があることです。さて、私はimagecopyまたはimagecopyresampledを使用すると、この影(グレー劣化)が背景に設定された透明な色iと組み合わされているように見えますが、最終的な画像はほぼ完璧ですが、前に設定した背景の透明色、緑。 私はこれを得た後、代わりに透明なPNGを使用しようとしましたが、これらのピクセルは再び問題になります。それは、画像に問題があるように私には聞こえるが、プログラミングには関係しない。 –

関連する問題