通过php在本地保存dataURL图像

时间:2014-07-17 21:17:07

标签: javascript php download html5-canvas

我正在从dataURL字符串制作PNG图像文件(感谢The PHP manual中的示例)。我希望此代码能够打开"下载文件"浏览器中的对话框,因此用户可以在本地保存此图像,但调用函数imagepng()会将图像保存到我的服务器。我在拨打imagepng()时使用了错误的功能吗?我试图通过更改标题来触发下载,但它仍然保存到服务器。

<?php
$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
    . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
    . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
    . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';

$data = base64_decode($data);

$im = imagecreatefromstring($data);

// set the headers, to trigger a download
header('Content-Disposition: attachment; filename="image.png"');
header('Content-Type: image/png');
imagepng($im, 'test_2.png');
imagedestroy($im);
?>

另外,我通过以下JavaScript调用PHP,(不确定这是否与我得到的结果相关)

$.ajax({ 
    type: "POST", 
    url: "php/downloadimg.php",
    dataType: 'text',
    data: {
        data : finishedImage.src
    }
})

2 个答案:

答案 0 :(得分:1)

只需在没有第二个参数的情况下调用imagepng函数。如果您按照imagepng文档阅读,填写第二个参数,图像将保存为此文件名。

仅将图像资源传递给函数,并将原始图像发送给客户端。

http://php.net/manual/de/function.imagepng.php

header('Content-Disposition: attachment; filename="image.png"');
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);

如果你只使用php文件,请不要使用php close标签?>来避免泄漏的空格并弄乱你的输出流。

答案 1 :(得分:1)

值得注意的是,由于您已经使用PHP获取了图像数据,因此无需调用imagepng函数或类似的函数。您需要做的就是在设置标题后将图像数据转储到客户端,然后自行决定如何处理它。

因此,如果您不需要实际处理图像服务器端,这样的事情就会起作用:

<?php
$data = 'iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABl'
    . 'BMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDr'
    . 'EX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r'
    . '8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg==';

$data = base64_decode($data);

// set the headers, to trigger a download
header('Content-Disposition: attachment; filename="image.png"');
header('Content-Type: image/png');

echo $data;
?>