[Read This Fine Material] from Joshua Hoblitt

QR codes for business cards


SCALE10x is coming up and, at the last moment, I decided to tryout an idea I’ve been toying with since OSCON 2011 last summer. At OSCON I noticed that the first thing I do when receiving a new acquaintance’s business card is to look them up on LinkedIn and add them to my network. It seems it would same some time and ambiguity to have the LinkedIn profile URL on the card itself. Typing in URLs (even shortened URLs) can be error prone so why not just encode them as a QR code?

After some Googling, I discovered that Android has the ability to read vCards encoded in a QR Code. The downside to this is that vCard is a fairly verbose format and you burn up bytes rather quickly. A high byte count QRcode is difficult to fit in a usable size on a US standard 2″x3.5″ card. qrstuff claims to have a work around for this by just encoding a HTTP URL. I tried this myself (not using the qrstuff service) and it did not work for me under Android 2.2 on my Droid2 (2.3.20). Experimentally, it seems that an encoded vCard stripped down to only a couple of entries is feasible.

I created the QR codes for the back of my new business cards using the qrencode package and then did the layout of the card using Gimp. It would probably have been better to use a package better suited to page layout like Scribus but I was in hurry to get the cards in time for SCALE10x and didn’t want to learn a new package. This is the Makefile I used to generate the QR code images.

all: jhoblitt_vcf.png jhoblitt_linkdin.png

jhoblitt_vcf.png: jhoblitt.vcf
cat jhoblitt.vcf | qrencode -l L -s 16 --margin=4 -o jhoblitt_vcf.png

qrencode -l L -s 27 --margin=4 -o jhoblitt_linkdin.png "http://linkd.in/jhoblitt"

rm jhoblitt_vcf.png jhoblitt_linkdin.png

The -s flag is the number of pixels in the output image to use to present a QR code pixel. The values I used were from trial and error trying to get the output image as close to 900x^2 as possible. Since the number of pixels in a QR code depends on the number of bytes being encoded, this value needs to be adjust based on the input. I then scaled the images to 900px square with the intent (hope?) that the card printer I used (uprinting.com) will be printing at 600dpi. I would have preferred to use WHCC, as I trust their color management, but they couldn’t guarantee me a 1 day production window needed to get the cards by Wednesday and I leave for SCALE10x on Thursday.

Here are the finished results. The versions used for printing are 2100x * 1200px.

Leave a Reply