Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]imagettfbbox() a skrajnie wysunięty punkt znaku, Problem przy czcionce SegoeScript
xpeye
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 6)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

Ostrzeżenie: (0%)
-----


Może pomoże: https://stackoverflow.com/questions/3490145...th-imagettfbbox
Go to the top of the page
+Quote Post
xpeye
post
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.04.2025

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Salvation
post
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.
Go to the top of the page
+Quote Post
xpeye
post
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
Go to the top of the page
+Quote Post
trueblue
post
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ł.
Go to the top of the page
+Quote Post
xpeye
post
Post #7





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 1.04.2025

Ostrzeżenie: (0%)
-----


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?

Ten post edytował xpeye 10.04.2025, 15:42:49
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 16:09