2017-02-12 9 views
0

GDの動的テキストデータから画像を作成し、上部の隅にロゴを入れようとしています。渡されたデータに基づいて画像の背景色が変更されるので、ロゴをアルファチャンネルのない画像として保存することはできません。透明なpngをgd phpに読み込みますが、背景が透明にならないようにしてください。

imagefill()を使用してイメージを作成し、それを動的背景色で塗りつぶし、imagettftext()を使用してテキストを追加してからロゴを挿入します。イメージなしでイメージにロゴを入れる際に問題があります。背景色を「透明」に保ちます。ですから、私はそれの後ろにimagefill()で設定された動的背景色を持たせたいと思います。しかし、それは読み込まれた透明度の背景を保持しているので、この部分を透明として書き出します。私はそれがロードされた後、ロゴの(目的の画像の背景を設定するのと同じrgbを使用して)imagefill()を呼び出してみましたが、これは何もしませんでした。以下は

は私のコードです:

$background = $_GET['background']; 
$data1 = $_GET['data1']; 
$data2 = $_GET['data2']; 
$r = $_GET['r']; 
$g = $_GET['g']; 
$b = $_GET['b']; 

$png_image = imagecreate(400, 200); 
$gd_text_color = imagecolorallocate($png_image, 255, 255, 255); 
$gd_background_color = imagecolorallocate($png_image, $r, $g, $b); 
imagefill($png_image, 0, 0, $gd_background); 

$text1 = "test test $data1"; 
$text2 = "test test again $data2"; 
$font = 'Lato-regular.ttf'; 
imagettftext($png_image, 18, 0, 20, 20, $gd_text_color, $font, $text1); 
imagettftext($png_image, 18, 0, 20, 50, $gd_text_color, $font, $text2); 

//trying to get this logo and place it in the corner. 
$logo = imagecreatefrompng("images/logo.png"); 
imagecopy($png_image, $logo, 10, 10, 0, 0, 100, 30); 

header('Content-type: image/png'); 
imagepng($png_image, $filename); 
imagedestroy($png_image); 

は、ここでそのコードの出力です:http://i.imgur.com/n25h9Js.png そしてここでは、アルファチャンネルを受け入れるプログラムにロードされたときの画像は次のようになります。http://i.imgur.com/3OIRupN.png

は誰もい私は何をしようとしているのかを知っていますか?

お時間をいただきありがとうございます。試してみて、私はここに別の画像だ欲しいものを説明すること

EDIT

。一番上のイメージは現在入手しているもので、一番下のイメージは私が望むものです。私は、異なる色の背景の上に座ることができる透明なPNGでロードしようとしています。しかし、私はそれがここにどのように表示されているか(透明な背景)、または黒い背景として(なぜなら、私はアルファチャンネルが見られていないと思うので)それを得ます。お役に立てれば。画像:Error on top, mocked up version of how I want it below.

編集以下のコメントを1として2

、私は()と今では正常に動作しますimagecreatetruecolorにimagecreate()からそれを変更しました!誰かが時間を持っているなら、これがなぜ解決されたのか説明が大好きですが、今のところコメントしたり、この質問を見てあなたの時間を過ごしたすべての人に感謝します。

+2

実際に何をしようとしているのかわかりません。最終画像に透明性を持たせたいかどうかはわかりません。しかし、 'imagecreate()'はパレタイズされたイメージを作成する際に問題を引き起こしている可能性があります。おそらく 'imagecreatetruecolour()'が必要です。 –

+1

imagecreatetruecolor(英国版ではありません!) –

+0

透明度のない画像を作成しようとしています。私は説明が混乱していると思いますので、もう一度やります:最終的な画像の背景色は入力データに依存するので、最終的な画像と同じ背景色の「ロゴ」画像を作成することはできません。だから私はそれを透過性を持つPNGとして読み込んでいます。私は左上に「置く」ことを望んでいるので、ダイナミックな背景色の上に座っていますが、GDはイメージのその部分を透明にしていますが、私はそれを望ましくありません。メインのポストには、現在持っているものと私が望むものを示すスクリーンショットが含まれています。 – poncho

答えて

0

あなたのimagecreate()は、本当の色の画像の柔軟性や幅広い表現がないパレタイズされた画像を作成するため、問題を引き起こしている可能性があります。

imagecreatetruecolor()と交換することをお勧めします。

関連する問題