2016-10-21 9 views
1

現在、base64 pngから画像を作成していて、別のpngをマージしています。私のコードは次のように見えますが、$ fileNameにの出力はまだ元の画像であっても、単に空temp.pngです:PHP GD画像がマージされていません

session_start(); 

$email = $_SESSION['email']; 
$img = $_POST['img']; 
$img = str_replace('data:image/png;base64,', '', $img); 
$img = str_replace(' ', '+', $img); 
$fileData = base64_decode($img); 
$fileName = "./gallery/" . bin2hex(openssl_random_pseudo_bytes(16)) . ".png"; 
file_put_contents($fileName, $fileData); 

//Merge Two Images 
header ("Content-type: image/png"); 
$background = imagecreatefrompng($fileName); 
$pkt = imagecreatefrompng("./frames/frame1.png"); 
$insert_x = imagesx($pkt); 
$insert_y = imagesy($pkt); 
imagecopymerge($background,$pkt,0,0,0,0,$insert_x,$insert_y,100); 
imagepng($background,"temp.png",100); 
+0

多分あなたのpngトランスパランスに関するものです。 [この質問]を確認してください(http://stackoverflow.com/questions/5529306/i-cant-use-transparent-background-with-imagecopymerge) – cwps

答えて

0

あなたは100の割合でcopyMerge()を指定しています。それは実際にマージではない、イメージのサイズが等しい場合、それは単なるコピーです。画像はframe1にのみ表示されます。

アルファチャンネルに頼っている場合は、pnginfoユーティリティを使用して、両方の画像に有効なアルファ成分が含まれていることを確認します。

+0

最初の画像ではなく完全に空です。私はあまりにもあらかじめ作成された画像を使ってみましたが、両方がエディタのリンク上に置かれても存在しますが、まだ空です。 – NodziGames

+0

イメージをどこかに置くことはできますか?私はあなたのコードを今日後で試すことができます。 – LSerni

+0

ご協力いただきありがとうございます。ちょうどそれを理解し、それを答えとして書きました。 – NodziGames

0

これはマージではないことを指摘してくれたIserniに感謝します。私は次のように少し機能を書いた:

function imagecopymerge_alpha($dst_im, $src_im, $dst_x, $dst_y, $src_x, $src_y, $src_w, $src_h, $pct) 
{ 
    $cut = imagecreatetruecolor($src_w, $src_h); 

    imagecopy($cut, $dst_im, 0, 0, $dst_x, $dst_y, $src_w, $src_h); 
    imagecopy($cut, $src_im, 0, 0, $src_x, $src_y, $src_w, $src_h); 
    imagecopymerge($dst_im, $cut, $dst_x, $dst_y, 0, 0, $src_w, $src_h, $pct); 
} 

希望これは誰かを助ける!

関連する問題