GSP
Quick Navigator

Search Site

Unix VPS
A - Starter
B - Basic
C - Preferred
D - Commercial
MPS - Dedicated
Previous VPSs
* Sign Up! *

Support
Contact Us
Online Help
Handbooks
Domain Status
Man Pages

FAQ
Virtual Servers
Pricing
Billing
Technical

Network
Facilities
Connectivity
Topology Map

Miscellaneous
Server Agreement
Year 2038
Credits
 

USA Flag

 

 

Man Pages
Image::PNG::QRCode(3) User Contributed Perl Documentation Image::PNG::QRCode(3)

Image::PNG::QRCode - make a PNG image containing a QR code from text

    use Image::PNG::QRCode 'qrpng';
    qrpng (text => 'boom shake shake shake the room', out => 'shake.png');

(This example is included as synopsis.pl <https://fastapi.metacpan.org/source/BKB/Image-PNG-QRCode-0.09/examples/synopsis.pl> in the distribution.)

This documents Image::PNG::QRCode version 0.09 corresponding to git commit 9a919172a83344ec6a3a3fb2f4bb770a7d3c8ad2 <https://github.com/benkasminbullock/image-png-qrcode/commit/9a919172a83344ec6a3a3fb2f4bb770a7d3c8ad2> released on Sat Jul 1 10:30:36 2017 +0900.

This module converts input text to a PNG image of a QR code containing the text. The PNG image can either be stored to a file or it can be a scalar.

Image::PNG::Libpng requires "libpng" to be installed. "libpng" should already be installed on most Linux and Windows systems.

    my $png = qrpng (text => 'this is my text');

This makes a scalar PNG data in $png containing the QR code PNG.

    qrpng (in => 'file.txt', out => 'file.png');

This makes a PNG file file.png from the contents of file.txt.

qrpng options

The function takes the following options.

text
    qrpng (text => 'this is my text');
    

Text to convert to a QR code.

in
    qrpng (in => 'file.txt');
    

"in" specifies an input file of text to convert to a QR code. If you specify both "text" and "in", the module prints a warning message and uses the contents of "in", overwriting the value of "text".

out
"out" specifies an output file or a scalar to put the PNG data into.

     qrpng (out => 'file.png');
    

writes to file.png, but

     qrpng (out => \$s);
    

writes the PNG data into a scalar $s.

version
    qrpng (in => 'in.txt', out => 'out.png', version => 40);
    

"version" specifies the "version" of the QR code. The "version" is the "size" of the barcode, which controls the amount of information it can contain. The maximum value of "version" is 40. If no version is specified, the program chooses one using the length of the text. If you choose a version which is too small for the input data, a fatal error occurs. Usually it isn't necessary to set this parameter.

level
    qrpng (in => 'in.txt', out => 'out.png', level => 4);
    

Specify the amount of error checking code (ECC) to use. The default is level one, which corresponds to 7% error tolerance. The level can go up to 4, which corresponds to 30% error tolerance. Values less than one or greater than four cause a fatal error.

quiet
    qrpng (in => 'in.txt', out => 'out.png', quiet => 9);
    

"quiet" is a non-negative integer which specifies the size of the "quiet zone", the white area around the QR code, in units of "modules", the size of one black square of the QR code. The default is 4 modules. The QR specification requires a minimum of a four-module quiet zone, but you could set this to zero if, for example, you are going to embed the image in a white background, so it's not an error to set this lower. There is an arbitrary upper limit of 100 imposed. Note that changing this size makes little difference to the output PNG's size because it's just a white area which is compressed to take little room.

scale
    qrpng (in => 'in.txt', out => 'out.png', scale => 9);
    

"scale" is a positive integer which specifies how many pixels one "module" (one block of the QR code) occupies. The default is 3. You can't use fractional values. An arbitrary upper limit of 100 is imposed.

size
    qrpng (text => 'lime green', size => \$size);
    

Get the size (height and width in pixels) of the output PNG. This requires a scalar reference.

Overwriting input text '$options{text}' with contents of file $options{in}
(Warning) User requested conflicting options.
No input
(Fatal) No file or text input was supplied to "qrpng"
quiet zone cannot be negative
(Fatal) User value for "quiet" was negative
requested quiet zone, $options{quiet}, exceeds arbitrary maximum of 100
(Fatal) User requested very large quiet zone
negative or zero scale $options{scale}
(Fatal) "scale" was negative or zero
scale option needs to be an integer
(Fatal)
requested scale, $options{scale}, exceeds arbitrary maximum of 100
(Fatal) See "scale".
Bad version number $options{version}: use integer between one and forty
(Fatal) See "level".
Bad level number $options{level}: use integer between one and four
(Fatal) See "level".
size option requires a scalar reference
(Warning) See "size". In this case, the supplied value is deleted from the inputs.
Return value used twice
(Warning) The user used both the return value of qrpng and specified the "out" option.
Output discarded: use return value or specify 'out => \$value'
(Warning) The user called qrpng in void context and with the "out" option unspecified.

There is a script "qrpng" installed with the module:

    qrpng "earphone pad"

makes qrcode.png. Try

    qrpng --help

for more options.

This example makes a data URL QR code:

    use Image::PNG::QRCode 'qrpng';
    use URI;
    my $data = 'abcdefghijklmnopqrstuvwxyz';
    my $u = URI->new ('data:');
    $u->media_type ('image/png');
    $u->data (qrpng (text => $data));
    print "<img src='$u'>\n";

(This example is included as qrpng-data.pl <https://fastapi.metacpan.org/source/BKB/Image-PNG-QRCode-0.09/examples/qrpng-data.pl> in the distribution.)

This example CGI (common gateway interface) script makes a PNG from a user's input.

    use Image::PNG::QRCode 'qrpng';
    use URI::Escape;
    
    my $request = $ENV{QUERY_STRING};
    if ($request) {
        my %params;
        my @params = split /\&/, $request;
        for my $param (@params) {
            my ($k, $v) = split /=/, $param;
            if ($k && $v) {
                $v =~ s/\+/ /g;
                $params{$k} = uri_unescape ($v);
            }
        }
        if ($params{w}) {
            send_qr_code (%params);
        }
    }
    print <<EOF;
    Content-Type: text/plain
    Status: 400
    
    You didn't send anything, use me like this: qrpng.cgi?w=message-to-encode
    EOF
    exit;
    
    sub send_qr_code
    {
        my (%params) = @_;
        my $w = $params{w};
        my $s;
        eval {
            qrpng (text => $w, out => \$s);
        };
        if ($@) {
            print <<EOF;
    Content-Type: text/plain
    Status: 500
    
    qrpng failed like this: $@
    EOF
            exit;
        }
        binmode STDOUT, ":raw";
        my $l = length $s;
        print <<EOF;
    Content-Type: image/png
    Content-Length: $l
    
    $s
    EOF
        exit;
    }

(This example is included as qrpng.pl <https://fastapi.metacpan.org/source/BKB/Image-PNG-QRCode-0.09/examples/qrpng.pl> in the distribution.)

QRCode.com from Denso Wave <http://www.qrcode.com/en/index.html>, the inventors of the QR code, contains much information.

On CPAN
Imager::QRCode
Imager::QRCode is based on the Imager module and "libqrencode".
Text::QRCode
Text::QRCode makes a text QR code. It's based on "libqrencode".
HTML::QRCode
HTML::QRCode is an HTML QR code system based on Text::QRCode.
Term::QRCode
Term::QRCode makes QR codes on terminal windows. It's based on Text::QRCode.
PostScript::Barcode::qrcode
This is part of PostScript::Barcode. It's actually PostScript rather than Perl.
Image::QRCode::Effects
Image::QRCode::Effects is based on Imager::QRCode and adds "effects commonly used on QRCodes to make them look interesting".
GD::Barcode::QRcode
GD::Barcode::QRcode is a Pure-Perl implementation of QR codes using the GD library for the graphical part. At the time of writing, the last update was in 2004.
Vector::QRCode::EPS
Vector::QRCode::EPS is a generator that returns a QRCode data as PostScript::Simple object.

Non-CPAN

qrduino
qrduino <https://github.com/tz1/qrduino> is a QR code generator developed by Tom Zerucha for a microcomputer platform called the Arduino. Image::PNG::QRCode is a fork of this project.
libqrencode
libqrencode <http://fukuchi.org/works/qrencode/index.html.en> is the library underlying Text::QRCode and its dependents.
Google Charts QR code generator
Google Charts offers a QR code generator <https://developers.google.com/chart/infographics/docs/qr_codes>. The QR codes generated by Image::PNG::QRCode are about 1/3 the size of the default Google charts ones, for example the "Hello world" example in the above documentation is 728 bytes, but Image::PNG::QRCode makes an equivalent QR code using only 243 bytes. The reason for the reduced size is that Google Charts uses RGB colour space, whereas Image::PNG::QRCode uses one-bit monochrome colour space.
ZXing
ZXing <https://github.com/zxing/zxing/> is a Java project which can generate QR codes. These are one-bit monochrome ones.
QrCode.net
QrCode.net <http://qrcodenet.codeplex.com/> is a .Net version.
JavaScript qrcode generators
These might be a useful alternative to using a server-side solution:

<http://d-project.googlecode.com/svn/trunk/misc/qrcode/js/>

<http://code.google.com/p/jsqrencode/downloads/list>

However, sending these large JavaScript files over the internet will use much more bandwidth than sending the QR codes themselves, for most usage cases.

The QR code PNG files are very small and various tricks are used to make the memory use and the PNG file very small. Although the original plan was to interoperate with Image::PNG::Libpng, this ended up looking like a big burden to get only a small return, so this module actually just copies the parts of the code of Image::PNG::Libpng. If you want to manipulate the output PNG file you'll need to read it in again and operate on it.

The module isn't optimized for repeated uses, it builds up and tears down everything for each image.

The QR encoding is not checked for correctness. The QR code library comes from the "qrduino" project, but the contents have been worked on so it's not clear whether it's still correct. Also there was a bug in the original thing leading to reading uninitialized memory.

This encoder doesn't support the "shift-JIS" format. UTF-8 seems to pass through it OK. It doesn't use a BOM for the UTF-8.

The QR codes have only been checked by using two Android smartphones.

The QR code creation part (the contents of qrencode.c in the distribution) is copyright 2010, Tom Zerucha, <https://github.com/tz1>. The rest of the module is copyright by Ben Bullock 2015-2017.

This Perl module is licensed under the Gnu General Public Licence version 3.

2017-07-01 perl v5.32.1

Search for    or go to Top of page |  Section 3 |  Main Index

Powered by GSP Visit the GSP FreeBSD Man Page Interface.
Output converted with ManDoc.