используйте imagettfbox , чтобы получить ограничивающую рамку текста, и используйте эту информацию для фактического создания рамки.
У меня есть эта функция для генерации изображения слова:
function generate_words($word)
{
$fontSize = 10;
$fontFile = dirname( __FILE__ ) . '/fonts/verdana.ttf';
$boundingBox = imagettfbbox($fontSize, 0, $fontFile, $word);
$imageWord = imagecreate(abs($boundingBox[2]) + abs($boundingBox[0]), abs($boundingBox[7]) + abs($boundingBox[1]));
$background = imagecolorallocate($imageWord, 255, 255, 255);
$black = imagecolorallocate($imageWord, 0, 0, 0);
imagettftext($imageWord, $fontSize, 0, 0, abs($boundingBox[5]), $black, $fontFile, $word);
//print_r( $boundingBox );
return $imageWord;
}
Используйте это следующим образом:
$imageWord = generate_words( "my text" );
$imageWordWidth = imagesx($imageWord);
$imageWordHeight = imagesy($imageWord);
и, наконец, объедините полученный текстовый ресурс изображения в базовое или фоновое изображение:
imagecopymerge($baseImage, $imageWord, $wordXLocationRelativeToBase, $wordYLocationRelativeToBase, 0, 0, $imageWordWidth, $imageWordHeight, 100);