2016-02-23 11 views
0

У меня есть этот PHP-скрипт (ниже): Я получаю строку base64 с помощью POST, чем использовать функцию 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() принимает 3-й $ качества аргумент, который может быть от 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

изображение было создано, но также пустое –