Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Funkcja imagettftext
norbitbg
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.11.2011

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


Witam,
Porzebuję pomocy z funkcją imagettftext. Może ktoś już się spotkał z tym problemem.

Mianowicie, problem polega na tym, że zamiast polskich znaków, otrzymuję kwadraciki. Oczywiści pierwszy mój pomysł, to kodowanie.
Jednakże do tej funkcji przekazuję tekst poprzez Ajax, więc kodowania UTF-8 mam zapewnione, pomimo tego, polskich znaków brak. (Sprawdziłem kodowanie z pomocą mb_detect_encoding - wyniki: UTF-8)

Więc pewnie problem polega z czcionką...Tylko nie bardzo wiem gdzie. Testowałem na czcionce arial. Dla pewności zmieniłem też nazwę pliku czcionki na inny, no i faktycznie proces php ma do niego uchwyt, więc zapewne z niego korzysta.


Bedę wdzięczy z pomoc

Pozdrawiam
Go to the top of the page
+Quote Post
cudny
post
Post #2





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


  1. array imagettftext ( resource $image , float $size , float $angle , int $x , int $y , int $color , string $fontfile , string $text )


Font file podajesz ? Czy korzystasz z czcionek systemowych ?
Jeśli nie podajesz fontfile to spróbuj określić ścieżkę do fontów.
Jak nie podziała to podaj kod.
Piszesz, że ajaxowo przekazujesz sobie text, a spróbuj go dać na sztywno i sprawdź rezultat.
Go to the top of the page
+Quote Post
norbitbg
post
Post #3





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.11.2011

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


Podaję fonta - arial'a. Tak jak pisałem, php na pewno z niego korzysta, ponieważ process httpd.exe ma do niego uchwyt.

Dawałem też na sztywno tekst, używałem też funkcji iconv(), no i efekt był taki sam.

