Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> GD, IMagick. i Chińskie znaki w utf-8
x_O
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 8.12.2006

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


Witam,

Mam problem dość osobliwy pewnie na tą część świata. Potrzebuję wyświetlić chińskie znaki zakodowane w utf-8 za pomocą biblioteki GD lub Imagic.
Żadna z nich nie pozwala mi w tym momencie nawet zbliżyć się do tematu. Tekst który potrzebuję wyświetlić mam zapisany w pliku, nie wklejam go kod w żaden sposób, a plik na pewno jest dobrze zdefiniowany, bo kiedy używam do wyświetlenia html chinskie krzaki są wyświetlone poprawnie.

Przykładowe kody:
1 IMagick, jakiś tutorialowy. zmieniłem tylko kodowanie i tekst, który jest pobierany z pliku
  1. <?php
  2. $image = new Imagick();
  3. $draw = new ImagickDraw();
  4. $pixel = new ImagickPixel( 'gray' );
  5. $image->newImage(800, 75, $pixel);
  6. $pixel->setColor('black');
  7. $text = file_get_contents('text/5FB4-5FFA.txt');
  8. //$draw->setFont('fonts/ch.ttf');
  9. $draw->setFontSize( 30 );
  10. $image->annotateImage($draw, 10, 45, 0, $text);
  11. $image->setImageFormat('png');
  12. header ('Content-type: image/png; charset=utf-8');
  13. echo $image;
  14. ?>


2. GD
  1. <?php
  2. header('Content-type: image/png; charset=utf-8');
  3. $im = imagecreatetruecolor(400, 20);
  4. $white = imagecolorallocate($im, 238, 238, 238);
  5. $black = imagecolorallocate($im, 21, 21, 21);
  6. imagefilledrectangle($im, 0, 0, 399, 29, $black);
  7. $text = file_get_contents('text/3400-343A.txt');
  8. $font = 'fonts/ch.ttf';
  9. imagettftext($im, 14, 0, 10, 16, $white, $font, $text);
  10. imagepng($im);
  11. imagedestroy($im);
  12. ?>


Dzięki

x_O

Ten post edytował x_O 29.05.2008, 13:52:06
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 8)
devnul
post
Post #2





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


zdaje się że problem ten jest opisany szerzej na bugs.php.net
jeśli jeszcze trzeźwo myślę i pamięć mnie nie zawodzi to pełne wsparcie dla UTF'a ma pojawić się wraz z php6 a wraz z nim prawdopodobnie znikną tego typu problemy.
Go to the top of the page
+Quote Post
x_O
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 8.12.2006

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


Słyszałem coś o niepełnym wsparciu dla utf-8 w php.
Jednak nie do końca jestem przekonany, ze to to. Te znaczki mi się całkiem świetnie otwierają i wyświetlają w html. Tylko biblioteki do obrazków jakoś nie działają. Chyba dla mnie to nis do konca zrozumiale. Może pominąłem jakąś oczywistą rzecz??

Panowie i Panie, jakieś pomysły jeszcze?

Ten post edytował x_O 29.05.2008, 23:53:20
Go to the top of the page
+Quote Post
devnul
post
Post #4





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


html to nie php html jest interpretowany przez parser user agenta (przeglądarki, robota itp) php przez własne mechanizmy które jak narazie wspierają kodowanie znaków 8-bitowych
przykład?
spróbuj w php "pociąć" po literce tekst zakodowany utf'em z ogonkami lub chińskimi znakami sotsując do tego celu np coś podobnego
  1. <?php
  2. $string="święta wielkanocne"; //
  3. echo "$string \n";
  4. echo $string{1};
  5. ?>

następnie popatrz co wyświetli się w źródle wygenerowanym takim skryptem.
Go to the top of the page
+Quote Post
x_O
post
Post #5





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 8.12.2006

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


Hej,

Rozumiem twój punkt widzenia. To jeszcze zapytam czy jak wyświetlam ten znaczki z pliku

  1. <?php
  2. <html>
  3. <head>
  4. <meta http-equiv="content-type" content="text/html; charset=utf-8">
  5. </head>
  6. <body>
  7. <?php
  8. echo file_get_contents('text/3400-343A.txt');
  9. ?>
  10. </body>
  11. </html>
  12. ?>


To jest to przepuszczane przez PHP i moim zdaniem efekt powinien być podobny jak w przypadku GD, jednak tutaj krzaczki mają się świetnie i się wyświetlają tak jak powinny.

Może ktoś jeszcze do dyskusji?

x_O

Ten post edytował x_O 30.05.2008, 09:41:12
Go to the top of the page
+Quote Post
devnul
post
Post #6





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


nie rozumiesz widzę. przepuszczasz przez php ciąg znaków a znaczniki zakodowane utf'em to w uproszczeniu nic innego jak 8bitowce z dodatkowymi bitami przyklejonymi do znaków specjalnych. php zwyczajnie wypluwa to co widzi w w pliku, natomiast w wypadku gd php musi wyodrębnić po znaku z ciągu żeby na jego miejsce podstawić odpowiedni znak z wybranej czcionki i tu się zaczynają problemy na zasadzie jaką przedstawiłem w poście wyżej.
Go to the top of the page
+Quote Post
x_O
post
Post #7





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 8.12.2006

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


No nie skumałem przyznam się szczerzę. Myślałem że skoro używam fontów chińskich w GD to też "jakoś" za działa.
Fajnie, dzięki za pomoc, a może masz jakiś pomysł na alternatywę do tego jak wyświetlić chińskie znaki w grafice?
Go to the top of the page
+Quote Post
devnul
post
Post #8





Grupa: Zarejestrowani
Postów: 1 470
Pomógł: 75
Dołączył: 21.09.2005
Skąd: że znowu

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


szczerze to przychodzą mi do głowy dwie rzeczy. przkazywać dane do wygenerowania obrazka jakiejś zewnętrznej aplikacji (np czymś w pythonie czy perlu) lub (drastyczne (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif) ) zrobić sobie bitmapy z chińskimi krzaczkami i używać ich zamiast czcionki (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
x_O
post
Post #9





Grupa: Zarejestrowani
Postów: 8
Pomógł: 0
Dołączył: 8.12.2006

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


Poprawna czcionka ściągnięta z adresu jakiegoś urzędu w chinach załatwiła sprawę.

Szukać czcionek najlepiej które mają około 35,000 znaków w UTF.

Dzięki
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: 23.08.2025 - 04:39