2016-02-23 94 views
0

我有這個PHP腳本(如下): 我使用POST獲取base64字符串,比使用imagecreatefromstring函數,然後嘗試添加水印並保存它。但上傳後服務器上的文件爲空。我做錯了什麼?添加水印到圖像(Base64)並將其轉換爲

<?php 
    if($_SERVER['REQUEST_METHOD'] == "POST") { 
    define('UPLOAD_DIR', 'img/'); 

    $base64 = base64_decode(preg_replace('#^data:image/[^;]+;base64,#', '', $_POST['string'])); 

    $stamp = imagecreatefrompng('img/wm.png'); 
    $im = imagecreatefromstring($base64); 


    $marge_right = 10; 
    $marge_bottom = 10; 
    $sx = imagesx($stamp); 
    $sy = imagesy($stamp); 

    imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50); 


    $file = UPLOAD_DIR . uniqid() . '.png'; 

    imagepng($im, $file, 100); 


    echo 'ok'; 
    } else { 
    echo "error"; 
    } 


?> 

任何人都可以幫我解決這個問題嗎?

+1

http://php.net/gd –

+0

imagepng()接受它可以是第三個$質量參數從0到9(全部無損,9是最大壓縮)。 100不是一個選項。不知道這是否是錯誤。 –

+0

哦,當然!你是對的。改變了質量,它工作正常!謝謝!! –

回答

1

以之前添加此代碼來檢查,如果你的形象被創造

$im = imagecreatefromstring($base64); 
if ($im !== false) { 
    header('Content-Type: image/png'); 
    $marge_right = 10; 
    $marge_bottom = 10; 
    $sx = imagesx($stamp); 
    $sy = imagesy($stamp); 

    imagecopymerge($im, $stamp, imagesx($im) - $sx - $marge_right, imagesy($im) - $sy - $marge_bottom, 0, 0, imagesx($stamp), imagesy($stamp), 50); 


    $file = UPLOAD_DIR . uniqid() . '.png'; 

    imagepng($im, $file, 100); 
    imagedestroy($im); 
} 
else { 
    echo 'An error occurred.'; 
} 

//

+0

圖像已創建,但也是空的 –