| from flask import Flask, request, jsonify, send_file |
| import qrcode |
| from io import BytesIO |
| import base64 |
| from reportlab.lib.pagesizes import letter |
| from reportlab.pdfgen import canvas |
| from PIL import Image |
|
|
| app = Flask(__name__) |
|
|
| @app.route('/') |
| def index(): |
| return open('index.html').read() |
|
|
| @app.route('/generate_qr', methods=['POST']) |
| def generate_qr(): |
| data = request.get_json() |
| url = data.get('url') |
| |
| if not url: |
| return jsonify({'error': 'URL is required'}), 400 |
| |
| |
| qr = qrcode.make(url) |
| |
| |
| buffer = BytesIO() |
| qr.save(buffer, format='PNG') |
| buffer.seek(0) |
| |
| |
| qr_base64 = base64.b64encode(buffer.getvalue()).decode('utf-8') |
| qr_image = f'data:image/png;base64,{qr_base64}' |
| |
| return jsonify({'qr_image': qr_image}) |
|
|
| @app.route('/download_qr', methods=['POST']) |
| def download_qr(): |
| data = request.get_json() |
| url = data.get('url') |
| format = data.get('format', 'png').lower() |
| |
| if not url: |
| return jsonify({'error': 'URL is required'}), 400 |
| |
| |
| qr = qrcode.make(url) |
| |
| buffer = BytesIO() |
| |
| if format == 'png': |
| qr.save(buffer, format='PNG') |
| mime_type = 'image/png' |
| filename = 'qr_code.png' |
| elif format == 'jpg': |
| qr.save(buffer, format='PNG') |
| img = Image.open(buffer).convert('RGB') |
| buffer = BytesIO() |
| img.save(buffer, format='JPEG', quality=95) |
| mime_type = 'image/jpeg' |
| filename = 'qr_code.jpg' |
| elif format == 'pdf': |
| c = canvas.Canvas(buffer, pagesize=letter) |
| img_buffer = BytesIO() |
| qr.save(img_buffer, format='PNG') |
| img = Image.open(img_buffer) |
| img_width, img_height = img.size |
| c.drawImage(img_buffer, (letter[0] - img_width) / 2, (letter[1] - img_height) / 2, img_width, img_height) |
| c.showPage() |
| c.save() |
| mime_type = 'application/pdf' |
| filename = 'qr_code.pdf' |
| else: |
| return jsonify({'error': 'Unsupported format'}), 400 |
| |
| buffer.seek(0) |
| return send_file(buffer, mimetype=mime_type, as_attachment=True, download_name=filename) |
|
|
| if __name__ == '__main__': |
| app.run(host='0.0.0.0', port=7860, debug=False) |