如何使用 php gd 库加载动态图像,不将其保存在服务器上或使用 src="script.php"?
Posted
技术标签:
【中文标题】如何使用 php gd 库加载动态图像,不将其保存在服务器上或使用 src="script.php"?【英文标题】:How to load dynamic image w/php gd library, w/o saving it on server or having src="script.php"? 【发布时间】:2009-12-09 22:36:57 【问题描述】:我想从脚本生成动态图像,然后将其加载到浏览器,而不是在服务器上持久化。
但是,我不能通过设置图像的 src="script.php" 来调用它,因为这需要重新运行刚刚生成页面及其数据的脚本,以获取将生成的最终数据图形。
有没有办法做到这一点,类似于设置图像的 src="script.php",但它是从另一个脚本中调用的,并且只是发送图像而不保存它?我需要访问在生成标记时使用的数据,才能创建这个动态图像。
或者,如果不是,那么在页面加载后销毁图像的最简单方法是什么?一个快速的ajax调用?
有没有办法在有限的时间范围内缓存某些数据,以便其他脚本可以使用它?
任何想法都将不胜感激,因为我很难找到正确的解决方案......
谢谢!
【问题讨论】:
【参考方案1】:如果需要,您可以将图像内联到 标记中。 喜欢
<?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 不知道/从未使用过。更多关于***的信息:en.wikipedia.org/wiki/Data_URI_scheme【参考方案2】:另外,我发现的另一个解决方案是将图像存储在会话变量中,然后从图像标签中的 php 脚本调用该变量。这将允许提供用户特定的图像,然后由脚本从内存中删除...这也避免了混乱的 img src="" 标签...
希望这对某人有所帮助。
【讨论】:
好主意。尽管您也可以将图像保存到临时文件夹中,并让调用脚本从那里删除它。让您对它有更多的控制权,并且不会使会话膨胀太多。 (我的一个小毛病:])【参考方案3】:使用重写规则。
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);
最后,利用上面的
显示.php
<img src="magicimage.jpg">
【讨论】:
我不知道这会有什么帮助...并不是我不能让人们知道我正在运行一个脚本来生成图像,而是那个脚本会生成一个来自服务器上不再存在的数据的图像,因为它只是输出页面的脚本的产物,并且一旦使用此引用输出页面,该数据就不再是.... 无论如何,这是一件相当多余的事情。您可以很容易地让myscript.php
将响应的内容类型设置为image/jpeg
并直接调用PHP 文件。没有像样的浏览器会依赖于请求文件的扩展而不是响应的内容类型。
已更新以包含明确的详细信息。以上是关于如何使用 php gd 库加载动态图像,不将其保存在服务器上或使用 src="script.php"?的主要内容,如果未能解决你的问题,请参考以下文章
Composer 安装“PHP 警告:PHP 启动:无法加载动态库 'gd2'”
PHP 警告:PHP 启动:无法加载动态库 '/usr/lib/php/20151012/gd.so' - /usr/lib/php/20151012/gd.so: