Add your company logo to QR codes. Increase brand recognition while maintaining 100% scannability.
Your logo increases brand recall by 50%
High error correction keeps codes readable
Users more likely to scan branded codes
Elevates perception of your brand
import qrcode
from PIL import Image
# Generate QR code with HIGH error correction
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=2,
)
qr.add_data('https://example.com')
qr.make(fit=True)
# Create image
qr_img = qr.make_image(fill_color='black', back_color='white').convert('RGB')
from PIL import Image
# Open logo
logo = Image.open('logo.png').convert('RGBA')
# Calculate logo size (20% of QR)
qr_width = qr_img.size[0]
logo_size = int(qr_width * 0.2)
logo = logo.resize((logo_size, logo_size))
# Create white background for logo
logo_bg = Image.new('RGB', (logo_size, logo_size), 'white')
logo_bg.paste(logo, (0, 0), logo)
# Position logo in center
logo_pos = ((qr_width - logo_size) // 2, (qr_width - logo_size) // 2)
# Paste logo onto QR
qr_img.paste(logo_bg, logo_pos)
# Save
qr_img.save('qr_with_logo.png')
function addLogoToQR(canvasElement, logoUrl) {
const canvas = canvasElement;
const ctx = canvas.getContext('2d');
const logoImg = new Image();
logoImg.onload = function() {
const logoSize = canvas.width * 0.2;
const logoX = (canvas.width - logoSize) / 2;
const logoY = (canvas.height - logoSize) / 2;
// White background
ctx.fillStyle = 'white';
ctx.fillRect(logoX - 5, logoY - 5, logoSize + 10, logoSize + 10);
// Logo
ctx.drawImage(logoImg, logoX, logoY, logoSize, logoSize);
};
logoImg.src = logoUrl;
}
A: Reduce logo to 15% instead of 25%. Use higher error correction level. Test with real QR readers.
A: Use a light, high-contrast background color instead of white. Avoid dark backgrounds.
A: Yes, but add white background layer behind for contrast. Transparent logos over QR pattern won't work.
A: 300 DPI minimum. Generate full-size QR code (2-3 inches), then add proportional logo.