我正在使用gd-text PHP库在图像上绘制文本
它可以工作,但是如果不提供空格,则文本不会在我设置的边界框中自动换行,这是我的代码:
map
文本正确换行,但是如果我不插入任何空格,则不会。文字一直在框外。该文档没有说明即使没有空格也如何强制文本换行
答案 0 :(得分:1)
该库仅在空格处中断,但是非常简单,如果输入字符串中没有空格,则我所做的更改将在您超出框的宽度时中断。仅当整行没有空格时,此更改才适用。理想情况下,应该有一个不会溢出的模式。这将很容易添加。您可能还想添加一个字符,以在单词中间出现中断时插入。
使用以下方法替换Box类中的wrapTextWithOverflow方法:
protected function wrapTextWithOverflow($text)
{
$lines = array();
// Split text explicitly into lines by \n, \r\n and \r
$explicitLines = preg_split('/\n|\r\n?/', $text);
foreach ($explicitLines as $line) {
// Check every line if it needs to be wrapped
if((strpos($line, ' ')))
{
$words = explode(" ", $line);
$line = $words[0];
for ($i = 1; $i < count($words); $i++) {
$box = $this->calculateBox($line." ".$words[$i]);
if (($box[4]-$box[6]) >= $this->box['width']) {
$lines[] = $line;
$line = $words[$i];
} else {
$line .= " ".$words[$i];
}
}
}
else
{
//If there are no spaces, append each character and create a new line when an overrun occurs
$string = $line;
$line = $string[0];
for ($i = 1; $i < strlen($string); $i++) {
$box = $this->calculateBox($line.$string[$i]);
if (($box[4]-$box[6]) >= $this->box['width']) {
$lines[] = $line;
$line = $string[$i];
} else {
$line .= $string[$i];
}
}
}
$lines[] = $line;
}
return $lines;
}