Generate QR Codes in PHP
Used widely in various recent applications, QR Codes can be seen on cola cans, business cards, in sushi bars, and in museums. QR Code is a 2-dimensional barcode specification that was invented in Japan. It is patented. but it’s inventor, Denso Wave, chose not to exercise it and left the standard open for the benefit of all. The code has since grown in popularity because of its ability to include a lot of data in a single image and the proliferation of smartphones with scanning apps.
In this article I’ll show you how you can easily generate QR Codes from within your PHP application and share some ideas on how and when to use them, We’ll be using PHP QR Code, a library written in PHP for generating QR Codes and which doesn’t require any dependencies beyond the standard GD2 graphics extension for creating images.
Generating your First QR Code
Start by downloading the latest PHP QR Code library from GitHub. I’ll assume you’ve extracted it successfully and you can go to http://localhost/phpqrcode in your development environment to find the demo version working. You can insert whatever text in the data field you want to be converted to a QR Code image as shown in the screenshot below. If you have any problem getting this to work, make sure you have PHP installed with the GD2 extension, double checking this if necessary using a PHP info page.
Create a new PHP script with the following code:
<?php include "phpqrcode/qrlib.php"; // create a QR Code with this text and display it QRcode::png("My First QR Code");
You see how simple it is? With just two lines of code you get a perfectly good QR Code for your application. The opportunities are endless! But wait, this obviously isn’t the full story. The library has more features worth looking at.
Features of the PHP QR Code Library
For a full blown example, try this code:
<?php QRcode::png("http://www.sitepoint.com", "test.png", "L", 4, 4);
The first parameter specifies the text or data which will be encoded into the image and is passed as a normal string. The second parameter is the name of the output file for the generated PNG image, if any. The default value is a boolean false, in which case the image is flushed to the browser.
The third parameter is the level of error correction for the generated barcode, passed as a single letter string. This specifies how much of the data’s codewords (8-bits per codeword) can be restored for a distorted or damaged QR Code image using the Reed-Solomon error correction algorithm. The higher the correction level, the less the data capacity of the barcode can be for a given dimension. Below is a table mapping the levels to their restore percentages and the string constants used when calling the
QRcode::png(). (I’ve compiled the table from the Wikipedia article on QR Codes and the method signature in the PHP QR Code library.)
The fourth parameter specifies the size of each of the barcode code squares measured in pixels. Each code square (also named “pixels” or “modules”) is 4×4px. The fifth parameter specifies the white margin boundary around the barcode, measured in code squares (eg. A 16px margin on each side for 4×4px code square).
The library supports exporting PNG, SVG, and EPS images, and you can produce QR Codes in any of these formats simply by changing the method name from
eps() and use the correct extension for the generated image’s filename.
Also, you can change the background and foreground colors by passing them as additional parameters:
<?php $backColor = 0xFFFF00; $foreColor = 0xFF00FF; // Create a QR Code and export to SVG QRcode::svg("http://www.sitepoint.com", "test-me.svg", "L", 4, 4, false, $backColor, $foreColor);
The sixth parameter (false in the example above) seems to be a useless parameter. It should be true for saving to a file and exporting to the browser, but it simply didn’t work for me after checking it several times, so keep it false.
The library has more features that you can check out if you’d like, for example caching and benchmarking the image generation.
Getting the Size of the Final Bar Code
To get the final size of the image in advance, here’s a simple formula that can use (since the image is a square, we only need to calculate a single dimension and the other will be the same):
Image Size (px) = (Pixels per Module) × (Module Size + 8)
Where as stated earlier, Pixels per Module is specified in the method call as the fourth parameter and the Module Size is selected from these barcode sizing tables as follows:
- Select the column of the string type (data bits, numeric, alphanumeric, binary, or Kanji). These specify the maximum data length of such type to be packed in a certain barcode. Earlier I used alphanumeric, but if you are using UTF-8 encoded strings then you may be using the binary type instead. Kanji is for Japanese, but is not tested by the library author.
- Choose the desired level of error correction and for your string length find the minimum version number that can handle at least that many characters. The example used 24 or more characters of alphanumeric type at level L, so the value will be version 1 first row.
- Get the module for the version you choose, here it will be module 21×21, where the module size will be 21. The PHP QR Code library takes the next version up instead for more room as a safety, so then go up one more.
If you calculate the module size for the version used for the example, you will find that the produced image size should be:
Image Size = 4 × (21 + 8) = 116×116px
But the image generated is 132×132px instead. PHP QR Code took the next version (version 2 instead of version 1, or simply module 25×25), so the actual generated size will be:
Image Size = 4 × (25 + 8) = 132×132px
Common Uses for QR Codes
The most common application for QR Codes is to encode website URLs, such as that to a Facebook fan page of your latest product, your company, etc. The options are endless. I myself use it on my business card and encode the URL to my LinkedIn profile.
QR Codes can also store telephone numbers, vCards, and email addresses. Some sites put them alongside blog articles to act as bookmarks.
When it comes to using QR Codes, your only limits are really the data capacity of the code and the space you’ll display it in.
In this article you’ve seen how to generate QR Codes easily in PHP for various print and web applications. I also showed you how to calculate the final generated image size in advance, since the library doesn’t provide such facility. In short this, working with QR Codes can be enjoyable and open a lot of opportunities. How can you enhance your PHP application with them?
Image via Fotolia