Decorating a QR code is not a simple task as it may sound. Decorating QR codes has been taken by some artists to a level of an art in itself. Some decorative means will not affect QR code readability, we will call them neutrals. Other decorative means will undoubtedly affect it. Decorating QR codes using neutral means enables you to work with low EC (Error Correction levels) and probably with lowest version of QR code. Using lower QR code versions increase readability, assuming that total QR code area is fixed on the printed media.
Some decorative means will disrupt readability just a little while other might affect readability seriously up to the point of non readability.
What are the neutral ways to decorate your QR code? Which means will hurt readability to small extent and what means should be measured carefully when used? How can we know how much of the readability we are hurting? I will try to answer some of these questions in this post.
Neutral decorative means for QR codes
The simplest non harming way to decorate a QR code is to color it in a different color that the default -black. If this is all what you plan to do and your QR code is not going to live in a harsh environment (see here), use a Low error correction level. Normally coloring the QR code with one color is not going to affect readability at all. You must however to take into consideration the contrast between your color and the white background. For example coloring your QR code with a bright color will surely affect decoding with some readers.
The next step in complexity is adding the background into play – changing the default white background to another color. This is more complex because a new factors should be taken into consideration – who is darker the foreground or background?
It is hard to state a rule for the contrast since not all readers achieved the same minimal contrast for decoding. Here are test results observed on an iPhone with some readers. I used for the test a black Low EC QR code on varying backgrounds. The lines with reader names along them are the points where the specific reader was able to read the code in this contrast.
So if your QR code is dark on a brighter background see if one of the three weakest (contrast related) readers reads it. If one of them does, your contrast is ok.
In case your foreground is brighter than the background you should know that not all readers support this (although their number grows with time). This situation of darker background arises whenever a darker color is used for background. Here is an example:
This is a list of readers that supports the inverted option:
I-nigma, Neoreader, MobileTag, Qrafter, Lynkee, Scan
More disruptive decoration
The next decorative steps may make decoding a little more hard. The first step is rounding the QR code finding patterns. Doing this should not affect readability for small versions and very slightly for big QR code versions. Here is an example for a QR code with rounded finding patterns.
The QR code error correction level should not change for this kind of decoration since the effect on readability is very minor if at all. The way to achieve this effect in Photoshop is selecting the fQR code finding patterns and then using the select/modify/smooth filter with a small value. This will modify the selected finding patterns to be round as in the image above. Create a new layer and paint the selected area with your foreground color. As a last step remove the finding patterns from the layer below the topmost layer to get the desired effect.
Using more than one color for the QR code creates a good visual effect. A common way to do it is to color the inside of the finding patterns with a different color as in the image below. If the new color is in good contrast there should be no effect at all on the code readability although minor damage might sometimes occur by greater rounding of the corners.
t has been recommended in few places to use only black and white colors due to readers compatibility. I have tested all iPhone QR code readers that I know of and all of them had no problem to read the multicolor QR code above except the MobileTag reader (which by the way decoded smoothly the all blue rounded QR code).
Rounding all QR code modules will hurt readability more. Here is an example -
The main impact is on the isolated one module boxes which changed shape. Their area is now smaller. This might affect QR code readability since scanner usually sample the environment of the module to decide its color (dark/bright). When rounding the QR code elements take into account the size of one module in pixels. In general do not smooth with more than half of module width in pixels, since this would affect the isolated dark modules too bad. In the example above around half of permitted errors occurred in reading this QR code (Low EC)– leaving only 3.5% percent secure zone. It is recommended to go up to a Medium error correction (15%) level whenever rounding all QR code modules. The rounding itself should not harm more than 5% of data area – leaving more than 10% for secure zone which should suffice for most QR codes.
Adding shadows with or without embossing is further step that still (as above) should not affect more than 5% of data area. Here is an example
The reason is that some of the isolated one module boxes that lost area gets now some support from the close shadow. So some errors might now be corrected while some other white modules might be calculated now wrong because of the same shadow. Here again the Medium EC (or more) is recommended for this type of decoration.
Coloring some of the modules with an additional color as in the image below should not change matters dramatically as long as the other color is dark as the first foreground. Here the color is brighter which may cause a difficulty for some readers although most readers will handle multi colored codes reasonably. In case the color is too bright the impact can be calculated by counting the isolated colored modules.
n our example there are 23 orange modules (the orange module inside the guiding pattern is not part of the data and should not be counted). If they were all white the code would be unreadable because only 4 codewords can be corrupted in a QR code version two with Low EC (see table below). Remember that a codeword is 8 connected modules in two connected columns of 4 rows each(see here for detailed explanation). Since the orange modules (in this example) are spread in more than 4 clusters (and hence more than 4 codewords) the Low error correction level is not enough here, and the QR code would not decode if they were too bright.
Here is a table that shows how many code words can be corrupted for each EC level of the first four QR codes versions.