- 论坛徽章:
- 95
|
本帖最后由 MMMIX 于 2015-09-13 10:20 编辑
回复 4# w123456_cu
我本来是想问下具体的换算规则。不过算了,这个不重要。
其实这个转换起来还是很简单的,就是在一系列点上画对应大小的正方形。一个基本实现如下:
#!/usr/bin/perl
use strict;
use warnings;
use v5.14;
use autodie;
use Data::Dumper;
use File::Basename;
use GD::Simple;
# Load matrix
my @mat;
{
open my $mat, '<', $ARGV[0];
while (<$mat>) {
push @mat, [ split ];
}
}
my $rows = @mat;
my $cols = @{ $mat[0] };
# Draw rectangles
my ($W, $H) = (1000, 1000);
my ($w, $h) = ($W / $rows, $H / $cols);
my $img = GD::Simple->new($W, $H);
$img->bgcolor('black');
for (my $i = 0; $i < $rows; $i++) {
for (my $j = 0; $j < $cols; $j++) {
my $x0 = ($j + 1) * $w - ($w / 2);
my $y0 = ($i + 1) * $h - ($h / 2);
my $c = $mat[$i][$j];
my $ox = ($w * $c) / 2;
my $oy = ($h * $c) / 2;
$img->moveTo($x0, $y0);
$img->rectangle($x0 - $ox, $y0 - $oy,
$x0 + $ox, $y0 + $oy);
}
}
# Create image file
my $img_file = fileparse($0, '.pl') . ".png";
open my $out, '>', $img_file;
binmode $out;
print $out $img->png;
|
|