如何将“另存为...”对话框中显示的文件名从.php更改为.png

时间:2012-11-01 17:00:24

标签: php png gd

我从stackoverflow中选取的一个简单的PHP脚本生成一个透明背景的PNG,在其上写入一些文本,然后直接将其输出到客户端浏览器:

$font = 25;
$string = 'My Text';
$im = @imagecreatetruecolor(300, 300);
imagesavealpha($im, true);
imagealphablending($im, false);
$white = imagecolorallocatealpha($im, 255, 255, 255, 127);
$red = imagecolorallocate($im, 255, 0, 0);
imagefill($im, 0, 0, $white);
$lime = imagecolorallocate($im, 204, 255, 51);
imagettftext($im, $font, 0, 0, 30, $red, "fonts/tt0588m_.ttf", $string);
header("Content-type: image/png");
imagepng($im);
imagedestroy($im);

范围是获取一个简单的服务,该服务根据通过URL传递给它的参数来提供图像,例如Google Charts(例如this QR code image)。

到目前为止,非常好,除非我点击上面代码生成的图像并希望保存它,浏览器不会将其识别为PNG图像,而是 PHP脚本另存为类型选择器仅限此选项),与Google Charts示例相同,其中资源明确标识为PNG文件。

如何通过浏览器实现正确的资源识别?

2 个答案:

答案 0 :(得分:10)

浏览器将使用URL中的文件名作为“另存为...”对话框中的默认值。您可以键入其他名称,或者使用建议的名称(text.php)保存文件,然后重命名。

您可以使用Content-disposition标题向浏览器“建议”文件名。这是一个例子:

header("Content-type: image/png");
header("Content-disposition: inline; filename=mytext.png");
  • inline建议浏览器尝试显示图片。将其更改为attachment,以建议浏览器显示“另存为...”或类似对话框。
  • filename=应包含您选择的文件名。

答案 1 :(得分:0)

请参阅此文章,因为IE8不受支持(未使用文件名信息)

Test Cases for HTTP Content-Disposition header field