2013-03-02 62 views
0

如果您知道如何开发我真正想要做的事情,请让我知道。在对象网站中查看图片

我有这样它创建的图像(类似于验证码)代码:

/* 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()" />'; 

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

回答

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. 您可以将生成的图像保存到磁盘,给它一个唯一的文件名。这显然需要某种“垃圾收集”机制,否则你的磁盘将最终满足所有这些图像文件。