Creating and reading QR codes
Simplified
With the right tools, you can create your own QR code squares with information you want to share, for example, on a business card, in a letter, or on your website.
Read errors of unreliable, one-dimensional bar codes often caused interruptions in industrial production, prompting companies like Toyota and its subsidiary Denso Wave to develop as early as 1994 a new code for acquiring stock data. The new matrix bar code was designed to store more information than the traditional bar code and to stay legible, even if the label was dirty, wrinkled, or partially destroyed.
The quick response code, or QR code, comprises a matrix of square dots instead of the usual lines. Measuring up to 177 by 177 dots, the QR code encodes up to 4,296 characters, compared with a bar code that encodes just 13.
Thanks to numerous free reader apps for smartphones, QR codes have gained in popularity in recent years. Posters, catalogs, magazines, business cards, and even television screens display the small squares, offering additional information or URLs for microsites.
Data Grabber
If you want to encode your address into a QR code for a business card, you could try one of the many services on the Internet. However, restrictions typically apply. For example, some services allow only QR codes in a certain size or in limited quantities. Also, you never know for sure, what the services do with your data. For example, some sites explicitly allow sharing and selling the data to third parties in their terms of use, more or less pre-programming an increase in junk mail in the future. Fortunately, several QR code tools can help you avoid these problems in Linux.
On My Mark!
The quickest way to create a QR code is with the Qrencode [1] command-line utility. Any major distribution can install Qrencode via the package manager. The following command then creates a QR code containing the text "Hello World!" (Figure 1):
$ qrencode -o qrcode.png 'Hello World!'
The generated QR code ends up in the qrcode.png
file. If the file already exists, it's overwritten without prompting. If you have at least version 3.3.0 (qrencode -V
), Qrencode can generate an EPS graphic,
$ qrencode -t EPS -o qrcode.eps 'Hello World!'
or ASCII output (Figure 2). In the QR code image, the software creates a white border the width of one dot. This facilitates the process of deciphering the code for programs or the smartphone later on. If desirable, you can increase or decrease the edge with the -m
parameter; in the following example the border width would be 10 code pixels:
$ qrencode -m 10 -o qrcode.png 'Hello World!'
If you are saving the QR code in PNG format, the -s
parameter specifies the height of a black QR code pixel. By default, Qrencode draws every black dot three by three pixels. The program creates a slightly smaller QR code with quite a wide margin with the following command:
$ qrencode -s 2 -m 10 -o qrcode.png 'Hello World!'
A white border appears around the QR code that is exactly 20 screen pixels wide (10 QR code dots in width, with each dot two pixels). If you are creating EPS images, the only parameter available is -m
; -s
moves the entire QR code out of the image in this case. To control the resolution of PNGs further, use the -d
parameter to define the dpi.
Tolerance
Besides the specified data, the QR code contains additional error correction information. If a portion of the image is damaged, it allows you to reconstruct the missing or illegible data. The more additional information the QR code contains, the more heavily damaged it can be without becoming useless.
Increasing the error tolerance increases the size of the image because you need more black dots (Figure 3). The QR code standard thus uses four levels of error correction: H
level allows you to read all data if 30 percent of the QR code is destroyed, Q
level if 25 percent is unreadable, and M
level if just 15 percent is unintelligible. At the lowest level, L
, only 7 percent of the data can be faulty. In Qrencode, the -l
parameter selects the error correction level. The possible values are pretty much what you would expect: L
, M
, Q
, and H
.
The level you choose depends on the proposed use. If you expect the QR code to be exposed to external influences (e.g., wind, weather, graffiti) or if you are planning to manipulate the image deliberately (see the "Intruders" box), you will want the highest level, H
. On a business card, the lowest level, L
, is sufficient. If in doubt, simply omit the -l
parameter. The program then uses level L
by default.
Intruders
QR codes are quite robust against destructive behavior, which allows you put a logo or image in the middle. If the "foreign body" is small enough, the code still works, and it looks pretty, too.
None of the generators available for Linux can add images like this, however, which only leaves you with the option of switching to a web service or editing the image in another application. In the latter case, you will want to create the QR code with error correction level H as a precaution and then check that it works with a smartphone.
Buy this article as PDF
(incl. VAT)
Buy Linux Magazine
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters
Support Our Work
Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.
News
-
Fedora 40 Beta Released Soon
With the official release of Fedora 40 coming in April, it's almost time to download the beta and see what's new.
-
New Pentesting Distribution to Compete with Kali Linux
SnoopGod is now available for your testing needs
-
Juno Computers Launches Another Linux Laptop
If you're looking for a powerhouse laptop that runs Ubuntu, the Juno Computers Neptune 17 v6 should be on your radar.
-
ZorinOS 17.1 Released, Includes Improved Windows App Support
If you need or desire to run Windows applications on Linux, there's one distribution intent on making that easier for you and its new release further improves that feature.
-
Linux Market Share Surpasses 4% for the First Time
Look out Windows and macOS, Linux is on the rise and has even topped ChromeOS to become the fourth most widely used OS around the globe.
-
KDE’s Plasma 6 Officially Available
KDE’s Plasma 6.0 "Megarelease" has happened, and it's brimming with new features, polish, and performance.
-
Latest Version of Tails Unleashed
Tails 6.0 is based on Debian 12 and includes GNOME 43.
-
KDE Announces New Slimbook V with Plenty of Power and KDE’s Plasma 6
If you're a fan of KDE Plasma, you'll be thrilled to hear they've announced a new Slimbook with an AMD CPU and the latest version of KDE Plasma desktop.
-
Monthly Sponsorship Includes Early Access to elementary OS 8
If you want to get a glimpse of what's in the pipeline for elementary OS 8, just set up a monthly sponsorship to help fund its continued existence.
-
DebConf24 to be Held in South Korea
Busan will be the location of the latest DebConf running July 28 through August 4