Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
Image::PNG::QRCode(3) User Contributed Perl DocumentationImage::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
       QRCode-0.09/examples/> in the	distribution.)

       This documents Image::PNG::QRCode version 0.09 corresponding to git
       commit 9a919172a83344ec6a3a3fb2f4bb770a7d3c8ad2
       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

       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.

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

	   Text	to convert to a	QR code.

	       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

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

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

	   writes to file.png, but

		qrpng (out => \$s);

	   writes the PNG data into a scalar $s.

	       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

	       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.

	       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.

	       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

	       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
	   (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

       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
       QRCode-0.09/examples/> in the distribution.)

   qrpng CGI script
       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

	   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: $@
	       binmode STDOUT, ":raw";
	       my $l = length $s;
	       print <<EOF;
	   Content-Type: image/png
	   Content-Length: $l


       (This example is	included as
       QRCode-0.09/examples/> in the distribution.)

   About QR codes from Denso Wave <>, the
       inventors of the	QR code, contains much information.

   Other QR code generators
       On CPAN

	   Imager::QRCode is based on the Imager module	and "libqrencode".

	   Text::QRCode	makes a	text QR	code. It's based on "libqrencode".

	   HTML::QRCode	is an HTML QR code system based	on Text::QRCode.

	   Term::QRCode	makes QR codes on terminal windows. It's based on

	   This	is part	of PostScript::Barcode.	It's actually PostScript
	   rather than Perl.

	   Image::QRCode::Effects is based on Imager::QRCode and adds "effects
	   commonly used on QRCodes to make them look interesting".

	   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 is a generator that returns a QRCode data as
	   PostScript::Simple object.


	   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 <> is
	   the library underlying Text::QRCode and its dependents.

       Google Charts QR	code generator
	   Google Charts offers	a QR code generator
	   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 <> is a	Java project which can
	   generate QR codes. These are	one-bit	monochrome ones. <> is a .Net version.

       JavaScript qrcode generators
	   These might be a useful alternative to using	a server-side



	   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, <>.
       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.

perl v5.32.0			  2017-07-01		 Image::PNG::QRCode(3)


Want to link to this manual page? Use this URL:

home | help