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
 
Linia 31: Linia 31:
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);