服务器生成动态图像和长URL

时间:2014-09-17 14:09:00

标签: php html image get

我需要显示服务器生成的图像。它是基于通过URL提供的参数生成的。问题是,参数可能非常多且很长,因为我们知道GET请求长度有限制。

以下是代码的简化版本:

查看:

<img alt="Preview" src="/preview/getPreview/?id=1&page=1&values=%7B%22object_82%22%3A%22Test%22%2C%22object_83%22%3A%22Test2%22%2C%22object_84%22%3A%22Test3%22%7D&size=676">

这是一个非常简短的参数列表,会有更多。正如您所看到的,值实际上是一个JSON字符串化数组。

代码的控制器部分或多或少是这样的(不确定它是否与问题实际相关但仍然在这里):

function getPreview() {
    $buffer = createImageFromData($id, $page, $values, false);
    $img = new Imagick();
    $img->setResolution(300, 300);
    $img->readimageblob($buffer);

    header("Content-type: image/jpeg");
    header("Content-Length: $lenght");
    header("Content-Disposition: inline; filename=preview.jpg");

    echo $img;
}

所以问题是 - 如何显示服务器生成的动态图像,而不必执行src =''部分,这对于某些图像来说会变得太长。

1 个答案:

答案 0 :(得分:1)

如果您有大量需要传递给服务器的信息。 get请求将在旧版浏览器上快速耗尽空间:maximum length of HTTP GET request?

您可以做的是使用javascript,在显示图片之前先将信息发布到您的服务器。如果您想将数据保存到数据库并返回一个很好的解决方案ID,您可以使用以下命令加载图像:

<img src="/preview/getPreview/?id=312">

如果您不想保存数据,可以直接返回base64编码图像,&lt;&lt;虽然IE8非常好。回复可能如下:

<img src="data:image/gif;base64,R0lGODlhDwAPAKECAAAAzMzM/////wAAACwAAAAADwAPAAACIISPeQHsrZ5ModrlN48CXF8m2iQ3YmmKqVlRtW4MLwWACH+H09wdGltaXplZCBieSBVbGVhZCBTbWFydFNhdmVyIQAAOw=="alt="Base64 encoded image" width="150" height="150"/>

我提到你应该通过javascript发布,这样生成就不必重新加载页面了。然而,这是你不必做的事情。

另外 - 如果您再次生成相同的图像。由于图像创建脚本,我们经历了大量的页面加载时间 - 因此,如果可以的话,建议缓存图像。

也许如果你更新你的问题以明确说明你的意图和你正在尝试创建的图像,我可以更好地回答这个问题。