The above image was made with qrencode (which is also available as Debian package). It's a 21x21 'binary' QR code which contains the text 'http://sput.nl' and has error correction level 'M'.
Using upper case only can reduce the amount of data. And sometimes a single character can make a difference, as can be seen below;
URL: | HTTP://SPUT.NL/ | http://sput.nl | http://sput.nl/ | http://www.sput.nl/ | |
---|---|---|---|---|---|
ECL | Size | ||||
L | 21x21 | 21x21 | 21x21 | 25x25 | |
M | 21x21 | 21x21 | 25x25 | 25x25 | |
Q | 21x21 | 25x25 | 25x25 | 25x25 | |
H | 25x25 | 25x25 | 29x29 | 29x29 |
Error correction levels;
L | 7 % |
M | 15 % |
Q | 25 % |
H | 30 % |
And some of these images;
Alphanumeric | Binary | Binary |
---|---|---|
HTTP://SPUT.NL/ | http://sput.nl/ | http://www.sput.nl/ |
Note: All the QRs above have error correction level 'Q'.
Most webbrowsers convert 'HTTP' into 'http', hostnames are case insensitive
and my webserver redirects 'sput.nl' to 'www.sput.nl'.
Not all QR readers support upper case URLs, but most do. Files and paths
are case sensitive though. So HTTP://EXAMPLE.COM/FOO/BAR and
HTTP://EXAMPLE.COM/foo/bar are not the same thing!
Once you have decided on a text, keep increasing the error correction level
(ECL), until the file increases in size. The ECL just before that is
probably your best choice. These are shown bold in the table above. Some QR
encoding programs will do this optimisation for you.
If you want to use non-ASCII in a QR you need
ECI
(Extended Channel Interpretation); Some QR encoding programs default to
UTF-8.
For non-ASCII in URLs you need to replace the individual bytes in each
UTF-8 multi-byte sequence by percent-hex-value. E.G.: '%C3%BC' for 'ΓΌ'.
So URLs are always US-ASCII! Most browsers will translate these sequences
back to UTF-8 and display this instead.
QRs need a boundary called quiet zone around them. The minimum required
quiet zone has width of one. Recommended is four. Qrencode will create
this boundary for you.
More info;