Что именно тебе надо? Если целью является графическое представление какой-либо функции или каких-то измерений, то можешь поискать в CPAN-е модули со словом chart [1].
Я знаком с gnuplot-ом [2] и с ploticus [3], и мне легче генерировать на лету скрипты и комманды. Результаты очень даже не плохие.
При помощи GD:
#!/usr/bin/perl -w
use strict;
use Image::Size;
use GD;
my @massiv;
my $img="karta.png";
my ($w, $h) = imgsize($img);
#считали картинку
&massiv();
# определяем новое изображение
my $im = new GD::Image($w,$h);
# определяем цвета
my $black = $im->colorAllocate(0,0,0);
my $white = $im->colorAllocate(255,255,255);
# делаем заливку
$im->fill(50,50,$white);
# заменяем цвет, если в этом есть необходимость
&zamena();
# пишем новое изображение
open F, ">/var/www/html/gr/file.png"
or die "cant write new image: $!";
binmode F;
print F $im->png;
close F;
#если необходимо заменить какой-либо цвет
sub zamena{
foreach my $i(0 .. $w){
foreach my $k(0 .. $h){
$im->setPixel($i,$k,$black) if $massiv[$i][$k]==0;
}
}
}
# считывание цветов пикселей картинки в массив
sub massiv{
#считываем изображение
my $source_img = newFromPng GD::Image($img);
foreach my $i(0 .. $w){
foreach my $k(0 .. $h){
my $index = $source_img->getPixel($i,$k);
# считываем палитру цветов RGB
# поскольку для простоты примера нас
# интересует только черно-белое изображение
# считываем только один цвет
my ($r,undef,undef) = $source_img->rgb($index);
$r ? do{$massiv[$i][$k] = 1} : do{$massiv[$i][$k] = 0};
}
}
}
При помощи ImageMagick:
#!/usr/bin/perl -w
use strict;
use Image::Magick;
use Image::Size;
my $img="/var/www/html/gr/karta.png";
my ($image, $x, @massiv);
my ($w, $h) = imgsize($img);
$image = Image::Magick->new;
#считали картинку
$x = $image->Read($img);
warn "$x" if "$x";
print "Readed\n";
#занесли данные о цветах пикселей картинки в массив
&massiv();
# заменяем цвет, если в этом есть необходимость
&zamena();
# записали изменения в ту же картинку
$x = $image->Write($img);
warn "$x" if "$x";
#если необходимо заменить какой-либо цвет
sub zamena{
foreach my $i(0 .. $w){
foreach my $k(0 .. $h){
$x = $image->Set("pixel[$i,$k]", '#d2691e')
if $massiv[$i][$k]==0;
}
}
}
# считывание цветов пикселей картинки в массив
sub massiv{
foreach my $i(0 .. $w){
foreach my $k(0 .. $h){
# опять цвет по одному параметру
${[split m!,! => $image->Get("pixel[$i,$k]")]}[0]
? do{$massiv[$i][$k] = 0} : do{$massiv[$i][$k] = 1};
}
}
}
Самы правильный метод - XSUB, потому как на больших картинках эти два скрипта будут нереально тормозить.
p.s. тебе нужен массив массивов, а не массив.