Wyliczanie szerokości tekstu, jest związane z tym, że wszystkie operacje wykonuję na obrazie. Najpierw nakładam 1 linię, a potem w odpowiednim miejscu nakładam 2 linię tekstu, co niesie mniejsze prawdopodobieństwo popełnienia błędu.
Poza tym Twój skrypt nie działa mi za bardzo... do funkcji wordwrap nie trzeba mieś włączonej jakiejś biblioteki?
Bo po mimo poprawnego kolorowania składni, wysypuje się kod.
Mój błąd... nie poprawiłem w kodzie <? na <?php i dlatego wywaliło mi kod.
Teraz dopiero widzę zasadę działania funkcji. Hmm w sumie to myślę, że dało by się ten problem załatwić w ten sposób, ale chciałbym zobaczyć, czy może ktoś jeszcze ma inne pomysły na ten temat.
Teoretycznie pomysł byłby idealny, gdyby puścić pętle sprawdzającą szerokość każdej literki i po otrzymaniu wyniku 350 px zwracałaby ilość wykorzystanych znaków, wówczas tą zmienna podstawiałoby się do funkcji wordwrap.
Co o tym myślicie, bo ja zastanawiam się, czy pętla jest optymalnym rozwiązaniem.?
Zrobi³em to w taki sposób... dzia³aæ dzia³a, ale jest trochê ma³o wydajny...
Mo¿e kto¶ co¶ doradzi??
<?php
$size = 9.5;
$angle = 0;
$font = 'engine/fonts/verdana.ttf';
function width($size, $angle, $fontfile, $text) {
$ww = imagettfbbox($size, $angle, $fontfile, $text);
$ww['w'] = abs($ww[2
] + 1
);
return $ww;
}
$tekst= "xxxxxxxx xxxxxxx xxxxxxx xxxxxxxxxxx xxxxxxx xxxxxxxx xxxxxxxx xxxxxxx";
$tekstW = width($size, 0, $font, $tekst);
if ($tekstW['w'] > 350) {
$a = 0;
for ($i = 0; $i < 70; $i++) {
$licz[$i] = width($size, 0, $font, $tekst[$i]);
$a += $licz[$i]['w'];
$suma = 0 + $a;
if ($suma == 350 || $suma == 349 || $suma == 348 || $suma == 347 || $suma == 346 || $suma == 345 || $suma == 344 || $suma == 343 || $suma == 342 || $suma == 341 || $suma == 340) { $liczba = $i; }
}
width($size, 0, $font, $eja[$i]);
$nowytekst = wordwrap($tekst, $liczba, '<br />', 1
);
$nowytekst = explode('<br />', $nowytekst);
echo $nowytekst[0].'<br />'.$nowytekst[1
];
}
$echo = width($size, 0, $font, 'xxxxxxxx xxxxxxx xxxxxxx xxxxxxxxxxx xxxxxxx');
?>