![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.04.2025 Ostrzeżenie: (0%) ![]() ![]() |
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ć?
Ten post edytował xpeye 1.04.2025, 18:47:12 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.04.2025 Ostrzeżenie: (0%) ![]() ![]() |
Na stronie https://www.php.net/manual/en/function.imagettfbbox.php jodybrabec w swoim komentarzu pokazuje, że trzeba odjąć 1. Czy to dobra praktyka? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 403 Pomógł: 72 Dołączył: 15.07.2014 Ostrzeżenie: (0%) ![]() ![]() |
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. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.04.2025 Ostrzeżenie: (0%) ![]() ![]() |
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
|
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 6 806 Pomógł: 1828 Dołączył: 11.03.2014 Ostrzeżenie: (0%) ![]() ![]() |
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ł. |
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 6 Pomógł: 0 Dołączył: 1.04.2025 Ostrzeżenie: (0%) ![]() ![]() |
Wcześniej pisałeś, że biblioteka, do której link podałem, nie sprawdziła się. 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?
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ł. Ten post edytował xpeye 10.04.2025, 15:42:49 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 22.08.2025 - 16:09 |