Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]PHP GD i imagefontwidth - problem z czcionkami TTF
cros
post 11.08.2010, 14:46:10
Post #1





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

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


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
Go to the top of the page
+Quote Post
bleblok
post 11.08.2010, 15:24:58
Post #2





Grupa: Zarejestrowani
Postów: 18
Pomógł: 6
Dołączył: 15.09.2009

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


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
Go to the top of the page
+Quote Post
cros
post 11.08.2010, 16:49:42
Post #3





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

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


o imageloadfont dobrze wiem, czytalem manuala, ale nie znalazlem jak tak zaladowanej czcionce ustawic rozmiar (font size).
Go to the top of the page
+Quote Post
bleblok
post 11.08.2010, 17:02:15
Post #4





Grupa: Zarejestrowani
Postów: 18
Pomógł: 6
Dołączył: 15.09.2009

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


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ć.
Go to the top of the page
+Quote Post
cros
post 11.08.2010, 17:12:05
Post #5





Grupa: Zarejestrowani
Postów: 164
Pomógł: 21
Dołączył: 21.08.2009

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


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.
Go to the top of the page
+Quote Post
bleblok
post 11.08.2010, 17:40:32
Post #6





Grupa: Zarejestrowani
Postów: 18
Pomógł: 6
Dołączył: 15.09.2009

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


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.
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 15.05.2025 - 12:54