1

以下代码我试图将画布保存在我的机器上。在文件夹中创建了图像文件,但它是 0kb 。

单击下载按钮时,我在文本中设置值,在下一个 php 页面上,我正在读取值$_POST['img_name'];

jQuery ::

$("#Download").click(function() {
    console.log('Download clicked');
    //alert('Download clicked');
    var myval = canvas.toDataURL();
    $('#img_txt').val(myval);
});

php代码::

<?php
$myval = $_POST['img_name'];
echo "string is ".$myval; 
?>

<?php
$data = base64_decode($_POST['img_name']);

/* Name the file anything you want */
$filename = 'my_image.png';

/* Remove 1st line of base64 string */ 
/* Note: replace '$base64' with your own variable */
$img = str_replace('data:image/png;base64,', '', $data);


/* Replace spaces */
$img = str_replace(' ', '+', $img);

/* Decode string */
$data = base64_decode($img);

/* Full path to upload directory with at the end the filename */
$file = 'D:/upload/'.$filename;

/* Save, make sure the directory is writeable! */
file_put_contents($file, $data);
?>

我检查了 $_POST['img_name'] 我得到的是 base64 字符串吗?我的代码有什么问题?

4

4 回答 4

5

替换upload.php文件

if ( isset($_POST["image"]) && !empty($_POST["image"]) ) {

// get the image data
$data = $_POST['image'];

// remove the prefix
$uri =  substr($data,strpos($data,",")+1);

// create a filename for the new image
$file = md5(uniqid()) . '.png';

// decode the image data and save it to file
file_put_contents($file, base64_decode($uri));

// return the filename
echo $file;

}

于 2014-02-27T13:32:24.000 回答
4

您的 jQuery 没有向您的 .php 发送任何内容

尝试这个:

// convert the canvas to base64 data

var dataURL=canvas.toDataURL();

// call upload.php and post the data

$.ajax({
  type: "POST",
  url: "upload.php",
  data: {image: dataURL}
}).done(function( respond ) {
 console.log("Saved filename: "+respond);
});

您的上传文件应在解码前删除数据类型前缀。

试试这个upload.php:

<?php 
if ( isset($_POST["image"]) && !empty($_POST["image"]) ) { 

    // get the image data
    $data = $_POST['image'];

    // remove the prefix
    $uri =  substr($data,strpos($data,",") 1);

    // create a filename for the new image
    $file = md5(uniqid()) . '.png';

    // decode the image data and save it to file
    file_put_contents($file, base64_decode($uri));

    // return the filename
    echo $file;

}

另外,请确保您的 php 服务器已配置:

  • 分配上传目录
  • 给上传目录写权限
于 2013-09-04T17:21:54.350 回答
1

我使用以下代码将base64保存为图像,

<?php
if (isset($_POST["image"]) && !empty($_POST["image"])) {

    // get the image data
    $data = $_POST['image'];

    list($type, $data) = explode(';', $data);
    list(, $data) = explode(',', $data);
    $data = base64_decode($data);

    //Image name
    //  $filename ="image". md5(uniqid()) . '.png';
    $filename = "Post_Card.png";

    $file = '../ReportCard/' . $filename;

    // decode the image data and save it to file
    file_put_contents($file, $data);
    echo $file;
}
?>

如果需要,我们可以使用以下代码为文件提供随机生成的名称,

// create a filename for the new image
$file = md5(uniqid()) . '.png';
于 2014-03-13T11:26:44.740 回答
0

你确定它是png格式吗?

因为当您运行该方法时toDataURL();,默认值为您无法尝试的 PNGtoDataURL("image/jpeg");或任何其他符合您需要的格式。

您可能需要考虑将其上传到 PHP,以便可以将其保存在服务器上的目录中,比如说Pics.

于 2013-09-04T18:22:27.093 回答