php canvas 到服务器上的图像
php canvas to image on server
我想从客户端的 canvas 中获取图像数据,并在我的服务器上将其保存为 .png。
这是我客户端上的代码,它从 canvas 获取图像数据并将其发送到 saveImage.php:
function render()
{
var imageData = ctx.canvas.toDataURL("image/png");
var postData = "imageData="+imageData;
var ajax = new XMLHttpRequest();
ajax.open("POST","saveImage.php",true);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.onreadystatechange=function()
{
console.log(ajax.responseText);
}
ajax.send(postData);
}
这就是 saveImage.php 的样子:
<?php
if(isset($_POST["imageData"]))
{
$imageEncoded = $_POST["imageData"];
$imageDataExploded = explode(',', $imageEncoded);
$imageDecoded = base64_decode($imageDataExploded[1]);
$filename = time()."image".mt_rand();
$file = fopen("./".$filename.".png","wb");
fwrite($file, $imageDecoded);
fclose($file);
echo $filename;
exit();
}
?>
代码实际上工作正常,我的问题是创建的图像在某些方面有问题。
当我尝试打开一个时,windows 说它无法显示图像,因为它不支持该格式?即使它是 .png?
我做错了什么?
您检查过实际通过 HTTP 发送的内容了吗? $imageEncoded 可能以 data:image/png;base64,xxxxx
开头
去掉 base64 后面的逗号:
您应该先使用 encodeURIComponent()
对数据进行编码,然后再将其包含在 POST 数据中。
您还应该使用 jQuery 之类的框架来解决浏览器差异问题。我保证代码在所有浏览器中都不会相同。
在 PHP 上,尝试查看 file_put_contents()
以写入数据。输入更快!
我想从客户端的 canvas 中获取图像数据,并在我的服务器上将其保存为 .png。
这是我客户端上的代码,它从 canvas 获取图像数据并将其发送到 saveImage.php:
function render()
{
var imageData = ctx.canvas.toDataURL("image/png");
var postData = "imageData="+imageData;
var ajax = new XMLHttpRequest();
ajax.open("POST","saveImage.php",true);
ajax.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
ajax.onreadystatechange=function()
{
console.log(ajax.responseText);
}
ajax.send(postData);
}
这就是 saveImage.php 的样子:
<?php
if(isset($_POST["imageData"]))
{
$imageEncoded = $_POST["imageData"];
$imageDataExploded = explode(',', $imageEncoded);
$imageDecoded = base64_decode($imageDataExploded[1]);
$filename = time()."image".mt_rand();
$file = fopen("./".$filename.".png","wb");
fwrite($file, $imageDecoded);
fclose($file);
echo $filename;
exit();
}
?>
代码实际上工作正常,我的问题是创建的图像在某些方面有问题。 当我尝试打开一个时,windows 说它无法显示图像,因为它不支持该格式?即使它是 .png?
我做错了什么?
您检查过实际通过 HTTP 发送的内容了吗? $imageEncoded 可能以 data:image/png;base64,xxxxx
开头去掉 base64 后面的逗号:
您应该先使用 encodeURIComponent()
对数据进行编码,然后再将其包含在 POST 数据中。
您还应该使用 jQuery 之类的框架来解决浏览器差异问题。我保证代码在所有浏览器中都不会相同。
在 PHP 上,尝试查看 file_put_contents()
以写入数据。输入更快!