2009-02-26 50 views
0

我试图为我的网站开发一个验证码类一切都很好,直到我试图在我的订阅表单中嵌入使用PHP GD生成的图像!用GD插入图像的问题!

这里是我的类的代码:

<?php 
//captcha.php 
header("Content-type: image/png"); 


class Captcha { 


    // some attributes bla bla 

    public function __construct($new_string_length,$new_width_picture, 
           $new_height_picture,$new_string_color) { 

    $this->string_length = $new_string_length; 
    $this->width_picture = $new_width_picture; 
    $this->height_picture = $new_height_picture; 
    $this->string_color = $new_string_color; 

    } 

    public function getString() { 
    return $this->string; 
    } 

    public function generateRandomString() { 
    $str = ""; 
    $basket = "abcdefghijklmnopqrstuvwxyz"; 
    $basket_length = strlen($basket); 
    srand ((double) microtime() * 1000000); 
    for($i=0;$i<$this->string_length;$i++) { 

     $generated_pos = rand(0,$basket_length); 
     $str_substr = substr($basket,$generated_pos-1,1); 
     if(!is_numeric($str_substr)) { 
      // if the character picked up isn't numeric 
      if(rand(0,1)==1) { 
      // we randomly upper the character 
      $str_substr = strtoupper($str_substr); 
      } 
     } 
     $str = $str.$str_substr; 
    } 

    $this->string = $str; 
    } 

    **public function generatePictureFromString($new_string) { 
     $root_fonts = '../fonts/'; 
     srand ((double) microtime() * 1000000); 
     $list_fonts = array('ABODE.ttf','acme.ttf','Alcohole.ttf', 
        'Anarchistica.ttf','AMERIKAA.ttf'); 

     $image = @imagecreatetruecolor($this->width_picture,$this->height_picture); 
     $noir = imagecolorallocate($image,0,0,0); 
     $clr = explode('/',$this->string_color); 
     $clr = imagecolorallocate($image,$clr[0],$clr[1],$clr[2]); 




     for($i=0;$i<strlen($new_string);$i++) {  
      imagettftext($image,rand(($this->height_picture/4.3),($this->height_picture)/4.2), 
      rand(-45,45),($this->width_picture)/(5*$this->string_length)+($this->width_picture)/($this->string_length)*$i,0.6*($this->height_picture),$clr, 
      $root_fonts.$list_fonts[rand(0,count($list_fonts)-1)],substr($new_string,$i,1)); 
     } 

     imagepng($image); 
     imagedestroy($image); 

    }** 

} 

我心甘情愿地避免以显示类的一些无用的部分。类本身完美的作品时,我称之为generatePictureFromString(..)方法是这样的:

<?php 
//testeur_classe.php 
require_once '../classes/captcha.php'; 

$captcha = new Captcha(5,200,80,"255/255/255"); 
$captcha->generateRandomString(); 
$str = $captcha->getString(); 
$captcha->generatePictureFromString($str); 
?> 

但是当我尝试使用插入我的形式产生的画面:显示

<img src="<?php echo PATH_ROOT.'classes\testeur_classe.php'; ?>"/> 

什么!

我该怎么做?

谢谢!

+0

teseur_classe.php是否自行加载? – 2009-02-26 20:24:05

回答

1

您需要确保图像src是脚本的有效URL。看看那里的反斜杠,我的猜测是这实际上是一个文件系统路径。

+0

是的,它是一个文件系统路径,我在本地主机上运行我的测试,路径是有效的,我测试过它.. – 2009-02-26 21:10:31

+0

如果您在浏览器中查看源代码,图像src中有什么? – 2009-02-26 21:53:18

2

确定:如果您在浏览器中打开classes \ testeur_classe.php,您会看到什么? (附注:瑞安·格雷厄姆同样的问题问你问题的评论)

OK:我想你一定喜欢的图片输出前设置正确的标题:

header('Content-type: image/png'); 

附:

此代码的工作原理,只是在我的机器上试过。如果你有一个,你必须有< img src =“...”或< base href =“”的错误。你能告诉我们你的html输出吗,所以我们可以看到可能是什么问题?