Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]PHP GD i imagefontwidth - problem z czcionkami TTF
Forum PHP.pl > Forum > Przedszkole
cros
Mam problem z php gd, a doklaniej z funkcja imagefontwidth() i imagefontheight(), gdy zrobie tak:
  1. $font = 5;
  2. $tekst = "Proba";
  3. $img = imagecreatetruecolor(300, 300);
  4. $white = imagecolorallocate($img, 255, 255, 255);
  5. $black = imagecolorallocate($img, 0, 0, 0);
  6. $red = imagecolorallocate($img, 255, 0, 0);
  7. imagefill($img, 0, 0, $red);
  8.  
  9. $width_tekst = strlen($tekst) * imagefontwidth($font);
  10. $tekst_x = (300 - $width_tekst) / 2;
  11. $tekst_y = (100 - imagefontheight($font)) / 2;
  12. imagestring($img, $font, $tekst_x, $tekst_y, $tekst, $white);
  13. header('Content-type: image/gif');
  14. imagegif($img);
  15. imagedestroy($img);

to wszystko dziala jak nalezy, ale gdy zmienie imagestring, na imagettftext i $font zamiast 5 bedzie rowny 'arial.ttf';, to funkcje imagefontwidth i height nie dzialaja.
  1. $font = 'arial.ttf';
  2. $tekst = "Proba";
  3. $img = imagecreatetruecolor(300, 300);
  4. $white = imagecolorallocate($img, 255, 255, 255);
  5. $black = imagecolorallocate($img, 0, 0, 0);
  6. $red = imagecolorallocate($img, 255, 0, 0);
  7. imagefill($img, 0, 0, $red);
  8. $width_tekst = strlen($tekst) * imagefontwidth($font);
  9. $tekst_x = (300 - $width_tekst) / 2;
  10. $tekst_y = (100 - imagefontheight($font)) / 2;
  11. imagettftext($img, 20, 0, $tekst_x, $tekst_y, $white, $fontTTF, $tekst);
  12. header('Content-type: image/gif');
  13. imagegif($img);
  14. imagedestroy($img);

oczywiscie plik arial.ttf jest tam gdzie powinien byc, bo gdy pomine funkcje imagefontwidth i height, to wszystko jest ok, ale sa mi one niezbedne do centrowania tekstu w pionie i poziomie, wiec co mam zrobic? Sa jakies podobne funkcje dla fontow ttf?

Moglbym oczywiscie pozostac przy imagestring zamiast imagettftext, ale nawet jesli uda mi sie znalesc interesujace mnie kroje czcionek w formacie gdf, to i tak nie wiem jak zmieniac rozmiar tych czcionek, bo szukajac w manualu nic na ten temat nie znalazlem.
Takze najprosciej jest uzyc do tego imagettftext, tylko jak te funkcje imagefontwidth i height "przystosowac" do czcionek tff?

Ps. nie moge edytowac, bo dziwne krzaczki mi sie pokazauja, zamiast mojego tekstu. blinksmiley.gif
bleblok
Według manuala PHP: int imagefontheight ( int $font )
Z tego wynika, że nie można sobie ot tak podać nazwy czcionki jako parametru, tylko numer załadowanej już czcionki.
Natomiast ładować możesz sobie bez problemu czcionki .gdf (znów za manualem:
$font = imageloadfont('anonymous.gdf');
echo 'Font height: ' . imagefontheight($font);


Dla ttf pewnie bedziesz musiał użyć imagettfbbox() http://www.php.net/manual/pl/function.imagettfbbox.php
Funkcja zwraca współrzędne boxa okalającego wybrany przez Ciebie tekst z użyciem fontu TTF. Z tablicy wyciągasz interesujące Ciebie współrzędne i odejmujesz od siebie (zależnie od tego który rozmiar Cie interesuje), ale nie testowałem tego winksmiley.jpg
cros
o imageloadfont dobrze wiem, czytalem manuala, ale nie znalazlem jak tak zaladowanej czcionce ustawic rozmiar (font size).
bleblok
Pisałem o czcionkach .gdf .
Ty pisałeś, że masz czcionke TTF, więc musisz użyć funkcji
  1. array imagettfbbox ( float $size , float $angle , string $fontfile , string $text )

W parametrach podajesz rozmiar fontu, kąt nachylenia, link do czcionki, i sam tekst.

Nie wiem czy wcześniej przeczytałeś imagettfbbox jako imagettftext, czy coś? smile.gif

Sprawdz:
  1. $box = imagettfbbox(10, 0, $font, $tekst);
  2. $min_x = min( array($box[0], $box[2], $box[4], $box[6]) );
  3. $max_x = max( array($box[0], $box[2], $box[4], $box[6]) );
  4. $min_y = min( array($box[1], $box[3], $box[5], $box[7]) );
  5. $max_y = max( array($box[1], $box[3], $box[5], $box[7]) );
  6. $width = ( $max_x - $min_x ); // dlugosc tekstu
  7. $height = ( $max_y - $min_y ); // wysokosc tekstu


Trochę zamieszane jak na same wyciąganie rozmiaru zajmowanego przez tekst - może jest łatwiejsza opcja, ale powinno działać.
cros
Tak czytalem juz o tym imagettfbox (czy jakos tak), ale w poprzednim poscie zapytalem sie, czy da sie ustawic rozmiar czcionki w imagestring tak jak w imagettftext, czy jakos w podobie.
Bo w sumie do tego co chce zrobic, wystarczyl by mi imagestring nawet z ta default'owa czcionka, ale rozmiar musi byc min. 20px takze nie wiem czy da sie ustawic w tym font size.
bleblok
Nie wiem czy przypadkiem imagestring() nie wykorzystuje czcionek o stałym rozmiarze. Domyślnie jest chyba ich zdefiniowanych 5 z czego najwieksza to ta o identyfikatorze 5.
O ile nie zrobisz sobie własnej (większej) czcionki w formacie gdf (albo nie znajdziesz takiej) to bedziesz chyba musiał używać metody z ttf.
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.