summaryrefslogtreecommitdiff
path: root/bin/qr-code
blob: b614a6ad057dd90ce89c41f941a3dad3acd931c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
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(' ',@ARGVunless $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=>$formatfh=>$display);
    close $display;
    waitpid $pid,0;
}