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 に答える