0

我正在使用以下代码将画布图像保存到 .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!")
            }
        }
    });
});

[保存.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 调用,以便我可以使用它来填充隐藏的输入字段(然后我可以将其与客户订单一起保存)。任何人都可以帮忙吗?

谢谢。

4

2 回答 2

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 //<--------
             }
         }
     });
});

编辑:(然后我可以将其与客户订单一起保存)

更好的做法是将文件名存储在服务器端的会话变量中。这可以防止客户端表单更改文件名(即使它在隐藏字段中)

于 2013-08-24T17:13:34.567 回答
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
        }
    }
});

这应该为你做。

于 2013-08-25T09:48:04.323 回答