我正在尝试动态重命名jpeg图像文件,因为它显示给用户。
我有一个文件image_generate.php,代码如下:
$file = $_GET['file'];
$imagepath = "path/to/image.jpg";
$image = imagecreatefromjpeg($imagepath);
header('Content-Type: image/jpeg');
$filename = "[site.com]_some_image_name_here";
header('Content-Disposition: attachment; filename="' . $filename . '.jpg"');
imagejpeg($image, NULL, 100);
imagedestroy($image); // Free up memory
它由html图像标记调用,如:
<img src="image_generate.php?file=imagenamehere" />
到目前为止,输出结果如下:
如何修复第二部分?即使用户点击“将图像另存为”或“保存图像”,我也想修改图像的文件名。
我尝试将代码更改为:
...
$rename = $filename . ".jpg";
imagejpeg($image, $rename, 100);
imagedestroy($image); // Free up memory
但是图像无法显示在带有html标记的页面上(显示为损坏的图像)。 我对html标题和Content-Dispositions不是很熟悉。我猜哪里有错误......? 有什么想法吗?
感谢您阅读!
编辑:.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
# Sends image download request to image_generate.php for parsing
RewriteRule ^path/from/img/tag/downloads/(.*).jpg$ path/to/image_generate.php?file=$1 [NC,L]
RewriteRule ^path/to/image_generate.php$ /home/path/to/image_generate.php [NC,L]
</IfModule>
答案 0 :(得分:3)
不同的浏览器会有不同的行为。
例如,在执行Right Click > Save Image As
时,Internet Explorer不会尝试在显示保存文件对话框之前获取任何标头信息(它会自动假定您要保存请求的结果,而不管结果如何是)。 Firefox也没有。因此,对于IE&amp; Firefox,通过在标题中指定文件名是不可能的。
更优雅和UA兼容的方法是使用Apache的mod_rewrite
进行URL重写。 URL重写允许您将对URL的请求重新路由到另一个URL。
要进行此设置,您需要在.htaccess
所在的目录中创建一个image_generate.php
文件,其中包含以下内容:
RewriteEngine On
RewriteRule ^generated/([a-z0-9-]+)\.jpg$ generated_image.php?file=$1 [L]
然后,只需修改您的HTML即可指向您重写的网址。
<img src="generated/imagenamehere.jpg" />
这样做的好处是可以让您的图像生成对用户完全无缝(URL方式,它看起来就像一个静态图像)。
有关mod_rewrite
的更多信息,请访问: