您好我需要将表单数据与画布图像一起提交。然后使用该表单数据命名服务器上保存的文件。我刚刚掌握PHP,所以任何帮助都会很棒。
这是我的工作示例,它将相同的命名文件保存到服务器。
HTML
<form action="name.php" method="post">
Name: <input type="text" name="fname">
Age: <input type="text" name="age">
<input type="button" onclick="saveImage();formSubmit();" value="Submit form">
</form>
JS
function saveImage(){
var xmlhttp;
xmlhttp=((window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP"));
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//do something with the response
}
}
xmlhttp.open("POST","upload.php",true);
var oldCanvas = document.getElementById('colors_sketch').toDataURL("image/png");
var img = new Image();
img.src = oldCanvas;
xmlhttp.setRequestHeader("Content-type", "application/upload")
xmlhttp.send(oldCanvas);
}
PHP
$data = file_get_contents('php://input');
$canvasImg = imagecreatefrompng($data);
$width = imagesx($canvasImg);
$height = imagesy($canvasImg);
$outImg = imagecreatetruecolor($width, $height);
$color = imagecolorallocatealpha($outImg, 255, 255, 255, 127);
imagefill($outImg, 0, 0, $color);
imagecopy($outImg, $canvasImg, 0, 0, 0, 0, $width, $height);
imagepng($outImg, 'test.png');
答案 0 :(得分:2)
以下是将表单和图片发送到upload.php
的步骤首先创建一个要发送的数据包,其中包括序列化的图像和表单。在这里,我使用jquery来序列化您的表单(或者在没有jquery的情况下自行序列化)。
// serialize and concatenate both form and canvas image
var package=$("form").serialize() + "&imageDataURL="+canvas.toDataURL();
然后用AJAX将它发送到PHP服务器:
// ajax it
postImagePlusForm();
function postImagePlusForm(){
$.ajax({
type: "POST",
url: "upload.php",
data: package,
success: function(value) {
// ...we have success!
}
});
}
最后抓住它并在php中处理它:
<?php
if ( isset($_POST["imageDataURL"]) && !empty($_POST["imageDataURL"]) ) {
// create $dataURL
$dataURL = $_POST["imageDataURL"];
// Extract base64 data
// we have an unneeded header, zap it
$parts = explode(',', $dataURL);
$data = $parts[1];
// Decode
$data = base64_decode($data);
// Save
$fp = fopen('newImage.png', 'w');
fwrite($fp, $data);
fclose($fp);
}
if ( isset($_POST["formData"]) && !empty($_POST["formData"]) ) {
$formData = $_POST['formData'];
foreach ($formValue as $x) {
// do whatever you need to do with each form value ($x)
}
}
答案 1 :(得分:0)
这个问题在SO上被多次询问。
我在这里已经回答了同样的问题: https://stackoverflow.com/a/13198699/1090562
简而言之,这可以通过这个来实现,更多细节 - 阅读链接
$.ajax({
type: "POST",
url: "script.php",
data: {
imgBase64: canvas.toDataURL();
}
}).done(function(o) {
console.log('saved');
});