Проблема с вставкой изображения в форму с помощью GD! - PullRequest
0 голосов
/ 26 февраля 2009

Я пытаюсь разработать класс капчи для своего веб-сайта, все было хорошо, пока я не попытался встроить изображение, сгенерированное с помощью PHP 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 = "abcdefghijklmnopqrstuvwxyz0123456789";
    $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'; ?>"/>

ничего не отображается!

Как мне это сделать?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 26 февраля 2009

ОК: Что вы увидите, если откроете классы \ testeur_classe.php в браузере? (p.s. тот же вопрос, который задал вам Райан Грэм в вопросном комментарии)

ОК: Я думаю, вы должны установить правильные заголовки перед выводом изображения, например:

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

приписка

Этот код работает, только что попробовал на моей машине. У вас должна быть ошибка в image

1 голос
/ 26 февраля 2009

Вы должны убедиться, что изображение src является допустимым URL-адресом скрипта. Глядя на обратную косую черту, я думаю, это путь к файловой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...