2009-07-08 13 views
7

Mam skrypt, który generuje obrazy z tekstu przy użyciu PHP. Działa to dobrze, z wyjątkiem tego, że chciałbym wygenerować tekst wielowierszowy z różnymi kolorami. Jak to zrobić za pomocą PHP, GD i Freetype? Poniżej znajduje się kod, którego używam do generowania obrazów tekstu w jednym wierszu.Tworzenie obrazu z tekstu w PHP - jak utworzyć multilinię?

$textval = 'This is some text to be an image'; 
$textcolor = '666666'; 


$font="arial.ttf"; 
$size = 9; 
$padding= 1; 
$bgcolor= "ffffff"; 

$transparent = 0; 
$antialias = 0; 

$fontfile = $fontpath.$font; 

$box= imageftbbox($size, 0, $fontfile, $textval, array()); 
$boxwidth= $box[4]; 
$boxheight= abs($box[3]) + abs($box[5]); 
$width= $boxwidth + ($padding*2) + 1; 
$height= $boxheight + ($padding) + 0; 
$textx= $padding; 
$texty= ($boxheight - abs($box[3])) + $padding; 

// create the image 
$png= imagecreate($width, $height); 


$color = str_replace("#","",$bgcolor); 
$red = hexdec(substr($bgcolor,0,2)); 
$green = hexdec(substr($bgcolor,2,2)); 
$blue = hexdec(substr($bgcolor,4,2)); 
$bg = imagecolorallocate($png, $red, $green, $blue); 

$color = str_replace("#","",$textcolor); 
$red = hexdec(substr($textcolor,0,2)); 
$green = hexdec(substr($textcolor,2,2)); 
$blue = hexdec(substr($textcolor,4,2)); 
$tx = imagecolorallocate($png, $red, $green, $blue); 



imagettftext($png, $size, 0, $textx, $texty, $tx, $fontfile, $textval); 

header("content-type: image/jpeg"); 
imagejpeg($png); 
imagedestroy($png); 
exit; 

Odpowiedz

6

Dodaj tę funkcję, aby owinąć tekst, zanim przejdzie on do twojej funkcji.

function wrap($fontSize, $angle, $fontFace, $string, $width){ 

    $ret = ""; 

    $arr = explode(' ', $string); 

    foreach ($arr as $word){ 

     $teststring = $ret.' '.$word; 
     $testbox = imagettfbbox($fontSize, $angle, $fontFace, $teststring); 
     if ($testbox[2] > $width){ 
      $ret.=($ret==""?"":"\n").$word; 
     } else { 
      $ret.=($ret==""?"":' ').$word; 
     } 
    } 

    return $ret; 
} 

Źródło: http://www.php.net/imagettftext

+0

Próbowałem za pomocą \ n ale z jakiegoś powodu to również wydrukować \ n jak to jest :( – Ali

+0

Cześć, możesz mi pomóc, jak użyć niestandardowego obrazu tła, Próbuję utworzyć captcha za pomocą tej funkcji – rkaartikeyan