It's a little known fact that QR codes are actually quite tolerant of errors and missing pixels, so much so that you can completely cover up a bunch of them with junk and the code still scans fine. This is the principle behind the site I made, vanity-qrcode.com, which allows people to create QR codes with text overlaid on them.
The site takes whatever text you type, uses a pixel font I adapted, and places the text with 1px white outline in the middle of the QR code. There's usually enough error correction in the code that the text won't prevent the code from being scanned.
There is, however, a much fancier way of embedding text or pictures in QR codes, that doesn't rely on the built-in error correction. There is a great post by Russ Cox that explains this in great detail. The short version is you give it a URL and a high-contrast photo, and it adds a carefully chosen set of digits to the end of the URL where the digits chosen end up representing the photo. You can try it out here.
I tried this out with my avatar, it took a few tries to get a result that looked any good. I had to drastically increase the contrast of my photo for starters.
I was then able to upload the high-contrast version to the website and use the tools to adjust the position and size of my photo relative to the QR code boundary. After a little fiddling, I got this result:
It's close, but I wasn't super happy with the result. I figured I'd open it up in Photoshop and add a few more pixels to help define my mouth and jawbone a little more. The end result is below, which only introduces a few errors but still scans just fine!