webForumDet fria alternativet

Problem med imagettfbbox

10 svar · 766 visningar · startad av Guldstrand

GuldstrandMedlem sedan juli 20041 274 inlägg
#1

Jag försöker använda följande kod till ett formulär, men captcha-bilden visas inte. :(

Får felet:

Error in imagettfbbox function

(Servern har php5 + GD2.)

<?php
session_start();

class CaptchaSecurityImages { 

	var $font = 'monofont.ttf';

	function generateCode($characters) {
		/* list all possible characters, similar looking characters and vowels have been removed */
		$possible = '23456789bcdfghjkmnpqrstvwxyz';
		$code = '';
		$i = 0;
		while ($i < $characters) { 
			$code .= substr($possible, mt_rand(0, strlen($possible)-1), 1);
			$i++;
		}
		return $code;
	}

	function CaptchaSecurityImages($width='120',$height='40',$characters='6') {
		$code = $this->generateCode($characters);
		/* font size will be 75% of the image height */
		$font_size = $height * 0.75;
		$image = @imagecreate($width, $height) or die('Cannot initialize new GD image stream');
		/* set the colours */
		$background_color = imagecolorallocate($image, 255, 255, 255);
		$text_color = imagecolorallocate($image, 20, 40, 100);
		$noise_color = imagecolorallocate($image, 100, 120, 180);
		/* generate random dots in background */
		for( $i=0; $i<($width*$height)/3; $i++ ) {
			imagefilledellipse($image, mt_rand(0,$width), mt_rand(0,$height), 1, 1, $noise_color);
		}
		/* generate random lines in background */
		for( $i=0; $i<($width*$height)/150; $i++ ) {
			imageline($image, mt_rand(0,$width), mt_rand(0,$height), mt_rand(0,$width), mt_rand(0,$height), $noise_color);
		}
		/* create textbox and add text */
		$textbox = imagettfbbox($font_size, 0, $this->font, $code) or die('Error in imagettfbbox function');
		$x = ($width - $textbox[4])/2;
		$y = ($height - $textbox[5])/2;
		imagettftext($image, $font_size, 0, $x, $y, $text_color, $this->font , $code) or die('Error in imagettftext function');
		/* output captcha image to browser */
		header('Content-Type: image/png');
		imagepng($image);
		imagedestroy($image);
		$_SESSION['security_code'] = $code;
	}

}

$width = isset($_GET['width']) ? $_GET['width'] : '120';
$height = isset($_GET['height']) ? $_GET['height'] : '40';
$characters = isset($_GET['characters']) && $_GET['characters'] > 1 ? $_GET['characters'] : '6';

$captcha = new CaptchaSecurityImages($width,$height,$characters);

?>
GuldstrandMedlem sedan juli 20041 274 inlägg
#2

*bump*

PeddaMedlem sedan juni 20004 880 inlägg
#3

Har du testat att ta bort "or die()" och kollat om du får ett felmeddelande som säger vad som är fel?
Testa även att ange fonten på olika sätt, t.ex './monofont.ttf' då olika GD versioner vill ha det på olika sätt.

GuldstrandMedlem sedan juli 20041 274 inlägg
#4

Pedda skrev:

Har du testat att ta bort "or die()" och kollat om du får ett felmeddelande som säger vad som är fel?
Testa även att ange fonten på olika sätt, t.ex './monofont.ttf' då olika GD versioner vill ha det på olika sätt.

Hmm...
När jag tog bort "or die()", visades bakgrundsbilden, men fortfarande ingen text. :x (see screen)
Ja, jag har testat att ange "./" framför fonten (även hela sökvägen), men inget verkar hjälpa.

captcha_screen.jpg
GuldstrandMedlem sedan juli 20041 274 inlägg
#5

*bumpellibump*

PeddaMedlem sedan juni 20004 880 inlägg
#6

Är du säker på att fonten heter monofont.ttf?
Hittar inget annat fel än att den inte hittar fonten.

/red
Högerklicka på fonten och ta egenskaper. Då ser man det verkliga namnet.

GuldstrandMedlem sedan juli 20041 274 inlägg
#7

Pedda skrev:

Är du säker på att fonten heter monofont.ttf?
Hittar inget annat fel än att den inte hittar fonten.

/red
Högerklicka på fonten och ta egenskaper. Då ser man det verkliga namnet.

Ja, fonten heter "monofont.ttf", och ligger i samma mapp som filen/koden ovan.

BTW.. ska fonten laddas upp som text eller binärt? (Spelar det någon roll?)
Några speciella rättigheter på font-filen?

GuldstrandMedlem sedan juli 20041 274 inlägg
#8

Hmm..
Hittade detta i error-loggen:

PHP Warning: imagettfbbox() [<a href='function.imagettfbbox'>function.imagettfbbox</a>]: Could not find/open font in /*****/*****/users/CaptchaImages.php on line 60, referer: http://doman.se/testar/register/register.html

*fattar ingenting* :x

GuldstrandMedlem sedan juli 20041 274 inlägg
#9

Ehum.. *harkel* BUMP *host*

fiddlerMedlem sedan juli 20022 464 inlägg
#10

Testa exemplet på http://se.php.net/manual/en/function.imageftbbox.php

Om du får problem med det är det något annat fel än din kod.
Är du säker på att din font-fil inte blivit skadad på något sätt? Ladda upp en ny och testa.

GuldstrandMedlem sedan juli 20041 274 inlägg
#11

fiddler skrev:

Testa exemplet på http://se.php.net/manual/en/function.imageftbbox.php

Om du får problem med det är det något annat fel än din kod.
Är du säker på att din font-fil inte blivit skadad på något sätt? Ladda upp en ny och testa.

Testade exemplet, men kan inte se någon text där heller.
Har testat med 2 olika fonts (arial och verdana) som jag laddade upp.

BTW.. ska fonten laddas upp som text eller binärt? (Spelar det någon roll?)
Några speciella rättigheter på font-filen?

Genererad på 372 ms · cache AV · v20260730165559-full.f96bc7eb