PHP:创建高度取决于其包含文本的图像框

时间:2011-12-21 08:59:03

标签: php image image-processing

我正在尝试使用 PHP 来创建一个带有max的透明文本框的图像。 2行文字。盒子宽度固定为90px;高度因所包含的文本而异(同样,文本可能占用1到2行):example

我认为最具挑战性的部分是如何根据文字长度“自动”设置框高度。也就是说,脚本应该足够聪明:

  1. 如果长度超过宽度,则将文本换行(到第2行)。
  2. 调整框高度,因为现在有两行。
  3. 假设文本总是适合一行和框,脚本可以很简单:

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

1 个答案:

答案 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);