Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Generowanie obrazka przy pomocy klasy
Forum PHP.pl > Forum > PHP
Florian
Jeśli utworzę następujący plik o nazwie captcha1.php:
  1. <?php
  2. header("Content-type: image/png");
  3. $znaki="abcdef";
  4. $test01=imagecreatetruecolor(400,30);
  5. $wb2=imagecolorallocate($test01,255,33,66);
  6. imagefill($test01,0,0,$wb2);
  7. $text_color=imagecolorallocate($test01,0,0,20);
  8. imagettftext($test01 , 33 , 0 , 20 , 20 , $text_color, "font.ttf" , $znaki );
  9. imagepng($test01);
  10. ?>

przeglądarka internetowa prawidłowo wyświetla obrazek.

Jeśli natomiast utworzę następujący plik o nazwie captcha1.php:
  1. <?php
  2. require("captcha2.php");
  3. $x01=new captcha;
  4. ?>


oraz definicję klasy captcha w pliku captcha2.php:
  1. <?php
  2. class captcha
  3. {
  4. private $image_handle;
  5. private $image_token;
  6. private $color_background;
  7. private $color_text;
  8. private $font_loc;
  9. //1. Tworzenie rysunku
  10. private function new_image($w,$h)
  11. {
  12. $this->image_handle=imagecreatetruecolor($w,$h);
  13. }
  14. //2. Deklaracja koloru
  15. private function declare_color($r,$g,$b)
  16. {
  17. $test01=imagecolorallocate($this->image_handle,$r,$g,$b);
  18. return $test01;
  19. }
  20. //3. Tło obrazka
  21. private function add_background($color_handle)
  22. {
  23. imagefill($this->image_handle,0,0,$color_handle);
  24. }
  25. //4. Lokalizacja czcionki
  26. private function font_localise()
  27. {
  28. $this->font_loc="font.ttf";
  29. }
  30. //5. Pisanie tekstu
  31. private function write($text,$font_size,$x,$y,$color_handle,$font_loc)
  32. {
  33. imagettftext($this->image_handle,$font_size,0,$x,$y,$color_handle,$font_loc,$text);
  34. }
  35. //6. Kończenie pracy z rysunkiem
  36. private function finish()
  37. {
  38. imagepng($this->image_handle);
  39. }
  40. //7. Generowanie łańcucha znaków
  41. private function generate_chain() - ta funkcja generuje losowy łańcuch znaków i zapisuje go we właściwości image_token
  42. //8. Deklaracja kolorów
  43. private function declare_color_array()
  44. {
  45. $this->color_background=$this->declare_color(255,33,66);
  46. $this->color_text=$this->declare_color(99,00,204);
  47. }
  48. //9. Tworzenie obrazka
  49. private function create_image_1()
  50. {
  51. $this->new_image(200,50);
  52. $this->declare_color_array();
  53. $this->add_background($this->color_background);
  54. $this->generate_chain();
  55. $_SESSION[captcha] = $this->image_token;
  56. $this->font_localise();
  57. $this->write($this->image_token,34,20,10,$this->color_text,$this->font_loc);
  58. }
  59. //10. Tworzenie obrazka #2
  60. private function create_image_2()
  61. {
  62. header('content-type: image/png');
  63. $this->create_image_1();
  64. $this->finish();
  65. }
  66. //11. Konstruktor
  67. public function __construct(){$this->create_image_2();}
  68. }
[/php]

po wywołaniu pliku captcha1.php obrazek się nie pojawia.
Dlaczego?
Czy instrukcje generujące obrazek muszą koniecznie być zapisane bezpośrednio, nie mogą zostać ukryte w klasie lub bibliotece funkcji?
darko
Prawdopodobnie zabrakło Ci deklaracji poprawnego nagłówka w pierwszej linii, jeszcze przed include:
  1. header("Content-type: image/png");
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.