One line text does not always fit into a given width of the picture, then you need to word wrap the text to a new line, depending on the width. If only the width is less than one word, then you will need a shaman's drum and witchcraft. PHP code to create a picture of the text with a given width:
<?php
//content type
header('Content-Type: image/png');
//font
$font = 'arial.ttf';
//font size
$font_size = 10;
//image width
$width = 100;
//text margin
$margin = 5;
//text
$text = "That is why where when why and how, and now why where when why and how?";
//explode text by words
$text_a = explode(' ', $text);
$text_new = '';
foreach($text_a as $word){
//Create a new text, add the word, and calculate the parameters of the text
$box = imagettfbbox($font_size, 0, $font, $text_new.' '.$word);
//if the line fits to the specified width, then add the word with a space, if not then add word with new line
if($box[2] > $width - $margin*2){
$text_new .= "\n".$word;
} else {
$text_new .= " ".$word;
}
}
//trip spaces
$text_new = trim($text_new);
//new text box parameters
$box = imagettfbbox($font_size, 0, $font, $text_new);
//new text height
$height = $box[1] + $font_size + $margin * 2;
//create image
$im = imagecreatetruecolor($width, $height);
//create colors
$white = imagecolorallocate($im, 255, 255, 255);
$black = imagecolorallocate($im, 0, 0, 0);
//color image
imagefilledrectangle($im, 0, 0, $width, $height, $white);
//add text to image
imagettftext($im, $font_size, 0, $margin, $font_size+$margin, $black, $font, $text_new);
//return image
imagepng($im);
//frees any memory associated with image
imagedestroy($im);

thank's man for this !
Good job man....!
Can you write this code in single line with fix height width we can adjust letter spacing according to text.
This is exactly what I have been looking for. Thanks. I have added it a script I use when I add Founding Father quotes to my site. It will automatically generate a Meme to use for sharing on Facebook, etc. Thanks for sharing your knowledge with the rest of us. You saved me a lot of time.
Thanks!
This is worked like a charm! nice thx..
Thank you very much
Good job ... thx!
// as function
function breakTextIntoLines($fontSize, $fontFace, $text, $width, $maxLines, $spacing) {
// explode text by words
$text = explode(' ', $text);
$textModified = '';
foreach($text as $word){
// create a new text, add the word, and calculate the parameters of the text
$bbox = imagettfbbox($fontSize, 0, $fontFace, $textModified." ".$word);
// if the line fits to the specified width, then add the word with a space, if not then add word with new line
if($bbox[2] > $width - $spacing*2){
$textModified .= "\n".$word;
} else {
$textModified .= " ".$word;
}
}
// trim spaces
return trim($textModified);
}