Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Wyświetlanie Czcionek Utf8 W Obrazku
piernik
post
Post #1





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 9.07.2004

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


Tworzę dynamicznie obrazek - wykres. Legenda będzie w wielu językach - równiez w chińskim dlatego użyłem kodowania utf8.

Przy wyświetlaniu tekstu na obrazku pokazują mi się krzaczki zamiast np. polskich liter. Mozna jakoś przekonwertować te znaki by php wyświetlał je w utf8??
Go to the top of the page
+Quote Post
carramba
post
Post #2





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 29.10.2003
Skąd: Toruń

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


w gd2 zeby wyswietlic znaczki trzeba przekonwertowac utf-8 na unicode
za pomca funkcj :

  1. <?php
  2.  
  3.  
  4. /*===============================================================================
  5. /* utf8ToUnicode = zamienia znaki utf8 na unicode
  6. /*===============================================================================
  7. /
  8. function utf8ToUnicodeEntities ($source) {
  9.    // array used to figure what number to decrement from character order value 
  10.    // according to number of characters used to map unicode to ascii by utf-8
  11.    $decrement[4] = 240;
  12.    $decrement[3] = 224;
  13.    $decrement[2] = 192;
  14.    $decrement[1] = 0;
  15.    
  16.    // the number of bits to shift each charNum by
  17.    $shift[1][0] = 0;
  18.    $shift[2][0] = 6;
  19.    $shift[2][1] = 0;
  20.    $shift[3][0] = 12;
  21.    $shift[3][1] = 6;
  22.    $shift[3][2] = 0;
  23.    $shift[4][0] = 18;
  24.    $shift[4][1] = 12;
  25.    $shift[4][2] = 6;
  26.    $shift[4][3] = 0;
  27.    
  28.    $pos = 0;
  29.    $len = strlen ($source);
  30.    $encodedString = '';
  31.    while ($pos < $len) {
  32.  $asciiPos = ord (substr ($source, $pos, 1));
  33.  if (($asciiPos >= 240) && ($asciiPos <= 255)) {
  34.  // 4 chars representing one unicode character
  35.  $thisLetter = substr ($source, $pos, 4);
  36.  $pos += 4;
  37.  }
  38.  else if (($asciiPos >= 224) && ($asciiPos <= 239)) {
  39.  // 3 chars representing one unicode character
  40.  $thisLetter = substr ($source, $pos, 3);
  41.  $pos += 3;
  42.  }
  43.  else if (($asciiPos >= 192) && ($asciiPos <= 223)) {
  44.  // 2 chars representing one unicode character
  45.  $thisLetter = substr ($source, $pos, 2);
  46.  $pos += 2;
  47.  }
  48.  else {
  49.  // 1 char (lower ascii)
  50.  $thisLetter = substr ($source, $pos, 1);
  51.  $pos += 1;
  52.  }
  53.  
  54.  // process the string representing the letter to a unicode entity
  55.  $thisLen = strlen ($thisLetter);
  56.  $thisPos = 0;
  57.  $decimalCode = 0;
  58.  while ($thisPos < $thisLen) {
  59.  $thisCharOrd = ord (substr ($thisLetter, $thisPos, 1));
  60.  if ($thisPos == 0) {
  61.  $charNum = intval ($thisCharOrd - $decrement[$thisLen]);
  62.  $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);
  63.  }
  64.  else {
  65.  $charNum = intval ($thisCharOrd - 128);
  66.  $decimalCode += ($charNum << $shift[$thisLen][$thisPos]);
  67.  }
  68.  
  69.  $thisPos++;
  70.  }
  71.  
  72.  if ($thisLen == 1)
  73.  $encodedLetter = \"&#\". str_pad($decimalCode, 3, \"0\", STR_PAD_LEFT) . ';';
  74.  else
  75.  $encodedLetter = \"&#\". str_pad($decimalCode, 5, \"0\", STR_PAD_LEFT) . ';';
  76.  
  77.  $encodedString .= $encodedLetter;
  78.    }
  79.  
  80.    return $encodedString;
  81. }
  82. ?>
Go to the top of the page
+Quote Post
piernik
post
Post #3





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 9.07.2004

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


Dzięki - wypróbuję, ale czy zadziała to nawet dla czcionek po chińsku??

Mam równiez inny problem pewno w przeglądarce wyglądałoby to ok, ale tak się nie dzieje na obrazie wygenerowanym przez php. Mam mianowicie kody znaków a nie same kody (np. Od itd.)

Ten post edytował piernik 7.09.2004, 06:44:49
Go to the top of the page
+Quote Post
carramba
post
Post #4





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 29.10.2003
Skąd: Toruń

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


unicode wyswietli ci nawet tajwanski pod warunkiem ze czcionka za pomoca ktorej generujesz obrazek bedzie zawierala tajwanskie znaki. nie bardzo rozumiem twoje drugie pytanie
Go to the top of the page
+Quote Post
piernik
post
Post #5





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 9.07.2004

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


No tak - nie zobaczyłem jak wygląda mój post - kody zostały zamienione na znaki - tak jak to jest w HTMLu, ale w obrazku jest inaczej...
Oto on:

(IMG:http://www.tarnowskiegory.strefa.pl/sklep/wykres.jpg)

Jak widzisz kody nie zostały zmienione na litery... Wiesz jak to poprawić?
Go to the top of the page
+Quote Post
carramba
post
Post #6





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 29.10.2003
Skąd: Toruń

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


a mozesz mi wyslac na meila albo wkleic tutaj kod funkcji generujacej ?
przedwczoraj generowalem obrazki do jakiejs strony i unicode zalatwial
sprawe i apropo uzywasz gd czy gd2 ? generowany jest jpg czy png ?

ja takie cos zrobilem w ten sposob :

  1. <?php
  2.  
  3. $rysunek = ImageCreateFromPng('jakisobrazek.png');
  4.  
  5. $bialy = ImageColorAllocate($rysunek, 225, 255, 255);
  6. $string = iso88592toUtf8urls_decode($string);
  7. $font = '/sciezka/verdana.ttf';
  8.  
  9. ImageTTFText ($rysunek, 12, 0, 10, 10, $bialy, $font, $string);
  10. ?>


//powiadom przegl&plusmn;dark&ecirc; o zmiarze przes&sup3;ania rysunku
header("Content-type: image/png");
//prze&para;lij rysunek do przegl&plusmn;darki...
ImagePng($rysunek);
//zwolnij zasoby przydzielone do rysunku
ImageDestroy($rysunek);[/php]

Ten post edytował carramba 8.09.2004, 14:40:49
Go to the top of the page
+Quote Post
piernik
post
Post #7





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 9.07.2004

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


Używam gd2, generuję png a jeżeli chodzi o kod to trudno będzie go przesłać bo korzystam z systemu PhpAdsNew, który generuje mi ten wykres. System ten jest dość duży i zapewne nie będzie chodził bez instalacji...

Patrzałem na twój kod i jedyna różnica jest taka że ja korzystam z funkcji imagestring(), która generuje napis. Funkcja ta nie potrzebuje plików czcionek bo korzysta z systemowych serwera. Czy to może być powodem nie zmieniania tych znaków??
Go to the top of the page
+Quote Post
carramba
post
Post #8





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 29.10.2003
Skąd: Toruń

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


tak to moze byc powodem, sproboj przez TTF, powinno pomoc.
Go to the top of the page
+Quote Post
piernik
post
Post #9





Grupa: Zarejestrowani
Postów: 65
Pomógł: 0
Dołączył: 9.07.2004

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


Dzięki za pomoc...
Zrobiłem to jednak na ttf'ie - załadowałem plik arilauni, który ma 23 MB:) Wszystkie znaki utfa:) Ale na szczęście działa - jeszcze raz dzięki za pomoc...
Go to the top of the page
+Quote Post
carramba
post
Post #10





Grupa: Zarejestrowani
Postów: 74
Pomógł: 0
Dołączył: 29.10.2003
Skąd: Toruń

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


no problemo. apropo masz moze zestaw arial,arialb,ariali,arialbi ze znakami ISO-8859-2 ? potrzebuje czegos takiego do generowania PDF.
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 - 01:35