0

我正在开发一个 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);

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


努力和更新:

First update:我目前正在阅读这篇关于强制下载链接的文章,正如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,相应地更改了代码。问题仍然存在。

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

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

4

1 回答 1

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

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

您也可以像这样直接强制下载:

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

问候,

于 2013-10-30T10:56:25.197 回答