简体   繁体   中英

php - fit text on text-to-image

I have this code

<?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);
?> 

the problem here is, when I have a very long text, the other won't show. I've searched that it can be done by

imagettfbbox() 

but I don't know how to apply it here. Any help?

try this code:

<?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);
?>

New update code :

<?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);
?>

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM