在 PHP 中,如何直接在我的网站上使用 GD 库创建的图像

Posted

技术标签:

【中文标题】在 PHP 中,如何直接在我的网站上使用 GD 库创建的图像【英文标题】:In PHP, how do I use the GD library created image directly on my website 【发布时间】:2013-07-11 13:15:07 【问题描述】:

我不确定我是否完全理解它是如何工作的。对于网站表单,我想生成一个随机验证码图像并将其与表单一起显示。所以理想情况下,我想要一些类似的东西:

<form action="post.php" method="post">
  ...
  <?php create_captcha(); ?>
</form>

虽然我确实有一个在 PHP 中创建图像资源的函数 (link)

function create_captcha() 
  $w = 60; $h = 30;
  $img = imagecreatetruecolor($w, $h);
  ...
  //header("Content-Type: image/jpeg");
  imagejpeg($img);

我不太清楚如何将该图像作为 html 表单的一部分直接输出到网站上。我怀疑我必须将它保存到一个临时文件captcha.jpg 中,然后在网站中生成一个&lt;img src="captcha.jpg" /&gt;

有没有更优雅的方式不使用临时图像?

【问题讨论】:

【参考方案1】:

使用您的验证码生成文件路径作为 IMG 标签的来源

<img src="http://domain.com/your-captcha_generating-file-path" />

【讨论】:

等等..这么简单?我将create_captcha() 函数的主体填充到它自己的captcha.php 文件中,然后简单地从带有&lt;img src="php/captcha.php" alt="" /&gt; 的表单中调用它。像魅力一样工作:) 如何添加header()?我想设置header("Cache-Control: no-cache, must-revalidate"); 以确保捕获的图像不被缓存。【参考方案2】:

你可以这样做:

function getCaptcha() 

    // Begin output buffering
    ob_start();

    // generate the captcha image in some magic way
    $w = 60; $h = 30;
    $img = imagecreatetruecolor($w, $h);
    imagejpeg($img);

    // and finally retrieve the byte stream
    $rawImageBytes = ob_get_clean();

    return "<img src='data:image/jpeg;base64," . base64_encode( $rawImageBytes ) . "' />";

通过在 img 标签中使用 Base64 编码的数据源,您根本不需要存储任何临时文件。

【讨论】:

谢谢!我确实记得将图像数据嵌入到网站中(很久以前),但我不知道如何在 PHP 中执行此操作。不过感谢上面的代码,如果@San's 不会更干净,那将是一个很好的解决方案。 不客气。事实上,我也赞成@San 的回答,因为它更简单。 :D 谢谢兄弟。它节省了我很多时间。

以上是关于在 PHP 中,如何直接在我的网站上使用 GD 库创建的图像的主要内容,如果未能解决你的问题,请参考以下文章

为我的服务器上的 GD 库调整太大的图像

Composer 安装“PHP 警告:PHP 启动:无法加载动态库 'gd2'”

imagerotate上的弹性beantalk linux php GD库错误

php中gd库已打开,还是不能加载图片

linux下centos 7 php7 gd库 安装后 这样是成功的吗?

sh 如何在PHP上添加库PHP GD