我使用以下代码将画布图像保存为.png文件:
jQuery的:
$(".save").click(function () {
var canvas = $("#standard_canvas");
var src = canvas[0].toDataURL("image/png");
$.ajax({
url: 'save.php',
type: 'POST',
data: {
data: src
},
complete: function (data, status) {
if (status == 'success') {
alert("image saved!")
}
}
});
});
[save.php]
<?php
$based64Image = substr($_POST['data'], strpos($_POST['data'], ',') + 1);
$image = imagecreatefromstring(base64_decode($based64Image));
imagealphablending($image, false);
imagesavealpha($image, true);
$fileName = '';
if ($image != false)
{
$fileName = 'image/designs/' . time() . '.png';
if (!imagepng($image, $fileName))
{
// fail;
}
}
else
{
// fail;
}
?>
我想要做的是将新文件名传递回我的ajax调用,以便我可以使用它来填充隐藏的输入字段(然后我可以将其与客户订单一起保存)。有人可以帮忙吗?
感谢。
答案 0 :(得分:1)
在你的php文件中,你可以创建一个包含文件名的json响应
$data['filename'] = $fileName;
echo json_encode($data);
在你的ajax回复中读出来
$(".save").click(function () {
var canvas = $("#standard_canvas");
var src = canvas[0].toDataURL("image/png");
$.ajax({
url: 'save.php',
type: 'POST',
dataType: 'json',
data: {
data: src
},
success: function (data, status) {
if (status == 'success') {
alert("image saved!")
var filename = data.filename //<--------
}
}
});
});
编辑: (然后我可以随客户订单一起保存)
更好的做法是将文件名存储在服务器端的会话变量中。 这可以防止客户端表单更改文件名(即使它在隐藏字段中)
答案 1 :(得分:1)
只需在图片上传成功部分添加以下内容:
echo $filename
然后在你的ajax电话中,
$.ajax({
url: 'save.php',
type: 'POST',
data: {
data: src
},
complete: function (data, status) {
if (status == 'success') {
alert("image saved!");
alert("Filename : "+data);
// Do anything with the file name here
}
}
});
这应该为你做。