Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php]imagettftext() i polskie znaki
Forum PHP.pl > Forum > PHP
wizu
Witam. Chciałbym dodać tekst do obrazka. Tekst jest przesyłany z formularza.
Kod
$text = htmlspecialchars($_POST['text']);
   imagettftext($stary, 10, 0, 29, 20, $kolor, "arial.ttf" , $text);

I na obrazku mam jakieś takie dziwne coś. Gdy podaje tekst normalnie, to jest ok. Jednak, gdy tekst jest przesyłany POST-em, to już się psuje. Czcionka oczywiście jest na serwerze. Dzięki za pomoc.

Lepiej to wyjaśniłem w poście 7.
nowotny
"takie dziwne coś" to nie jest określenie problemu... Jakie dziwne coś...? i po co stosujesz htmlspecialchars...?
wizu
htmlspecialchars używam, żeby mi ktoś czegoś nieoczekiwanego nie podał. A takie coś dziwne, to wydawało mi się, że każdy załapie o co mi chodzi. Jednak jeśli nie, to chodzi mi o to, że zamiast:
ęóąśłżźćń mam

Czyli po prostu nie ma polskich znaków. A w czcionce są. Próbowałem już chyba wszystkiego co znalazłem na necie, jednak nic nie pomoga. A iconv() nie chce używac, bo za bardzo obciąża serwer.
MajareQ
Nie da rady. Nie można stosować w adresie polskich znaków. Zatem GET odpada.

Chociaż... przyjrzyj się jak to rozwiązała Wikipedia.

Przykład -> http://pl.wikipedia.org/wiki/Strona_g%C5%82%C3%B3wna

chodzi o "Strona Główna"

http://www.hotscripts.pl/produkt-2153.html
wizu
Hmm to jest pomysł. Dzięki wilekie.
MajareQ
Jak dojdziesz do tego jak to zrobić to podziel się wiedzą i powiedz czy coś pomogłem winksmiley.jpg
wizu
Jasne, tylko to się przyda później. Narazie mam przesyłanie POST-em. Pomyliłem się w pierwszym poscie. Wybacz. Chciałem sobie potestować, jak to jest z tym tekstem. I gdy zamiast dodawac tekst do obrazka, wyświetliłem $_POST['text'], to polskie znaczki działają tak jak powinny. Jednak, gdy tylko próbóję je narzucić na obrazek, to juz jest tak jak na zdjęciu. Więc tekst jest normalny po przesłaniu, tylko przy wyświetlaniu coś się psuje. Nie wiem, czy ta funkcja nie potrafi tego zrobić czy co? Wie ktoś coś na ten temat? Dzięki.
Edit
Teraz zaobserwowałem coś jeszcze dziwniejszego. Gdy wyświetlam, to w ten sposób:
Kod
imagettftext($stary, 10, 0, 29, 20, $kolor, "arial.ttf" , 'ąść');

To widzę to:
A gdy w poprzednim pliku index.html mam taki formularz (wpisuje w nim też ąść) :
Kod
<form action="dalej.php" method="POST">
<input type=text name="text" size="50"/>
<input type=submit value="Dalej ->"/>
</form>

A w pliku dalej.php dodaje napis na obrazek tak:
Kod
$text = $_POST['text'];
imagettftext($stary_plik, $fontsiz, 0, $rozmiarx, $rozmiary, $kolor, "arial.ttf" , $text);

To widzę to:

Teraz już sam nic nie wiem. Pomoże ktoś, co zrobić, aby wyświetlały siepolskie znaki na obrazku? Dzięki.
nowotny
Jakiego kodowania używasz na stronie...? tekst musi być w UTFie...

Przykład z manuala który u mnie działa:
  1. <?php
  2. header("Content-type: image/png");
  3.  
  4. // Create the image
  5. $im = imagecreatetruecolor(400, 30);
  6.  
  7. // Create some colors
  8. $white = imagecolorallocate($im, 255, 255, 255);
  9. $grey = imagecolorallocate($im, 128, 128, 128);
  10. $black = imagecolorallocate($im, 0, 0, 0);
  11. imagefilledrectangle($im, 0, 0, 399, 29, $white);
  12.  
  13. // The text to draw
  14. $text = 'ęółąśżźćńć ĘÓŁĄŚŻŹĆŃ';
  15. // Replace path by your own font path
  16. $font = 'arial.ttf';
  17.  
  18. // Add some shadow to the text
  19. imagettftext($im, 20, 0, 11, 21, $grey, $font, $text);
  20.  
  21. // Add the text
  22. imagettftext($im, 20, 0, 10, 20, $black, $font, $text);
  23.  
  24. // Using imagepng() results in clearer text compared with imagejpeg()
  25. imagepng($im);
  26. imagedestroy($im);
  27. ?>

