Perl 將 JPG 轉成 ASCII


正好安裝完Perl GD環境
簡單記錄一下這個測試小程式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#!/usr/bin/perl

use strict;use warnings;use GD;sub{my @b=$_[0]->getBounds();my @c=reverse (" ",'\'','.',':','|','T','X','0','#');for(my $y=0;$y< =$b[1]-$_[1]-1;$y+=$_[1]){for(my $x=0;$x<=$b[0]-($_[1]/2)-1;$x+=($_[1]/2)){my @p=$_[0]->rgb($_[0]->getPixel($x,$y));my $s=($p[0]+$p[1]+$p[2])/(255*3);print $c[($s*($#c-1))];} print "\n";}}->(GD::Image->newFromJpeg($ARGV[0]),$ARGV[1]||10);

# 完整程式碼
=comment
my $image = GD::Image->newFromJpeg($ARGV[0]);
my $scale = $ARGV[1] || 10;

my ($width, $height) = $image->getBounds();
my @chars = reverse (" ", '\'', '.', ':', '|', 'T', 'X', '0', '#');

for(my $y = 0; $y < = $height - $scale - 1; $y += $scale) {
for(my $x = 0; $x <= $width - ($scale / 2) - 1; $x += $scale / 2) {
my $pixel = $image->getPixel($x, $y);
my ($r, $g, $b) = $image->rgb($pixel);
my $sat = ($r + $g + $b) / ( 255 * 3 );
print $chars[ $sat * ($#chars - 1) ];
}
print "\n";
}
=cut