我正在尝试使用 PHP 来创建一个带有max的透明文本框的图像。 2行文字。盒子宽度固定为90px;高度因所包含的文本而异(同样,文本可能占用1到2行):example。
我认为最具挑战性的部分是如何根据文字长度“自动”设置框高度。也就是说,脚本应该足够聪明:
假设文本总是适合一行和框,脚本可以很简单:
<?php
$im = imagecreatetruecolor(90, 22);
$white = imagecolorallocate($im, 255, 255, 255);
$blue = imagecolorallocate($im, 92, 149, 167);
// Set the background to be blue
imagefilledrectangle($im, 0, 0, 90, 22, $blue);
// Path to our font file
$font = './Arial.ttf';
imagefttext($im, 10, 0, 5, 15, $white, $font, "Barton Hotel");
// Output to browser
header('Content-Type: image/png');
imagepng($im);
imagedestroy($im);
?>
答案 0 :(得分:0)
使用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);