调整图像大小后强制下载链接

时间:2013-10-30 10:44:30

标签: php image image-processing

我正在研究wordpress cms。我有一个非常奇特的PHP脚本,它基本上将上传的图像调整为指定的限制,并将调整后的图像输出回访问者的浏览器,这样他就可以右键单击下载。下面给出的是脚本的相关部分,但如果需要,我将提供完整的代码。

ob_start();
imagejpeg($new, null, 100); 
echo '<img src="data:image/jpeg;base64,' . base64_encode(ob_get_clean()) . '">';
echo '<br><br>RIGHT CLICK AND SAVE IMAGE<br><br>';
imagedestroy($new);

  

Bottomline是我想强制调整大小的下载链接   图像,一旦调整完成。


努力和更新:

First update:我正按照this article on forced-download-links的建议正在审核another relevant thread on SO。但是当它说 - “首先要做的事情......我需要在PHP中定义文件的路径(作为字符串)。”问题是,因为我不想在我的服务器上保存任何图像文件,因此imagejpeg()功能的第二个参数设置为NULL。所以我无法定义文件的路径。或者我可以吗?我该怎么做呢。希望它清晰简洁。一个解决方案会很棒,如果没有,请给我一个好的起点指针。

Second update:根据下面的建议,我取得了一些进展。正如您在下面的代码中看到的,我现在能够保存图像,但我仍然无法将输出图像作为下载提示回显出来。请建议更正。

$filename = uniqid();
$file = 'uploads/'.$filename.'.jpeg';   
$final_image = imagejpeg($new, $file, 100);
$size = filesize($file); 

header("Content-Type: application/force-download; name=\"" . basename($file). "\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $size"); 
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\""); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile($file); 
unlink($file);

Third Update:发现我可以使用相对路径,所以我不需要加载wordpress load.php,相应地更改了代码。问题仍然存在。

第四次更新:按照this thread中的解决方案中的建议尝试了此代码。同样的结果,打印出乱码而不是提供下载链接。这令人沮丧,我必须越来越近:)。

最终更新:有javascript解析脚本的输出,所以我得到了所有的胡言乱语。我删除它现在一切都好。

1 个答案:

答案 0 :(得分:1)

我认为一个解决方案是在强制下载之后使用imagejpeg()将图像保存在服务器中,并删除文件,你会得到类似这样的文件:

$img = imagejpeg($resource, $file);
$size = filesize($file); 
header("Content-Type: application/force-download; name=\"" . basename($file). "\""); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: $size"); 
header("Content-Disposition: attachment; filename=\"" . basename($file) . "\""); 
header("Expires: 0"); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
readfile($file); 
unlink($file); //to delete the file that you generated

其中$ file是删除该文件的unlink函数的文件路径。

你也可以像这样直接下载:

    header("Content-Disposition: attachment; filename=\"titleimg\";");
    header('Content-Type: image/jpeg');
    imagejpeg($im);
    imagedestroy($im);

此致