機能は、私のユーザーの場合のために実証され、小さなバグが含まれています。私は$の幅よりも大きい単語を送信した場合、それはその後のすべての単語を改行でしょう、例えばので:理由がある
veryloooooooooooooongtextblablaOVERFLOWING
this
should
be
one
line
、imagettfboxは常にテキスト内のその「悪質な」言葉と> $幅となります。私の解決策は、各単語の幅を別々にチェックし、必要に応じて単語の幅を$ widthに合わせる(または長さ0になると切り取りをキャンセルする)ことです。その後、私は通常のワードラッピングを続けます。
veryloooooooooooooongtextblabla
this should be one line
ここで修正機能です:結果のようなものがある
function wrap($fontSize, $fontFace, $string, $width) {
$ret = "";
$arr = explode(" ", $string);
foreach ($arr as $word){
$testboxWord = imagettfbbox($fontSize, 0, $fontFace, $word);
// huge word larger than $width, we need to cut it internally until it fits the width
$len = strlen($word);
while ($testboxWord[2] > $width && $len > 0) {
$word = substr($word, 0, $len);
$len--;
$testboxWord = imagettfbbox($fontSize, 0, $fontFace, $word);
}
$teststring = $ret.' '.$word;
$testboxString = imagettfbbox($fontSize, 0, $fontFace, $teststring);
if ($testboxString[2] > $width){
$ret.=($ret==""?"":"\n").$word;
} else {
$ret.=($ret==""?"":' ').$word;
}
}
return $ret;
}
Upvoted、およびhttp://www.php.net/manual/en/function.imagettfbbox上の複数の実装があります。ポスターがすぐに使えるものを探している場合は、php( "wrap"を検索してください)。 – Yuriy
ユリの言及されたリンクにある機能を使用していただきありがとうございます。 Ninjaによって書かれた関数:) – arma
部門の幅と高さに応じて部門内にスペースを追加せずに行を分割する方法はありますか? –