我有一个使用fabric.js构建的绘图应用程序,并且需要保存图像服务器端。执行此操作的代码非常简单,我有一个表单,我使用以下javascript推送画布图像:
jQuery(".send").click(function(){
canvas.deactivateAll();
if (!fabric.Canvas.supports('toDataURL')) {
alert('This browser doesn\'t provide means to serialize canvas to an image');
} else {
var imageUrl = canvas.toDataURL('image/png');
//Lets update our form and post
jQuery("#_image").val(imageUrl);
jQuery("#_imageForm").submit();
}
});
在服务器端,代码然后查找已发布的b64数据并将其推送到文件:
if (array_key_exists('_image', $_POST)) {
$source = $_POST['_image'];
$urlUploadImages = "/images/";
$nameImage = uniqid("image", true) . ".png";
$saveFile = $_SERVER['DOCUMENT_ROOT'] . $urlUploadImages . $nameImage;
$image = str_replace('data:image/png;base64,', '', $source);
$image = str_replace(' ', '+', $image);
file_put_contents($saveFile, base64_decode($image));
}
这大部分都有效。 png已创建并具有内容,但它被截断约2/3。创建的图像为512px x 512px,但较低的1/3只是透明的。
查看原始编码数据,我可以看到长度看起来不同,内容中似乎也有一些二进制文件。在以这种方式提交时,我还有什么办法可以保护内容吗?