QR codes have up to a 30% error correction redundancy built into them so that theoretically up to 30% of the QR code image can be removed (or obscured) and replaced with an embedded image and the code “should” still function.
While it is possible to add an image inside the the QR code, reducing this safety buffer moves the QR code closer to the point where it becomes potentially unstable and may not be readable in some lighting conditions, colours and display sizes, or if it becomes damaged (like a corner ripped off it or something spilt on it). There are also some areas of the code that are more sensitive to change than other areas, so great care should be taken.
Compromising the scanning safety margin of the QR code by adding an image to it can also be further complicated if the scanning software interprets any part of the embedded image as actual data, and then decodes the contents of the QR code incorrectly. In this case the QR code has been moved from just being “dodgy” to being completely non-functional simply because an image has been added to it.
Despite many claims that adding images to QR codes can be done easily and successfully, with a couple of exceptions pretty much the only examples that I’ve seen that are completely dependable are from DesignQR in Japan, and their process is to create a fully functional QR code that has a “hole” already built into it for the image to be placed into. As a result of using this process the QR code is completely intact, no data has been removed, and the error redundancy hasn’t been compromised in any way.
Companies like QRlicious work with existing “regular” QR codes and do a great job of colorising and modifying, as well as overlaying logos and images, but it’s a specialist craft that requires a lot of experience to get right without compromising the QR code.
If you are going to tackle it yourself, here’s a few pointers on do’s and don’ts if you’re attempting to put an image into a standard QR code that hasn’t been specifically created to accommodate one:
- Keep the size of the embedded image well below 15% of the area of the QR code itself – 10% is probably the best compromise.
- Put the image in the middle of the QR code and definitely don’t obscure any of the 3 big squares in the corners (they have a special purpose and must be retained).
- Always leave a white border (3-4 times the width of one of the little square data modules in the QR code image) all the way around the edge of the embedded image so that the data areas of the QR code are seperated from the image.
- Make sure that all of the little square data modules left in the QR code are intact – remove any partially obscured modules completely.
- Check that the embedded image doesn’t co-incidentaly contain any small square (or squarish) elements that may be interpreted by the scanning device as part of the QR code’s data, rather than being ignored as part of the image.
- Many QR code scanning devices scan in grey-scale so using contrasting colours to differentiate the image from the QR code is not going to help you at all.
- It’s probably also a good idea to make the QR code image larger than you would have if it didn’t have an image in it. (See What Size Should A QR Code Be?)
Being a technical purist I’m not comfortable with doing anything that intentionally compromises the stability of the QR code, but if you must then you need to thoroughly test the QR code on multiple devices and scanning apps after you’re done (or get it done by an expert).