在对象的站点中显示图像

时间:2013-03-02 20:12:23

标签: php php-gd

如果您知道如何开发我真正想做的事情,请告诉我。

我有一个代码可以创建一个像这样的图像(类似于验证码):

/* createImg.php */


class createImg{
public function __construct(){
    /*stuff here*/
}

public function showImg(){
    /*stuff here*/
    header("Content-type: image/png");
    imagepng($image);
    imagedestroy($image);
}
}
$img = new createImg();
$img->showImg();

我创建图像的方法如下:

/* index.php */
echo '<img src="createImg.php" />';

一切正常但我想做的是以下事情,但我不知道如何实现它:

/* index.php */
$img = new createImg();
//and now something like this
echo '<img src="$img->showImg()" />';

我得到的问题是,如果我使用这种方式,由于函数中的标题,我在主屏幕中获得了图像。有什么办法可以做我想做的事吗?

1 个答案:

答案 0 :(得分:0)

通常,您无法在HTML页面中间输出原始图像数据,这就是您尝试执行的echo语句。

机制有限,例如data: URI scheme,但它们有重要的限制需要注意,并且可能不适合大多数情况。

相反,您需要有一些方法来为您的图像生成一个URL,其中包含足够的信息来创建正确的图像。对于一个简单的例子,这可能就像"/img.php?width=100&height=100&colour=red"

由于您将用例描述为“类似于CAPTCHA”,因此可能会更复杂,并且可能还需要进行模糊处理,而不是仅仅拼写出URL中的内容。因此,您需要在服务器端存储一些内容;我可以想到几种方法:

  1. 您可以在PHP会话中写入图像数据或生成图像数据所需的输入。会话的常见问题,例如锁定,适用。
  2. 您可以将数据保存到数据库,为其提供唯一的密钥;然后,图片网址可以是"/img.php?unique_id=42"
  3. 您可以将生成的图像保存到磁盘,为其提供唯一的文件名。这显然需要某种“垃圾收集”机制,否则你的磁盘最终将填满所有这些图像文件。