Since there's built in error correction, it's easier to just manipulate the pixels to look like what you want and eat into the error correction. Most uses of QR codes don't need 30% ECC, you could generate it with 30% and consume 15% of it, thus injecting your design and still retaining error correction.