Для рисования русских букв, слов на графиках, построенных модулем 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.
URL:
Обсуждается: http://www.opennet.me/tips/info/693.shtml
Я сделал проще - нашел ttf шрифт с набором символов koi8-r.... - их предостаточно, и русский отображается на ура!!!
Угу, только вот в моем случае была 1251 кодировка :((
Вот и пришлось наворачивать.
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;Русского нету ((
my $title = $r->to16('Заголовок'); - так не работает.....
а вот так:
my $title = $r->tou('Заголовок'); - работает.....
Так как на моей машине Map8 не работает, пришлось использовать альтернативное решение с более распостранённым модулем
Этот пример работает с Image::Magickuse encoding 'cp1251';
use Unicode::String qw(utf8);
my $title = utf8('Заголовок');
Решение совсем влоб
sub stringToDec{
my $ustring = '';
for my $char (split //, shift){
if(ord($char)>127){
$ustring .= "" . (unpack("U", $char)+848) . ";";
}else{
$ustring .= $char;
}
}
return $ustring;
}
Достаточно сказать
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);и всё будет нормально работать