如何加载动态图像w / php gd库,没有将其保存在服务器上或有src =“script.php”?

时间:2009-12-09 22:36:57

标签: php gd image-manipulation

我想从脚本生成动态图像,然后将其加载到浏览器而不是在服务器上持久化。

但是,我无法通过设置图像的src =“script.php”来调用它,因为这需要运行刚刚生成页面及其数据的脚本,只是为了获得将生成的最终数据图形。

有没有办法做到这一点类似于设置图像的src =“script.php”,但是从另一个脚本中调用,只是发送图像而不保存它?我需要访问生成标记时使用的数据,以便创建这个动态图像。

或者,如果没有,一旦加载页面,破坏图像的最简单方法是什么?一个快速的ajax电话?

有没有办法在某些有限的时间范围内缓存某些数据,以便某些其他脚本可以使用它?

任何想法都会非常感激,因为我很难找到合适的解决方案......

谢谢!

3 个答案:

答案 0 :(得分:9)

您可以将图片内联到< img>如果你需要标记。

<?php
$final_image_data; // Your image data, generated by GD
$base64_data = base64_encode($final_image_data);
echo "<img src=\"data:image/png;base64,{$base64_data}\" ... />";
?>

这应该适用于所有现代浏览器和IE8。对某些电子邮件客户端而言效果不佳(Outlook,一个)。

答案 1 :(得分:3)

另外,我找到的另一个解决方案是将图像存储在会话变量中,然后从图像标记中的php脚本调用该变量。这将允许提供用户特定的图像,然后通过脚本从内存中删除...这也避免了凌乱的img src =“”标签......

希望这对某人有帮助。

答案 2 :(得分:-1)

使用重写规则。

RewriteRule ^magicimage.jpg$ /myscript.php

然后简单地从gd回显您的图像数据,而不是将其写入磁盘 - 这就像没有为相应的image*()函数提供文件名一样简单

myscript.php

<?php
$im = imagecreatetruecolor($w, $h);
//...do gd stuff...

header('Content-type: image/jpeg');
//this outputs the content directly to the browser 
//without creating a temporary file or anything
imagejpeg($im); 

最后,利用上面的

Display.php的

<img src="magicimage.jpg">