1

我有这个代码

<?php
// Set the content-type
header('Content-type: image/png');

// Create the image
$im = imagecreatetruecolor(400, 30);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, 399, 29, $white);

// The text to draw
$text = 'Testing... a very long text';
// Replace path by your own font path
$font = 'arial.ttf';

// Add some shadow to the text
imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, 20, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?> 

这里的问题是,当我的文本很长时,另一个不会显示。我已经搜索过它可以通过

imagettfbbox() 

但我不知道如何在这里应用它。有什么帮助吗?

4

1 回答 1

1

试试这个代码:

<?php
// Set the content-type
header('Content-type: image/png');

$img_width = 400;
$img_height = 30;

// Create the image
$im = imagecreatetruecolor($img_width, $img_height);

// Create some colors
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);
imagefilledrectangle($im, 0, 0, $img_width, $img_height, $white);

// The text to draw
$text = 'Testing... a very long text bla.. ';
// Replace path by your own font path
$font = 'arial.ttf';

$fontSize = $img_width / strlen($text) * 1.8;

// Add some shadow to the text
imagettftext($im, $fontSize, 0, 11, 21, $grey, $font, $text);

// Add the text
imagettftext($im, $fontSize, 0, 10, 20, $black, $font, $text);

// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>

新的更新代码:

<?php
// Set the content-type
header('Content-type: image/png');

$img_width = 400;
$img_height = 30;
$font = 'arial.ttf';    
// Create the image
$text = 'Testing... a very long text.. Testing... a very long text.. Testing... a very long text.. Testing... a very long text..';
$curTextLen = strlen($text);
$limit = 35;
$totalLine = ceil($curTextLen / $limit);
$img_height = $img_height * $totalLine;

$im = imagecreatetruecolor($img_width, $img_height);
$white = imagecolorallocate($im, 255, 255, 255);
$grey = imagecolorallocate($im, 128, 128, 128);
$black = imagecolorallocate($im, 0, 0, 0);

imagefilledrectangle($im, 0, 0, $img_width, $img_height, $white);

for($i = 1; $i <= $totalLine; $i++){
    $y = $i * 27;
    $textN = substr($text,($limit * ($i-1)),$limit);
    imagettftext($im, 20, 0, 11, $y, $grey, $font, $textN);
    // Add the text
    imagettftext($im, 20, 0, 10, $y, $black, $font, $textN);
}
// Using imagepng() results in clearer text compared with imagejpeg()
imagepng($im);
imagedestroy($im);
?>
于 2012-08-11T04:38:12.107 回答