Image GD - Jak zmieścić tekst imagettftext czcionką ttf, skalując go tak by nie przekroczył określonego rozmiaru...: Różnice pomiędzy wersjami
(Utworzył nową stronę „Tytuł strony jest dosyć idiotyczny, ale problem poważny. Załóżmy że mamy do dyspozycji pole tekstowe do wypełnienia o rozmiarze 500px. Domyślnie chcemy napisa...”) |
|||
(Nie pokazano 1 pośredniej wersji utworzonej przez tego samego użytkownika) | |||
Linia 26: | Linia 26: | ||
<pre> | <pre> | ||
$iin='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; | |||
$font = './arial.ttf'; | $font = './arial.ttf'; | ||
$size= inteligent_size_locator(30,500,$font,$iin); | $size= inteligent_size_locator(30,500,$font,$iin); | ||
imagettftext($img, $size, 0, 30, 190, $black, $font, $iin); | imagettftext($img, $size, 0, 30, 190, $black, $font, $iin); | ||
</pre> | </pre> | ||
[[Category:PHP]] |
Aktualna wersja na dzień 04:56, 1 mar 2012
Tytuł strony jest dosyć idiotyczny, ale problem poważny. Załóżmy że mamy do dyspozycji pole tekstowe do wypełnienia o rozmiarze 500px. Domyślnie chcemy napisać w nim sobie tekst, czcionką TTF, np arial, o rozmiarze 30.
Jeżeli napiszemy "AAAAAAAAAAAA" ciąg zmieści się bez problemu. Jeżeli napiszemy "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" - ciąg się nie zmieści zostawiając nas z problemem.
W związku z powyższym napisana została taka oto prosta funkcja wykorzystująca rekurencję oraz imagettftext w celu sprawdzenia wymiarów. Jeżeli żądane przez nas wymiary zostaną przekroczone!, wtedy czcionka zostanie zmniejszona o 1 rozmiar w dół... Jeżeli w dalszym ciągu będzie "wystawać" poza obręb, proces się powtórzy... do czasu kiedy definitywnie "tekst" zmieści się w określonej długości...
Dziękuję, dobranoc... a oto hasający skrypt...
function inteligent_size_locator($size,$max_width,$font,$text) { $dimensions = imagettfbbox($size, 0, $font, $text); if($dimensions[2]>$max_width) { return inteligent_size_locator($size-1,$max_width,$font,$text); } return $size; }
Jej użycie
$iin='aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa'; $font = './arial.ttf'; $size= inteligent_size_locator(30,500,$font,$iin); imagettftext($img, $size, 0, 30, 190, $black, $font, $iin);