ParanoyaBLOG

programmare necesse est,
vivere non est necesse

 

Problem z centrowaniem tekstu w PHP

 

Podczas generowania obrazków za pomocą biblioteki GD języka PHP napotkałem problem z wycentrowaniem tekstu. W przypadku centrowania według osi X (poziomego) wszystko było w porządku. Schody pojawiły się gdy chciałem tekst wyśrodkować w pionie (oś Y). Problematyczne okazały się głównie polskie znaki diakrytyczne… ale nie tylko, gdyż i wszelkiego rodzaju nawiasy czy cudzysłowy powodowały ten sam efekt.

 

Wyśrodkować w pionie jest prosto wystarczy obliczyć wynik wzoru:

 

Y = (wysokość obrazka - wysokość tekstu) / 2

 

Do wypisywania tekstu na obrazku używam funkcji imagettftext. W funkcji tej trzeba podać kilka parametrów a w nich między innymi położenie X oraz Y początku tekstu. Więc wartość z wyżej wymienionego wzoru powinna być tu idealna. I tu pierwsza niespodzianka: Y nie jest liczone o lewego-górnego rogu płótna – Y to tak zwane położenie baseline tekstu. I na to znalazło się rozwiązanie – drobna modyfikacja wzoru który teraz wyglądałby następująco:

 

Y = (wysokość obrazka + wysokość tekstu) / 2

 

Żeby pobrać wysokość tekstu używam funkcji imagettfbbox. I tu pojawił się kolejny problem – funkcja ta zwraca (po odpowiednim obliczeniu) wysokość wypisanego tekstu a nie „wysokość” baseline czcionki. Do tego jeszcze dodać trzeba, że mimo iż czcionki posiadają ten sam baseline nie mają one jednej wielkości (wysokości) – inną wysokość będzie miała literka „A” a inna na przykład „y”. Dlatego jedynym rozwiązaniem jest obliczenie osobno szerokości tekstu i osobno wysokości, z tym że obliczamy wysokość dla litery która będzie najmniej „wystawała” poza baseline – ja używam do tego małego „a”. Niestety takie rozwiązanie wymaga podwójnego użycia funkcji imagettfbbox.

 

Brak komentarzy to “Problem z centrowaniem tekstu w PHP”

Komentarze zostały wyłączone.

Zostaw komentarz