Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Funkcja imagettftext
Forum PHP.pl > Forum > PHP
norbitbg
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
cudny
  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.
norbitbg
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);

cudny
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ć tongue.gif zamień poniższe warunki na instrukcję switch, według mojego opisu 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 smile.gif ?
I do tego warunek isset(); sprawdzany tylko raz, i switch() (jak podaje manual) jest bardziej wydajny smile.gif
norbitbg
Oto efekt:

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


Dzięki za rady smile.gif
cudny
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
norbitbg
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ćsad.gif Zmiany kodowania pliku, który generuje obrazek, też próbowałem...bez skutku sad.gif No nic, dzięki za pomoc...Szukam dalej
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.