 |
|
| |
Image::PNG::QRCode(3) |
User Contributed Perl Documentation |
Image::PNG::QRCode(3) |
Image::PNG::QRCode - ABANDONED - Make PNG images containing QR
codes from your text
This module doesn't compile any more on my system. Fixing the
problems will take more time than I have available, so it is abandoned, and
bug reports against the module will be closed without any further
response.
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.11/examples/synopsis.pl>
in the distribution.)
This documents Image::PNG::QRCode version 0.11 corresponding to
git commit 147e504525acbdce8d49e533578e99cdc2250b1d
<https://github.com/benkasminbullock/image-png-qrcode/commit/147e504525acbdce8d49e533578e99cdc2250b1d>
released on Fri May 16 09:32:07 2025 +0900.
This module converts your 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 the PNG standard library
"libpng" to be installed. "libpng" is usually already
installed on Linux and Windows.
my $png = qrpng (text => 'this is my text');
This makes a scalar $png containing the QR
code PNG data.
qrpng (in => 'file.txt', out => 'file.png');
This makes a PNG file file.png from the contents of
file.txt.
qrpng options
This function takes the following options.
- text
-
qrpng (text => 'this is my text');
The text you want to convert to a QR code.
- in
-
qrpng (in => 'file.txt');
Specify a 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
- Specify an output file to put the PNG data into. With a scalar argument,
qrpng (out => 'file.png');
writes to file.png, but with a scalar reference,
qrpng (out => \$s);
writes the PNG data into the 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 four 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
square 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.
There is a script "qrpng" installed with the module:
qrpng "earphone pad"
makes qrcode.png. Try
qrpng --help
for more options.
qrpng-data.pl
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.11/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.11/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.
- Project Nayuki QR Code
generator library
- Project Nayuki QR Code generator library
<https://www.nayuki.io/page/qr-code-generator-library> contains an
online JavaScript QR code generator and links to implementations in C,
C++, Java, JavaScript, Python, and Rust.
This section details some deficiencies of the module, and is
probably only of interest to people who want to contribute to
development.
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 qrduino 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-2018.
This Perl module is licensed under the GNU General Public License
version 3.
Visit the GSP FreeBSD Man Page Interface. Output converted with ManDoc.
|