The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Русский язык в графиках GD::Graph
Для рисования русских букв, слов на графиках, построенных модулем perl GD::Graph необходимо все 
переменные с русским тексом перевести в кодировку utf8.
Например модулем Unicode::Map8:
    my $unicoded_txt = Unicode::Map8->new("cp1251");

Дополнительно нужно указать ttf шрифт, поддерживающий unicode. Например виндовый arial.ttf:
    $graph->set_value_font('/usr/share/fonts/arial.ttf', 9);

Опробовано с p5-GD-Graph-1.43 и p5-Unicode-Map8-0.12.
 
03.06.2004 , Автор: dawnshade
Ключи: unicode, image, perl / Лицензия: CC-BY
Раздел:    Корень / Программисту и web-разработчику / Perl / Полезные подпрограммы на Perl / Обработка изображений на Perl

Обсуждение [ RSS ]
  • 1.1, D.A. (??), 12:47, 08/06/2004 [ответить]  
  • +/
    Я сделал проще - нашел ttf шрифт с набором символов koi8-r.... - их предостаточно, и  русский отображается на ура!!!
     
  • 1.2, dawnshade (?), 14:28, 08/06/2004 [ответить]  
  • +/
    Угу, только вот в моем случае была 1251 кодировка :((
    Вот и пришлось наворачивать.
     
  • 1.3, TLoDSnake (?), 17:57, 01/09/2004 [ответить]  
  • +/
    use GD;
    use GD::Graph;
    use GD::Graph::bars;
    use Unicode::Map8;
    my @data = (
        ["1st","2nd","3rd","4th","5th","6th","7th", "8th", "9th"],
        [    1,    2,    5,    6,    3,  1.5,    1,     3,     4],
        [ sort { $a <=> $b } (1, 2, 5, 6, 3, 1.5, 1, 3, 4) ]
    );
    my $graph = GD::Graph::bars->new(400, 300);
    $graph->set_title_font('/data/fonts/arial.ttf', 20);
    my $r = Unicode::Map8->new("cp1251");
    my $title = $r->to16('Ðóññêèé çàãîëîâîê');
    $graph->set(
          x_label           => 'äíè',
          y_label           => 'Õèòû',
          title             => "Ðóññêèé òåêñò $title",
          y_max_value       => 8,
          y_tick_number     => 8,
          y_label_skip      => 2
    ) or die $graph->error;
    my $gd = $graph->plot(\@data) or die $graph->error;

    Русского нету ((

     
     
  • 2.4, AW (?), 16:30, 05/05/2005 [^] [^^] [^^^] [ответить]  
  • +/
    my $title = $r->to16('Заголовок');  - так не работает.....
    а вот так:
    my $title = $r->tou('Заголовок');  - работает.....
     

  • 1.5, falcn (?), 13:43, 09/05/2005 [ответить]  
  • +/
    Так как на моей машине Map8 не работает, пришлось использовать альтернативное решение с более распостранённым модулем
    Этот пример работает с Image::Magick

    use encoding 'cp1251';
    use Unicode::String qw(utf8);
    my $title = utf8('Заголовок');

     
  • 1.6, TLoDSnake (?), 18:23, 05/12/2005 [ответить]  
  • +/
    Решение совсем влоб
    sub stringToDec{
    my $ustring = '';
    for my $char (split //, shift){
    if(ord($char)>127){
    $ustring .= "&#" . (unpack("U", $char)+848) . ";";
    }else{
    $ustring .= $char;
    }
    }
    return $ustring;
    }

    http://www.mysterria.com/programming_notes/GD.html

     
  • 1.7, worldmind (?), 12:22, 06/09/2010 [ответить]  
  • +/
    Достаточно сказать
    use utf8;

    и как написано http://zaakk.com/post/moj-post-v-pesochnicu-xabra/
    указать unicode шрифты для разных элементов

    $graph->set_title_font("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf",8);
    $graph->set_value_font("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf",8);
    $graph->set_label_font("/usr/share/fonts/truetype/ttf-dejavu/DejaVuSans.ttf",8);

    и всё будет нормально работать

     

     Добавить комментарий
    Имя:
    E-Mail:
    Заголовок:
    Текст:




    Спонсоры:
    Слёрм
    Inferno Solutions
    Hosting by Ihor
    Хостинг:

    Закладки на сайте
    Проследить за страницей
    Created 1996-2019 by Maxim Chirkov
    Добавить, Поддержать, Вебмастеру