login  Naam:   Wachtwoord: 
Registreer je!
 Forum

GD achtergrond positie varieerd

Offline GroundZero - 12/03/2015 20:32
Avatar van GroundZeroLid Beste,

ik ben OOP aan het leren (is een PHP vraag niet OOP) en heb een captcha gemaakt. Deze werkt prima echter de achtergrond beweegt! Soms staat hij te ver naar boven, erg raar. Kan iemand mij vertellen hoe dit kan komen? ik kom er zelf namelijk niet uit!

Een live voorbeeld vind je hier: http://bit.ly/1EDBJpM

Het kan zijn dat je een keer of 10 op verversen moet drukken voordat je het ziet, maar als de achtergrond verschoven is dan zie je dus een kleine tot soms wat dikkere zwarte balk. Hopelijk dat iemand mij kan vertellen hoe ik dit kan oplossen.

Mijn code:

  1. <?PHP
  2. class Captcha {
  3. public $image;
  4. public $code;
  5. public $width;
  6. public $height;
  7. public $fonts;
  8.  
  9. // constructor
  10. public function __construct($width = 300, $height = 60) {
  11. $this->width = $width;
  12. $this->height = $height;
  13. $aFonts = realpath('.').'/AGENCYB.TTF';
  14.  
  15. // generate randomly 4-5 characters
  16. $string = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
  17. $string = str_shuffle($string);
  18. $length = rand(4,5);
  19. $this->code = substr($string, 0, $length);
  20. $aCode = str_split ($this->code);
  21. $background = array('background1.png', 'background2.png', 'background3.png');
  22.  
  23. //$this->image = imagecreatetruecolor($this->width, $this->height);
  24. $this->image = imagecreatefrompng($background[rand(0, 2)]);
  25.  
  26. // Create each letter on a random(ish) position and angle
  27. for($i = 0; $i < count ($aCode); $i++)
  28. {
  29. $fontcolor = imagecolorallocate($this->image, 000, 000, 000);
  30.  
  31. if(count($aCode) == 4)
  32. {
  33. $pos[0] = rand (15, 55);
  34. $pos[1] = rand (80, 120);
  35. $pos[2] = rand (145, 185);
  36. $pos[3] = rand (210, 250);
  37. }
  38.  
  39. if(count($aCode) == 5)
  40. {
  41. $pos[0] = rand (10, 45);
  42. $pos[1] = rand (65, 100);
  43. $pos[2] = rand (120, 155);
  44. $pos[3] = rand (175, 210);
  45. $pos[4] = rand (230, 265);
  46. }
  47.  
  48. imagettftext($this->image, rand(14, 18), rand(-30, 30), $pos[$i], rand(50, 20), $fontcolor, $aFonts, $aCode[$i]);
  49. }
  50. }
  51.  
  52. // functions
  53. public function ParseCode(){
  54. return $this->code;
  55. }
  56.  
  57. public function SaveImage(){
  58. imagepng($this->image, 'captcha.png');
  59. }
  60.  
  61. public function DisplayImage(){
  62. return '<img src="captcha.png?'.time().'" alt="Captcha image" />';
  63. }
  64.  
  65. // destructor
  66. public function __destruct() {
  67. imagedestroy($this->image);
  68. }
  69. }
  70. ?>


Mijn aanroep code:

  1. <?php
  2. require_once('captcha.php');
  3.  
  4. $captcha = new Captcha(300, 60);
  5. $captcha->SaveImage();
  6.  
  7. echo $captcha->DisplayImage();
  8. ?>

2 antwoorden

Gesponsorde links
Offline Thomas - 12/03/2015 23:34
Avatar van Thomas Moderator Hm, waar voeg je een header toe?

Ik zou het anders doen.

<img src="captcha.php?something=<random>" />

En dan in captcha.php:
header('Content-Type: image/png');
<genreer hier je afbeelding>

Dan kun je ook daar nog dingen met $_SESSION doen enzo.

En die zwarte balk: Google: php imagecreatefrompng black bars
Eerste twee resultaten, zal iets met transparantie en/of crop dimensies te maken hebben?
Bedankt door: GroundZero
Offline GroundZero - 12/03/2015 23:54 (laatste wijziging 12/03/2015 23:55)
Avatar van GroundZero Lid Header heb ik niet gebruikt om eerlijk te zijn, ik ga het eens proberen dankjewel voor je antwoord! als ik de oplossing heb laat ik het even weten ;)

Overigens imagecreate() wat ik gebruik, en word niks gecropt of zo nergens en de plaatjes zijn allemaal van het zelfde formaat 300x60.
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.197s