我正在从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
}
})
答案 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;
?>