我想在jpg上写一些文字。我正在使用php函数“imagefttext”。问题是,我想指定文本框的宽度。
换句话说:如何在900px x 400px图像上以300px x 300px区域写入文本。
我该怎么做?
答案 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图像文字换行”你会发现一些东西:)
玩得开心!