Hallo Community,
ich versuche gerade einige Bilder, die ich mit PHP erstelle, von imagestring auf imagettftext umzustellen.
Mein Porblem dabei ist, dass TTF-Zeichen ja keine Monospace-Zeichen sind und die Berechnung der String-Länge so etwas schwieriger wird.
Ich kann ja leider auch nur die Länge eines fertigen Strings auslesen (mit imagettfbbox). Aber so weiß ich ja nicht, wie lang ein String maximal sein darf, damit er noch ins Bild passt.
Ich bräuchte nun eine Methode, die den Text nach dem letzten passenden Wort umbricht aber sowas gibt es nicht in PHP (habe ich zumindest nicht gefunden).
Hat da jemand eine Idee, was ich da machen könnte?
TrueTypeFont-Text mit "auto-wrapping"
gepostet vor 19 Jahre, 2 Monate von poncho
gepostet vor 19 Jahre, 2 Monate von BLUESCREEN
Original von poncho
Ich bräuchte nun eine Methode, die den Text nach dem letzten passenden Wort umbricht aber sowas gibt es nicht in PHP (habe ich zumindest nicht gefunden).
Hat da jemand eine Idee, was ich da machen könnte?
Eine entsprechende Funktion wirst du dir selber schreiben müssen.
gepostet vor 19 Jahre, 2 Monate von poncho
Scheint so. Habe ich nun auch gemacht.
Falls es jemanden interessiert:
{
$words = explode(' ', $text);
$lines = array();
$line = '';
$line_tmp = '';
for($i = 0; $i < count($words); $i++)
{
$line_tmp = $line.$words[$i].' ';
$bbox = imagettfbbox($fontsize, 0, $fontfile, $line_tmp);
if($bbox[2] > $width)
{
$i--;
$lines[] = $line;
$line = '';
continue;
}
else
{
$line = $line_tmp;
}
if($i == count($words) - 1)
{
$lines[] = $line;
}
}
return $lines;
}
Zurückgegeben wird ein Array mit den Zeilen als Elemente.
Falls es jemanden interessiert:
function imagettfwrap($text, $width, $fontfile, $fontsize)
{
$words = explode(' ', $text);
$lines = array();
$line = '';
$line_tmp = '';
for($i = 0; $i < count($words); $i++)
{
$line_tmp = $line.$words[$i].' ';
$bbox = imagettfbbox($fontsize, 0, $fontfile, $line_tmp);
if($bbox[2] > $width)
{
$i--;
$lines[] = $line;
$line = '';
continue;
}
else
{
$line = $line_tmp;
}
if($i == count($words) - 1)
{
$lines[] = $line;
}
}
return $lines;
}
Zurückgegeben wird ein Array mit den Zeilen als Elemente.