Tylko musisz uważać żeby plik zapisać w UTFie...
wizu
W tym pliku php, który wyświetla obrazek nie mogę sobie zmienić kodowania. Bo w nim nie mogę użyć żanego znacznika html. Co masz na myśli piszać "Tylko musisz uważać żeby plik zapisać w UTFie..." bo nie bardzo zrozumiałem o jaki plik chodzi. Dzięki
MajareQ
Nie możesz użyć meta? Dlaczego?
wizu
Bo używam header("Content-type: image/png");
Już same <html></html> psują wyświetlenie grafiki.
A co do pomysłu nowotny, to dalej są te dziwne znaczki. Może to to, że plik nie jest zapisany w UTF-ie. Jednak nie wiem jak to zmienić tongue.gif Dzięki jeszcze raz za pomoc.
nowotny
Cytat(wizu @ 16.02.2008, 22:46:02 ) *
Bo używam header("Content-type: image/png");
Już same <html></html> psują wyświetlenie grafiki.

Nie w tym pliku, tylko w tym z którego przesyłasz tekst... a kodowanie sobie ustaw w edytorze... żeby plik php był w utf zakodowany... jaki masz edytor...?
wizu
Heh notatnik tongue.gif Dobra, przerzuce się na pajączka.
MajareQ
przeżuć się na Notepad++ lub Notatnik SP
wizu
Panowie chwała wam za pomoc smile.gif Już wszystko jest ok. W pliku index.html, gdzie był formularz trzeba było zmienić kodowanie na UTF-8. Dzięki jeszcze raz smile.gif
MajareQ
Z ciekawości, mógłbyś mi wysłać link na PW? winksmiley.jpg
wizu
Co do polskich znaków metodą GET, to juz rozwiązałem ten problem. (A tak między nami, to wikipedia sobie tez z nimi nie radzi tongue.gif)
Wystarczy wstawić takie cos i wszystko śmiga:
Kod
$text = urlencode($_GET['text']);
$trans = array("+" => " ", "%EA" => "ę", "%F3" => "ó", "%B9" => "ą", "%9C" => "ś", "%B3" => "ł", "%BF" => "ż", "%9F" => "ź", "%E6" => "ć", "%F1" => "ń", "%3F" => "?", "%21" => "!");
echo strtr($text, $trans);
nowotny
Cytat(wizu @ 17.02.2008, 12:12:05 ) *
  1. <?php
  2. $trans = array("+" => " ", "%EA" => "ę", "%F3" => "ó", "%B9" => "ą", "%9C" => "ś", "%B3" => "ł", "%BF" => "ż", "%9F" => "ź", "%E6" => "ć", "%F1" => "ń", "%3F" => "?", "%21" => "!");
  3. ?>

Od tego jest funckja urldecode" title="Zobacz w manualu PHP" target="_manual... :/
Tadek888
Witajcie
stary ten wątek ale zagaję...

Mam podobny problem chociaż może tu chodzić o naturę czcionki.
Używam dokładnie tego samego skryptu który jest jako przykład w manualu php jak wyszukamy : imagettftext

Jak używam czcionki arial to wszystko gra. Jeśli użyję Trajan Pro to polskie znaki zamieniają się w krzaki dokładniej w prostokąt z poprowadzonymi przekątnymi.
Jak zrobię windowsowy podgląd czcionki trajan to są polskie znaki. To samo jeśli użyję jej w photoshopie. Pytanie czemu nie w imagettftext ?

Pozdrawiam

Już wiadomo

trajan początkowo był w OTF - tak więc polskie znaki zaczęły działać jak się wrzuciło plik czcionki W TTF jak sama nazwa funkcji php mowi smile.gif)
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.