diff options
Diffstat (limited to 'bin/qr-code')
-rwxr-xr-x | bin/qr-code | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/bin/qr-code b/bin/qr-code new file mode 100755 index 0000000..b614a6a --- /dev/null +++ b/bin/qr-code @@ -0,0 +1,58 @@ +#!/usr/bin/env perl +use strict; +use warnings; +use Getopt::Long; + +my $data=''; +my $level='L'; +my $format='png'; +my $light='255:255:255'; +my $dark='0:0:0'; +my $size=10; + +my $res=GetOptions('data|d=s' => \$data, + 'level|l=s' => \$level, + 'format|f=s' => \$format, + 'size|s=i' => \$size, + 'light=s' => \$light, + 'dark=s' => \$dark, +); + +{ +$level=uc($level); +if ($level !~ /\A[MLQH]\z/) { + $level='L'; +} +} + +$data = join(' ',@ARGV) unless $data; + +if ($format eq 'txt') { + require Text::QRCode; + + my $qr=Text::QRCode->new( + level=>$level, + mode=>'8-bit', + ); + + my $arr=$qr->plot($data); + + print join "\n", map { join '', @$_ } @$arr; +} else { + require Imager::QRCode; + my $qr=Imager::QRCode->new( + size=>$size, + margin=>3, + level=>$level, + mode=>'8-bit', + lightcolor => Imager::Color->new(split ':',$light), + darkcolor => Imager::Color->new(split ':',$dark), + ); + + my $img=$qr->plot($data); + my $pid = open my $display, '|-', 'display' + or die "Can't start `display`: $!"; + $img->write(type=>$format, fh=>$display); + close $display; + waitpid $pid,0; +} |