Image GD - Jak zmieścić tekst imagettftext czcionką ttf, skalując go tak by nie przekroczył określonego rozmiaru...: Różnice pomiędzy wersjami

Z Podręcznik Administratora by OPZ SGU
Przejdź do nawigacji Przejdź do wyszukiwania
(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...”)
 
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>

Wersja z 04:55, 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);