![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 0 Dołączył: 2.04.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Mam pytanie a odpowiedzi nie widze w manualu... - to tak dla formalnosci (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) A wiec do rzeczy: W jaki sposob wysrodkowac text w generowanej grafice?? Wyobrazcie sobie np jpga o wymiarach 40x40 px i teraz jak wysrodkowac generowane texty (cyfry) na nim. W gre wchodza tylko liczby jedno i dwucyfrowe ale problem polega na tym ze cyfra 1 zajmuje duzo mniejszy obszar niz cyfre 4 czy 6... Ktos z was ma jakies rozwiazanie tego problemu (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) ? Z gory dziekuje za (p)odpowiedzi. Pozdrawiam |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat W jaki sposob wysrodkowac text w generowanej grafice??
Wyobrazcie sobie np jpga o wymiarach 40x40 px i teraz jak wysrodkowac generowane texty (cyfry) na nim. W gre wchodza tylko liczby jedno i dwucyfrowe ale problem polega na tym ze cyfra 1 zajmuje duzo mniejszy obszar niz cyfre 4 czy 6... A może w taki sposób: obliczasz ile pikseli zajmuje tekst. Dzielisz szerokość obrazka przez dwa i od tego odejmujesz szerokość tekstu podzieloną przez dwa - wartość jaka wyjdzie wstawiasz do funkcji jako początek tekstu. [php:1:3bd259d495]<?php $wys=40; $szer=40; $szer_txt=8; $wys_txt=5; imagestring($image, 1,floor(($szer/2)-($szer_txt/2)),floor(($wys/2)-($wys_txt/2)),$tekst,$kolor); ?>[/php:1:3bd259d495] Nie wiem czy to wycentruje tekst, ale można spróbować. |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 0 Dołączył: 2.04.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
chyba nie za bardzo zrozumiales moj problem!
Jak znalezc srodek obrazka to ja wiem... (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) problem polega na tym ze liczba '11' i liczba '66' maja rozna liczbe pixeli! Rozwiazaniem problemu bylo by zmierzenie dlugosci (w px) generowanego napisu! ale jak to zrobic?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) (IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Ma ktos jakis pomysl? |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
A napis jest zwykłą czcionką czy TTF?
|
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Jednak manual się kłania:
Cytat int imagefontwidth ( int font) - Returns the pixel width of a character in font.
Zwraca szerokość czcionki numer X. Innej możliwości nie ma, chyba że ręcznie policzysz ile pikseli zajmuje każdy znak. |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 10 Pomógł: 0 Dołączył: 28.03.2003 Ostrzeżenie: (0%) ![]() ![]() |
Albo niech zastosuje proporcjonalną czcionkę ;)
|
|
|
![]()
Post
#7
|
|
Grupa: Zarejestrowani Postów: 8 Pomógł: 0 Dołączył: 18.05.2003 Ostrzeżenie: (0%) ![]() ![]() |
Cytat Albo niech zastosuje proporcjonalną czcionkę (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Podpisuje sie pod tym pomyslem, inna metoda to po prostu zmierzenie i zapisanie w tablicy szerokosci kazdego znaku. |
|
|
![]()
Post
#8
|
|
Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
Nie zawsze to czego szukasz znajdziesz w samym manualu, najlepsze rozwiązania są w komentarzach do związanego z nim tematu. Kiedy bawiłem sie z funkcjami czcionek znalazłem w komentarzu funkcje która centrowała dowolną czcionke, dzieliła ją na wiersze itd. Musisz tylko troche poszukać, bo ja niestety nie jestem teraz w stanie przypomnieć sobie gdzie to dokładnie było :]
|
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Cytat Podpisuje sie pod tym pomyslem, inna metoda to po prostu zmierzenie i zapisanie w tablicy szerokosci kazdego znaku.
No a o czym my tu piszemy? :-) |
|
|
![]()
Post
#10
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 0 Dołączył: 2.04.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Witam!
Powrocilem do sprawy centrowania generowanej grafiki i czegos nadal nie rozumiem! oto wypis z manuala: Cytat int imagefontwidth ( int font) - Returns the pixel width of a character in font.
ok wszystko pieknie ale jak zbadac np dlugosc ciagu znakow "912" jezeli uzywa sie wlasnej czcionki?? Manula raczej nie obfituje w ciekawe przyklady co gorsza nie jest pokazane ani jedno zastosowanie tej funkcji... Moze ktos zaprezentowac jakis fragment kodu z praktycznym zastosowaniem tego cuda?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Z gory wielkie dzieki! POZDRAWIAM |
|
|
![]()
Post
#11
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
|
|
|
![]()
Post
#12
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 0 Dołączył: 2.04.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Przegladalem juz manuala i mam juz skrypt generujacy grafike...
Tylko problem ze ustawiam ja niemal ze na sztywno.. tzn sprawdzam ile znaow ma dany ciag a nie ile ma pixeli!!! (IMG:http://forum.php.pl/style_emoticons/default/sad.gif) Jak mam sprawdzic ile dany ciag w wybranej przezemnie czcionce ma pixel?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) |
|
|
![]()
Post
#13
|
|
Grupa: Zarząd Postów: 3 503 Pomógł: 28 Dołączył: 17.10.2002 Skąd: Wrocław ![]() |
Sprawdz ile pixeli ma każdy znak, zapisz to sobie w tablicy, zapisz tablice na dysku - masz zrobiny cache.
I teraz sumujesz po kolei odpowiednie elementy tej tablicy do jakiejs zmiennej. Później mogę napisać Ci kod, jeśli chcesz? |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 86 Pomógł: 0 Dołączył: 2.04.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Chetnie zobacze jakis fragment kodu...
Choc nie ukrywam ze zacczynam juz pisac wlasny! Nie ukrywam ze z przyjemnoscia porowna nasze kody i na ich podstawie stworze ostateczna forme kodu (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) Z gory wielkie dzieki za poswiecenie (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg) Pozdrawiam |
|
|
![]()
Post
#15
|
|
Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
A mnie sie udało, za pomocą funkcji ImageTTFbBox, dzięki której uzyskałem szerokość ramki w której znajdzie sie mój tekst, oraz ImageTTFText, za pomocą której wstawiłem tekst do obrazka:
[php:1:7cf4218518]<?php $w = 250; $h = 250; $txt = 'Tekst :]'; $fnt = 'Times.ttf'; $size = 35; $angle = 0; $im = ImageCreate ($w, $h); $bgcolor = ImageColorAllocate ($im, 0x77, 0x77, 0x77); $font = ImageColorAllocate ($im, 0x00, 0x00, 0x00); $box = ImageTTFBBox($size, $angle, $fnt, $txt); $x = ($w - ($box[2] - $box[0])) / 2; $y = ($h - ($box[1] - $box[7])) / 2; $y -= $box[7]; $text = ImageTTFText($im, $size, $angle, $x, $y, $font, $fnt, $txt); Imagepng($im, 'pic.png'); ImageDestroy ($im); echo '<IMG SRC="pic.png">'; ?>[/php:1:7cf4218518] Update: A w komentarzach do funkcji ImageTTFBBox() jest jeszcze kilka przykładów, które dopiero teraz zauważyłem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) |
|
|
![]()
Post
#16
|
|
Grupa: Zarejestrowani Postów: 2 064 Pomógł: 1 Dołączył: 22.01.2003 Skąd: Poznań Ostrzeżenie: (0%) ![]() ![]() |
Dlatego właśnie pytałem się o rodzaj czcionki...
Jak jest zwykła czcionka php to robisz sobie tak: [php:1:120205f764]<?php $string="Bla bla bla!"; $dlugosc=(imagefontwidth("4")*strlen($string)); // lub $font=imageloadfont("font"); $string="Bla bla bla!"; $dlugosc=(imagefontwidth($font)*strlen($string)); ?>[/php:1:120205f764] a jak TTF to wg przykladu Cudi'ego. |
|
|
![]()
Post
#17
|
|
Administrator planeta/IRC Grupa: Przyjaciele php.pl Postów: 385 Pomógł: 0 Dołączył: 19.04.2003 Skąd: Zabrze Ostrzeżenie: (0%) ![]() ![]() |
Ale niestety, mój przykład nie jest doskonały, bo działa tylko gdy $angle = 0. Przy większych kątach napis będzie coraz bardziej na środku, bo php nie obraca względem miejsca tekstu, tylko względem lewego dolnego rogu. Wie ktoś co zrobić żeby to naprawić/zmienić ?
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 4.10.2025 - 01:06 |