webForumDet fria alternativet

Problem med imagettfbbox

PHP

10 svar · 768 visningar · startad av Guldstrand

Medlem sedan juli 20041 271 inlägg
Frågan#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);

?>
Medlem sedan juli 20041 271 inlägg
#2

*bump*

Medlem sedan juni 20006 031 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.

Medlem sedan juli 20041 271 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
Medlem sedan juli 20041 271 inlägg
#5

*bumpellibump*

Medlem sedan juni 20006 031 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.

Medlem sedan juli 20041 271 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?

Medlem sedan juli 20041 271 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

Medlem sedan juli 20041 271 inlägg
#9

Ehum.. *harkel* BUMP *host*

Medlem sedan juli 20023 617 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.

Medlem sedan juli 20041 271 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?

375 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
118 ms — deklarationer (db)
123 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)
119 ms — ändringar (db)