Poniżej testowty fragment kodu:


  1. $img = new Images;
  2.  
  3. if(isset($_POST['page_dir']))
  4. {
  5. if($_POST['page_dir'] == 'vertical')
  6. {
  7. $img->width = 194;
  8. $img->height = 274;
  9. $img->pageDirection = 'vertical';
  10. }
  11. }
  12.  
  13. $img->new_img = @imagecreatetruecolor($img->width, $img->height);
  14. if($img->width>$img->height)
  15. $img->src_img = @imagecreatefrompng('../resource/blank_vertical.png');
  16. else
  17. $img->src_img = @imagecreatefrompng('../resource/blank_horizontal.png');
  18.  
  19. if($img->new_img && $img->src_img)
  20. {
  21. if(preg_match('/^#[a-zA-Z0-9]{6}$/',$_POST['colorValue']))
  22. {
  23. $img->fontColor = $img->html2rgb($_POST['colorValue']);
  24. }
  25. if(isset($_POST['format_B']) && $_POST['format_B'] == 'bold')
  26. {
  27. $img->fontStyle = 'b';
  28. }
  29. if(isset($_POST['format_I']) && $_POST['format_I'] == 'italic')
  30. {
  31. $img->fontStyle .= 'i';
  32. }
  33. if($_POST['font'] == 'arial')
  34. $img->fontFile = 'arial'.$img->fontStyle.'.ttf';
  35. else if($_POST['font'] == 'times')
  36. $img->fontFile = 'times'.$img->fontStyle.'.ttf';
  37. else if($_POST['font'] == 'verdana')
  38. $img->fontFile = 'verdana'.$img->fontStyle.'.ttf';
  39. else
  40. $img->fontFile = 'arial'.$img->fontStyle.'.ttf';
  41. if((int)$_POST['font-size-value'] >=10 && (int)$_POST['font-size-value'] <=72)
  42. {
  43. $img->fontSize = $_POST['font-size-value'];
  44. }
  45. if(isset($_POST['text-align']) && $_POST['text-align'] == 'left')
  46. $img->textAlign = 'left';
  47. else if(isset($_POST['text-align']) && $_POST['text-align'] == 'right')
  48. $img->textAlign = 'right';
  49. else if(isset($_POST['text-align']) && $_POST['text-align'] == 'center')
  50. $img->textAlign = 'center';
  51.  
  52. // $img->userText = explode("\r\n",$_POST['userText']);
  53. $img->userText = $_POST['userText'];
  54.  
  55. ///////////////////////////////////////////////////////////////////////////////////////////////
  56. @imagealphablending($img->new_img, false);
  57. @imagesavealpha($img->new_img, true);
  58. @imagecopy($img->new_img, $img->src_img, 0, 0, 0, 0, $img->width, $img->height);
  59. @imagedestroy($img->src_img);
  60. $img->fnFontColor = @imagecolorallocate($img->new_img, $img->fontColor[0], $img->fontColor[1], $img->fontColor[2]);
  61. @imagettftext($img->new_img, $img->fontSize, 0, 50, 20, $img->fnFontColor, $img->fontFile, $img->userText);
  62. @imagepng($img->new_img,'test.png');
  63. @imagedestroy($img->new_img);

Go to the top of the page
+Quote Post
cudny
post
Post #4





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Weź no na początku pliku daj:
echo '<pre>';
print_r($_POST);
echo '</pre>';
i wyświetl to w konsoli, zobaczymy czy się wykrzacza.

A jeśli mogę coś zasugerować (IMG:style_emoticons/default/tongue.gif) zamień poniższe warunki na instrukcję switch, według mojego opisu (IMG:style_emoticons/default/smile.gif)

  1. if($_POST['font'] == 'arial')
  2. $img->fontFile = 'arial'.$img->fontStyle.'.ttf';
  3. else if($_POST['font'] == 'times')
  4. $img->fontFile = 'times'.$img->fontStyle.'.ttf';
  5. else if($_POST['font'] == 'verdana')
  6. $img->fontFile = 'verdana'.$img->fontStyle.'.ttf';
  7. else
  8. $img->fontFile = 'arial'.$img->fontStyle.'.ttf';

Zmień na:
  1. switch($_POST['font']) {
  2. case('times'):
  3. case('verdana'):
  4. $img->fontFile = $_POST['font'].$img->fontStyle.'.ttf';
  5. break;
  6. default:
  7. $img->fontFile = 'arial'.$img->fontStyle.'.ttf';
  8. }

i
  1. if(isset($_POST['text-align']) && $_POST['text-align'] == 'left')
  2. $img->textAlign = 'left';
  3. else if(isset($_POST['text-align']) && $_POST['text-align'] == 'right')
  4. $img->textAlign = 'right';
  5. else if(isset($_POST['text-align']) && $_POST['text-align'] == 'center')
  6. $img->textAlign = 'center';

zmień na:
  1. if(isset($_POST['text-align'])) {
  2. switch($_POST['text-align']) {
  3. case('left'):
  4. case('right'):
  5. case('center'):
  6. $img->textAlign = $_POST['text-align'];
  7. }
  8. }


Prawda, że ładniej (IMG:style_emoticons/default/smile.gif) ?
I do tego warunek isset(); sprawdzany tylko raz, i switch() (jak podaje manual) jest bardziej wydajny (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
norbitbg
post
Post #5





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.11.2011

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


Oto efekt:

Array
(
[font] => arial
[font-size-value] => 20
[colorValue] => #000000
[text-align] => left
[page_dir] => horizontal
[userText] => ąęś
)


Dzięki za rady (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
cudny
post
Post #6





Grupa: Zarejestrowani
Postów: 387
Pomógł: 66
Dołączył: 31.03.2005
Skąd: Kielce

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


Czyli dane poprawnie są przesyłane.
Zakładam, że print_r() użyłeś dokładnie w tym samym pliku co kod generujący obrazek, bo jeśli tak to od strony kodowania, jest ok.
Tylko i wyłącznie kodowanie jest nie w porządku. To nie może być UTF-8 i nie potrafię Ci powiedzieć czemu.
Moim zdaniem plik, w którym znajduje się kod jest zakodowany w czymś innym niż UTF-8
Go to the top of the page
+Quote Post
norbitbg
post
Post #7





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 5.11.2011

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


Właśnie najgorsze jest to, że wszystko wydaje się być ok., a nie chce działać...I tracę już 2 dzień na tym, no i nic nie mogę zrobić(IMG:style_emoticons/default/sad.gif) Zmiany kodowania pliku, który generuje obrazek, też próbowałem...bez skutku (IMG:style_emoticons/default/sad.gif) No nic, dzięki za pomoc...Szukam dalej
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: 25.08.2025 - 23:06