Php 内联生成的图像超过长度

Php 内联生成的图像超过长度,php,html,image,base64,Php,Html,Image,Base64,我使用PHP生成图像,效果很好。但是,我无法显示这些图像: 我的图像生成器是一个PHP文件,它需要大量的参数和数据来生成图像。由于必须传递给生成器的数据量过多,因此使用GET容器对我不起作用,因此数据通过POST请求发送。此请求的结果是原始图像数据 我正在使用 $result = post_request('http://myurl.com/graphx/generator.php', $data); if($result['status'] == 'ok') { echo "<i

我使用PHP生成图像,效果很好。但是,我无法显示这些图像:

我的图像生成器是一个PHP文件,它需要大量的参数和数据来生成图像。由于必须传递给生成器的数据量过多,因此使用GET容器对我不起作用,因此数据通过POST请求发送。此请求的结果是原始图像数据

我正在使用

$result = post_request('http://myurl.com/graphx/generator.php', $data);
if($result['status'] == 'ok') {
    echo "<img src=\"data:image/png;base64,".
        base64_encode($result['content'])."\"/>\n";
}
$result=post\u请求('http://myurl.com/graphx/generator.php“,$数据);
如果($result['status']=='ok'){
回音“\n”;
}
显示我的图像。这适用于非常小的图像,但当它们变大时(例如300px*300px),图像不再显示(似乎被剪切到了某处)

我的方法合理吗?

尺寸问题是否有解决办法?

更新:

当我让生成器将图像保存到文件中时,创建的文件包含我希望的图像。此外,如果将我的生成器转换为GET生成器,则以下代码也可以正常工作:

$data = http_build_query($data);
echo "<img src=\"http://myurl.com/graphx/get_generator.php?{$data}\"/>\n";
$data=http\u build\u query($data);
回音“\n”;

因此,POST请求或转换为
base64
格式显然有问题。我正在使用POST请求,如图所示。

为什么不将参数设置为base64并将其放入GET请求中,然后执行一个简单的操作:

<img src="/path/to/php.php?p=eyJ0aGlzIjoiaXMiLCJhIjoiYmVhdXRpZnVsIiwic2V0Ijoib2YiLCJwYXJhbWV0ZXJzIjoiISEifQ==" />

然后在php.php base64_上解码($p)并返回图像

在php.php上,使用apache()的X-Sendfile mod甚至可以在本地缓存图像,这样就不必一直重新创建图像

编辑:

我不知道我们这里到底讨论了多少参数。如果你去看看,你会发现经验表明URI大约是2000个字符

因此,这取决于base64编码字符串是否小于安全值。否则,您可以考虑其他编码方式。也许是yEnc还是base85


甚至可以将序列化对象(包含所需的参数)存储在本地存储器(即RDBMS)上,将其与id链接并传递该id。当php.php获取id时,在存储器上查找它,检索参数,创建图像等等

根据IE8(如果他们支持的话,可能在下面)“将数据URI的最大长度限制为32KB”。如果它只读取您发送的任何内容的前32k,则可能就是您看到的内容。

我建议您的页面结构如下:

主页:

<img src="imageproxy.php" />

imageproxy.php:

<?php
$result = post_request('http://myurl.com/graphx/generator.php', $data);
header('Content-type: image/png');
if($result['status'] == 'ok') {
    echo $result['content']);
} else {
    readfile('error_message_image.png');
}

对于较大的图像,$result的输出是什么?在这种情况下,您可以获取内容密钥吗?@Stewie我可以获取内容密钥,它包含
base64
数据,但似乎有一定的长度限制。我对第一个建议特别感兴趣:这对我有帮助吗?老实说,我对HTTP上的GET请求不太在行,当我将数据编码到
base64
并将其作为单个参数发送时,我是否能够发送无限量的数据?这仍然会失败。GET查询的长度有限,并将截断行中某个位置的“大”图像。我将编辑我的帖子以回复@MarcB和nijansen,因为我的空间不足。这是非常有用的信息。那么我如何绕过32KB的限制呢?我认为Marc B的答案可能是最好的解决方法。做你现在正在做的事情,但是将代码提取到另一个页面,该页面只包含图像内容,这样它就可以返回一个图像。太棒了。这正是我想要的想法。