使用PHP将画布保存到服务器上的文件
我对PHP不是很有经验,但我设法拼凑了几个例子来实现这一点。我只想将画布元素的图像保存到服务器上的一个文件中。现在创建了一个0字节的PNG,所以我就快到了 有人建议我从另一个线程尝试另一个解决方案,但不幸的是,它给了我同样的错误(一个0字节的png文件)。以下是完整的index.php代码:使用PHP将画布保存到服务器上的文件,php,ajax,canvas,Php,Ajax,Canvas,我对PHP不是很有经验,但我设法拼凑了几个例子来实现这一点。我只想将画布元素的图像保存到服务器上的一个文件中。现在创建了一个0字节的PNG,所以我就快到了 有人建议我从另一个线程尝试另一个解决方案,但不幸的是,它给了我同样的错误(一个0字节的png文件)。以下是完整的index.php代码: <!doctype html> <html> <head> <meta charset="utf-8"> <me
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<meta name="description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Fingerprint Test</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js" ></script>
</head>
<body>
<canvas id="myCanvas" width="578" height="200"></canvas>
<form name="form1">
<input type="text" id="my_hidden">
</form>
<script>
var canvas = document.getElementById('myCanvas');
var context = canvas.getContext('2d');
// begin custom shape
context.font = "30px Arial";
context.fillText("Hello World",10,50);
</script>
<button onclick="makePrint()">Click me</button>
<script>
function makePrint() {
document.getElementById('my_hidden').value = canvas.toDataURL('image/png');
document.forms["form1"].submit();
}
</script>
<?php
$upload_dir = "images/"; //implement this function yourself
$img = $_POST['my_hidden'];
$img = str_replace('data:image/png;base64,', '', $img);
$img = str_replace(' ', '+', $img);
$data = base64_decode($img);
$file = $upload_dir."image_name.png";
$success = file_put_contents($file, $data);
header('Location: '.$_POST['return_url']);
?>
</body>
</html>
指纹测试
var canvas=document.getElementById('myCanvas');
var context=canvas.getContext('2d');
//开始自定义形状
context.font=“30px Arial”;
上下文。fillText(“Hello World”,10,50);
点击我
函数makePrint(){
document.getElementById('my_hidden')。value=canvas.toDataURL('image/png');
document.forms[“form1”].submit();
}
注意,除了ID之外,我还尝试将输入表单命名为“my_hidden”
编辑:使用这种特殊的方法,我的问题通过两个改变得到了解决。首先,“my_hidden”必须是输入字段的名称和ID。其次,表单元素上必须有一个method='post'。默认情况下,表单将执行HTTP GET,并且您没有在
上指定method属性。因为它是一个GET$\u POST['my\u hidden']
将是未定义的
试试这个:
<form name="form1" method="post">
<input type="text" name="my_hidden">
</form>
有关默认表单方法的更多信息,请参见此处:此处无法解析该方法的可能重复项。显然,所选答案的PHP代码不起作用。有多个答案,用户确认其他建议的答案对他们有效。你试过那些吗?被接受的答案并不总是意味着它是未来参考的最佳答案。是的。作者实际上表示,每种解决方案都不适合他/她。在注释右侧。尝试在
元素上设置method='post'
。您正在尝试读取$\u POST
,但默认情况下,表单将执行HTTP GET: