Image GD - Jak zmieścić tekst imagettftext czcionką ttf, skalując go tak by nie przekroczył określonego rozmiaru...

Z Podręcznik Administratora by OPZ SGU
Wersja z dnia 04:56, 1 mar 2012 autorstwa Adminka23 (dyskusja | edycje)
(różn.) ← poprzednia wersja | przejdź do aktualnej wersji (różn.) | następna wersja → (różn.)
Przejdź do nawigacji Przejdź do wyszukiwania

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);