Complete tutorial for generating QR codes with Python. Perfect for developers, data scientists, and automation engineers.
In this comprehensive guide, you'll learn how to:
pip install qrcode[pil]
pip install pillow # For image manipulation
python -c "import qrcode; print(qrcode.__version__)"
import qrcode
qr = qrcode.QRCode()
qr.add_data('https://qrcodegeneratorjp.com')
qr.make()
img = qr.make_image()
img.save('qrcode.png')
import qrcode
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data('https://example.com')
qr.make(fit=True)
img = qr.make_image(fill_color='#185FA5', back_color='white')
img.save('colored_qr.png')
from PIL import Image
import qrcode
# Generate QR code
qr = qrcode.QRCode()
qr.add_data('https://example.com')
qr.make()
img = qr.make_image(fill_color='black', back_color='white').convert('RGB')
# Add logo
logo = Image.open('logo.png')
qr_width, qr_height = img.size
logo_size = qr_width // 5
logo = logo.resize((logo_size, logo_size))
logo_pos = ((qr_width - logo_size) // 2, (qr_height - logo_size) // 2)
img.paste(logo, logo_pos, logo)
img.save('qr_with_logo.png')
import qrcode
urls = [
'https://example.com/1',
'https://example.com/2',
'https://example.com/3',
]
for idx, url in enumerate(urls, 1):
qr = qrcode.QRCode()
qr.add_data(url)
qr.make()
img = qr.make_image()
img.save(f'qr_code_{idx}.png')
from flask import Flask, send_file, request
from io import BytesIO
import qrcode
app = Flask(__name__)
@app.route('/generate', methods=['GET'])
def generate_qr():
data = request.args.get('data', 'https://example.com')
qr = qrcode.QRCode()
qr.add_data(data)
qr.make()
img = qr.make_image()
# Save to BytesIO object
img_io = BytesIO()
img.save(img_io, 'PNG')
img_io.seek(0)
return send_file(img_io, mimetype='image/png')
if __name__ == '__main__':
app.run(debug=True)
Usage: http://localhost:5000/generate?data=https://example.com
| Level | Recovery | Use Case |
|---|---|---|
ERROR_CORRECT_L |
7% damage | Clean indoor use |
ERROR_CORRECT_M |
15% damage | Standard use |
ERROR_CORRECT_Q |
25% damage | Harsh environments |
ERROR_CORRECT_H |
30% damage | Printed materials, outdoor |
A: Run pip install pillow
A: Increase error correction: Use ERROR_CORRECT_H
A: Ensure logo is smaller than 20% of QR code size
A: Use URL shortener with analytics (bit.ly, TinyURL) or use our dynamic QR codes which provide built-in analytics