Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Centrowanie w generowanej grafice
Project
post
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
Go to the top of the page
+Quote Post
spenalzo
post
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ć.
Go to the top of the page
+Quote Post
Project
post
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?
Go to the top of the page
+Quote Post
spenalzo
post
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?
Go to the top of the page
+Quote Post
spenalzo
post
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.
Go to the top of the page
+Quote Post
garry
post
Post #6





Grupa: Zarejestrowani
Postów: 10
Pomógł: 0
Dołączył: 28.03.2003

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


Albo niech zastosuje proporcjonalną czcionkę ;)
Go to the top of the page
+Quote Post
runahead
post
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.
Go to the top of the page
+Quote Post
Cudi
post
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 :]
Go to the top of the page
+Quote Post
spenalzo
post
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? :-)
Go to the top of the page
+Quote Post
Project
post
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
Go to the top of the page
+Quote Post
scanner
post
Post #11





Grupa: Zarząd
Postów: 3 503
Pomógł: 28
Dołączył: 17.10.2002
Skąd: Wrocław




Wpierw:
http://php.net/manual/pl/function.imageloadfont.php
dopiero potem:
http://php.net/manual/pl/function.imagefontwidth.php
http://php.net/manual/pl/function.imagefontheight.php
Go to the top of the page
+Quote Post
Project
post
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)
Go to the top of the page
+Quote Post
scanner
post
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?
Go to the top of the page
+Quote Post
Project
post
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
Go to the top of the page
+Quote Post
Cudi
post
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)
Go to the top of the page
+Quote Post
spenalzo
post
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.
Go to the top of the page
+Quote Post
Cudi
post
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ć ?
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: 4.10.2025 - 01:06