PHP:使用imagefttext和给定宽度设置文本

时间:2011-02-22 15:16:17

标签: php

我想在jpg上写一些文字。我正在使用php函数“imagefttext”。问题是,我想指定文本框的宽度。

换句话说:如何在900px x 400px图像上以300px x 300px区域写入文本。

我该怎么做?

1 个答案:

答案 0 :(得分:1)

本文应该有所帮助:

//由于新的用户限制而无法删除

同时: http://uk.php.net/manual/en/ref.image.php

编辑,因为你似乎不想去寻找自己;)

这提供了查找文本边界框的功能。 http://php.net/manual/en/function.imagettfbbox.php

$box = @ImageTTFBBox($font_size,0,$font_file,$text) ;

$text_width = abs($box[2]-$box[0]);
$text_height = abs($box[5]-$box[3]);


$image_width = imagesx($image);
$text_x = $image_width - $text_width - ($image_width - $x_finalpos);

至少应该让你开始。我链接的php手册页上有更详细的例子:)

编辑: 对不起,我想念你的问题。您需要编写一个函数来检查每一行的长度并将其拆分,直到它适合您指定的边界框。基本上重新测量并继续这样做,直到它适合。我刚刚注意到php手册页面下面的注释中有一些函数来包装文本,这也会给你一个很好的起点! :)

请注意,这不是我的代码,只是在PHP手册的注释中复制。

<?php 
$mx = imagesx($main_img); 
$my = imagesy($main_img); 

//TEXT VARS///////// 
$main_text = ; 
$main_text_size = ; 
$main_text_x = ($mx/2); 

$main_text_color = imagecolorallocate($main_img, $main_text_red, $main_text_green, $main_text_blue); 
$words = explode(' ', $main_text); 
$lines = array($words[0]); 
$currentLine = 0; 
    for($i = 1; $i < count($words); $i++) 
    { 
        $lineSize = imagettfbbox($main_text_size, 0, $mt_f, $lines[$currentLine] . ' ' . $words[$i]); 
        if($lineSize[2] - $lineSize[0] < $mx) 
        { 
            $lines[$currentLine] .= ' ' . $words[$i]; 
        } 
        else 
        { 
            $currentLine++; 
            $lines[$currentLine] = $words[$i]; 
        } 
    } 
$line_count = 1; 
// Loop through the lines and place them on the image 
foreach ($lines as $line) 
{ 
    $line_box = imagettfbbox($main_text_size, 0, $mt_f, "$line"); 
    $line_width = $line_box[0]+$line_box[2]; 
    $line_height = $line_box[1]-$line_box[7]; 
    $line_margin = ($mx-$line_width)/2; 
    $line_y = (($line_height+12) * $line_count); 
    imagettftext($main_img, $main_t_s, 0, $line_margin, $line_y, $main_text_color, $mt_f, $line); 

    // Increment Y so the next line is below the previous line 
    $line_count ++; 
} 
?>

我没有对此进行过测试,并且最有可能是更好的例子。尝试查看php手册评论或在谷歌上查看“PHP图像文字换行”你会发现一些东西:)

玩得开心!