图像无法正常保存

时间:2013-04-19 15:16:15

标签: php image text

这是我正在制作的项目的链接:http://1-to-n.com/ik/

输入任何内容都很简单,按提交,然后进入下一页并在图片上显示文字。一切都很好,但当我右键单击图片并尝试保存它时,扩展名很像“picture.php.jpe”。

图片生成页面代码如下

<?php
//Set the Content Type
header('Content-type: image/jpeg');

// Create Image From Existing File
$jpg_image = imagecreatefromjpeg('vote.jpg');

// Allocate A Color For The Text
$white = imagecolorallocate($jpg_image, 47, 45, 46);

// Set Path to Font File
$font_path = 'MISTRAL.TTF';

// Set Text to Be Printed On Image
$text = $_POST['name'];

// Print Text On Image
imagettftext($jpg_image, 75, 0, 500, 130, $white, $font_path, $text);

// Send Image to Browser
imagejpeg($jpg_image);

// Clear Memory
imagedestroy($jpg_image);
?> 

1 个答案:

答案 0 :(得分:4)

此处的解决方案是Content-Disposition,但您想要的完全取决于您希望UI如何工作。

您想要设置:

header('Content-Disposition: %token%; filename="%name_of_file%"');

其中:

  • %name_of_file%是您希望用户看到的文件的名称

  • %token%attachmentinline中的一个。如果将其设置为attachment,将立即提示用户下载文件,浏览器将不会像当前那样显示图像。如果您设置inline,则会在浏览器窗格中向用户显示当前的图像,并且他们需要右键单击 - &gt;另存为以保存图像。

在确定要使用哪个标头之前,您需要决定UI的工作方式。

为清楚起见,这里有几个具体的例子:

// Prompt the user to save the file immediately
header('Content-Disposition: attachment; filename="file.jpg"');

// OR

// Display the image to the user and ask them to manually save it
header('Content-Disposition: inline; filename="file.jpg"');

值得注意的是,IIRC,旧版本的IE与inline存在问题,因为他们没有注意到建议的文件名。但是,可以通过向name=""添加Content-Type:令牌来解决此问题。这是标准违规,但也相当无害。