Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]imagettfbbox() a skrajnie wysunięty punkt znaku
Forum PHP.pl > Forum > Przedszkole
xpeye
Szukam funkcji, która działa podobnie jak imagettfbbox(), czyli obliczy i zwróci pole ograniczające w pikselach dla tekstu przy czcionce imitującej pismo odręczne. Gdy czcionka jest standardowa, wszystko jest ok. Ale po zastosowaniu czcionki SegoeScript - jej znaki są wyciągnięte niczym pisane odręczne - podane piksele odnoszą się do linii bazowej czcionki a nie do skrajnie wysuniętego punktu z lewej i prawej strony. Jaka inna funkcja spełni moje oczekiwania lub jak tę zmienić?
trueblue
Może pomoże: https://stackoverflow.com/questions/3490145...th-imagettfbbox
xpeye
Cytat(trueblue @ 1.04.2025, 19:52:10 ) *

Na stronie https://www.php.net/manual/en/function.imagettfbbox.php jodybrabec w swoim komentarzu pokazuje, że trzeba odjąć 1. Czy to dobra praktyka?
Salvation
Przy Arialu może i tak. Niestety fonty mamy różne. I pewnie trafisz też na taki, że będzie kompletnie "z dupy" - gdzie np. line-height wystrzelony albo litery lub cyfry nie będą "do linii".
Zmierzam do tego, że ciężko będzie znaleźć uniwersalne wartości dla każdej z czcionek. Musisz przyjąć jakiś margines, np. 5-6px i liczyć na to, że żaden tego nie przekroczy. Lub np. ograniczyć ilość wyboru fontów przez użytkownika do generowania tekstu.
xpeye
Już wiem, gdzie jest problem. Do napisu używam funkcji imagettftext() i podaje jej wartości wierzchołków zwracane przez imagettfbbox() a ona potrzebuje wartości linii bazowej. Jak to naprawić? imagestring() odpada, gdyż chcę mieć swobodę w wyborze rozmiaru czcionki
trueblue
Wcześniej pisałeś, że biblioteka, do której link podałem, nie sprawdziła się.

Dla tekstu "AjygT" i wielkości czcionki 200 (Segoe Script), uzyskałem:
Kod
Array ( [x] => -2 [y] => 201 [width] => 807 [height] => 266 )


Przy czym wcześniej przekonwertowałem czcionkę na TTF przy pomocy: https://www.fontsquirrel.com/tools/webfont-generator
Źródłowa realnie nie jest TTF, lecz OTF i nie chciała się wczytać. Co ciekawe po konwersji podgląd w Windows również pokazuje OpenType, ale skrypt ją wczytał.
xpeye
Cytat(trueblue @ 10.04.2025, 12:36:53 ) *
Wcześniej pisałeś, że biblioteka, do której link podałem, nie sprawdziła się.

Dla tekstu "AjygT" i wielkości czcionki 200 (Segoe Script), uzyskałem:
Kod
Array ( [x] => -2 [y] => 201 [width] => 807 [height] => 266 )


Przy czym wcześniej przekonwertowałem czcionkę na TTF przy pomocy: https://www.fontsquirrel.com/tools/webfont-generator
Źródłowa realnie nie jest TTF, lecz OTF i nie chciała się wczytać. Co ciekawe po konwersji podgląd w Windows również pokazuje OpenType, ale skrypt ją wczytał.
W ostatniej mojej odpowiedzi napisałem - dopiero dzisiaj to zobaczyłem - że to nie jest problem z biblioteką, tylko z imagettfbbox() i imagettftext(). Pierwsza zwraca dane odnośnie lewego górnego punktu znaku a druga potrzebuje lewy górny punkt bazowy znaku. To oczywiście w przybliżeniu jest to samo, ale akurat w tym przypadku to przybliżenie jest nie do zaakceptowania. Czy jest funkcja podobna do imagettfbbox(), która zwróci mi lewy górny punkt bazowy znaku?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.