Ответ 1
Вы можете использовать canvas.toDataUrl для получения строки с кодировкой base64, которую вы можете разместить в качестве параметра script на своем сервере, который будет считывать его и хранить в виде файла изображения.
Вот сокращенная версия фактической реализации этого подхода:
<script>
function saveImage(){
var xmlhttp;
xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
xmlhttp.onreadystatechange=function(){
if (xmlhttp.readyState==4){
if(xmlhttp.status==200){
//handle success
}
}
}
xmlhttp.open("POST",baseURL,true);
var oldCanvas = under.toDataURL("image/png");
var params=oldCanvas;
xmlhttp.setRequestHeader("Content-type", "application/upload");
xmlhttp.setRequestHeader("Content-length", params.length);
xmlhttp.setRequestHeader("Connection", "close");
xmlhttp.send(params);
}
</script>
и вот пример PHP script, который принимает строку base64, преобразует в .png, дает ему произвольное имя файла и сохраняет:
<?php
if((isset($GLOBALS["HTTP_RAW_POST_DATA"]))){
//some validation is necessary, this is just a proof of concept
if(isset($GLOBALS["HTTP_RAW_POST_DATA"])){
$params=explode('&',$GLOBALS["HTTP_RAW_POST_DATA"]);
$imgsrc=str_replace(' ','+',$params[0]);
$im = imagecreatefrompng($imgsrc);
}
if($im){
$background = imagecolorallocatealpha($im, 255,255,255,127);
imagecolortransparent($im, $background);
//random file name
$m = rand(10e16, 10e24);
$filename=base_convert($m, 10, 36);
//save image
imagepng($im, 'images/'.$filename.'.png');
imagedestroy($im);
$size = getimagesize('images/'.$filename.'.png');
$iH=$size[1];
$iW=$size[0];
echo "{\"filename\":\"".$filename."\",\"width\":\"".$iW."\",\"height\":\"".$iH."\"}";
}
}
?>