Здравствуйте. Понадобилось сделать сохранение промежуточных результатов из нарисованного канваса на сервере.
Одно «но» на сохраненные картинки нужно ставить вотермарк.
Делаю следующим образом:
var canvas = document.getElementById('canvas'),
dataURL = canvas.toDataURL("image/jpeg");
//отправляю POST-запрос с dataURL
На серверной стороне:
$dataURL = base64_decode(str_replace('data:image/jpeg;base64,', '', $_POST['dataURL']));
$image = imagecreatefromstring($dataURL);
ob_start();
//где-нибудь тут ставлю вотермарк
imagejpeg($image);
$filename = 'test.jpeg';
$binaryImage = ob_get_clean();
$file = fopen ($filename, 'w');
fwrite($file, $binaryImage);
И получаю черный квадрат. При этом, если я делаю что-то вроде
$dataURL = file_get_contents('1.jpeg');
$image = imagecreatefromstring($dataURL);
ob_start();
//где-нибудь тут ставлю вотермарк
imagejpeg($image);
$filename = 'test.jpeg';
$binaryImage = ob_get_clean();
$file = fopen ($filename, 'w');
fwrite($file, $binaryImage);
То всё в порядке. Из-за чего возникают сомнения в, как бы правильнее выразиться, правильном формате base64-строки на клиенте. Ощущение, что канвас выдает что-то, непонятное для php-шной imagecreatefromstring();
Не сталкивался никто?
Спасибо.