如何用PHP解码图像

时间:2015-02-21 03:20:33

标签: javascript php jquery ajax jpeg

我正在尝试使用带有jquery的AJAX从我的页面发送jpg图像到我的服务器,该服务器使用php脚本处理图像。我发送的图片如下:

    function post_snapshot() {
      var pic = document.getElementById('snapshot').src;
      if(pic){
        var jpic = JSON.stringify(pic);
        $.ajax({
          url:"picture",
          data: jpic,
          type: "PUT",
          dataType: "json",
          success: function(json){
            console.log(json);
          },
          error: function(xhr, status, errorThrown){
            console.log("Error: " + errorThrown);
            console.log("Status " + status);
            console.dir(xhr);
          }
        });
      }
    }

然后我用我的php脚本检索图像:

private function create_picture($name){
    $putdata = fopen("php://input", "r"); // read pic into string
    $picstr = "";
    while ($data = fread($putdata, 1024))
        $picstr = $picstr . $data;
    fclose($putdata);

    $picstr = base64_decode($picstr); // decode picture
    if(!picstr){
        echo json_encode(array("status" => "failed to decode image"));
        return;
    }
    $source = imagecreatefromstring($picstr);
    if(!$source){
        echo json_encode(array("status" => "failed to create image"));
        return;
    } else {
        if(!imagejpeg($source,"images/img" . date_timestamp_get(date_create()) . ".jpeg")){
            echo json_encode(array("status" => "failed to save image"));
            return;
        } else {
            echo json_encode(array("status" => "success"));
        }
    } 

目前我收到“未能创建图像”消息,这意味着imagecreatefromstring()失败。

我怀疑它为什么不起作用是因为我在我的javascript中使用JSON.stringify,这可能与php的解码功能不太匹配。它也可能在于我如何使用jquery的AJAX调用。

我在php中打印出解码后的字符串只是为了看看它的样子: data:image/jpeg;base64,/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDAAMCAgMCAgDh[...]

有没有人看到任何明显的错误?

2 个答案:

答案 0 :(得分:0)

您应该使用json_decode();

// read pic into string
    $putdata = json_decode(fopen("php://input", "r"), true); 

答案 1 :(得分:0)

我无法弄清楚为什么我的原始方法不起作用,但是我通过不同的方法让它工作。

我正在使用一个名为Webcam.js的小库,我在阅读文档时发现它有内置的上传功能。我使用上传功能并在php端获取发布的文件,一切正常!

move_uploaded_file($_FILES['webcam']['tmp_name'], "images/img".date_timestamp_get(date_create()) . ".jpg");