2016-10-21 144 views
1

我目前正在從base64 png創建一個圖像,然後合併另一個PNG。我的代碼如下,但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

您指定copyMerge()爲100個;這不是真的合併,如果圖像大小相等,它只是複製。您應該只看到frame1中的圖像。

如果您依賴的是Alpha通道,請使用例如pnginfo實用程序來驗證這兩個圖像都具有有效的alpha分量。

+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); 
} 

希望這可以幫助別人!