mirror of
https://github.com/nirvana-7777/script.service.ultimate.git
synced 2026-09-26 19:12:35 +02:00
100 lines
2.6 KiB
Python
100 lines
2.6 KiB
Python
"""
|
|
Fast QR Code Generator for Kodi
|
|
Pure Python implementation using qrcode library
|
|
Generates PNG QR codes directly from URLs
|
|
|
|
This is a GENERIC module - no provider-specific logic!
|
|
Size: qrcode library is ~50KB, pure Python
|
|
"""
|
|
|
|
import io
|
|
from typing import Optional
|
|
|
|
|
|
def generate_qr_code_png(data: str, size: int = 512) -> Optional[bytes]:
|
|
"""
|
|
Generate QR code PNG from data string
|
|
|
|
This is a generic function that works for ANY provider.
|
|
No provider-specific logic here!
|
|
|
|
Args:
|
|
data: String to encode (URL, code, etc.)
|
|
size: Output size in pixels (square)
|
|
|
|
Returns:
|
|
PNG file content as bytes, or None if failed
|
|
"""
|
|
try:
|
|
import qrcode # type: ignore
|
|
from qrcode.image.pure import PyPNGImage # type: ignore
|
|
|
|
# Create QR code
|
|
qr = qrcode.QRCode(
|
|
version=1, # Auto-size
|
|
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
|
box_size=10,
|
|
border=4,
|
|
)
|
|
|
|
qr.add_data(data)
|
|
qr.make(fit=True)
|
|
|
|
# Generate image using pure Python PNG backend
|
|
img = qr.make_image(image_factory=PyPNGImage, fill_color="black", back_color="white")
|
|
|
|
# Convert to PNG bytes
|
|
buffer = io.BytesIO()
|
|
img.save(buffer, format="PNG")
|
|
png_data = buffer.getvalue()
|
|
|
|
return png_data
|
|
|
|
except ImportError:
|
|
# Fallback: Try with PIL if available
|
|
try:
|
|
import qrcode
|
|
|
|
qr = qrcode.QRCode(
|
|
version=1,
|
|
error_correction=qrcode.constants.ERROR_CORRECT_L,
|
|
box_size=10,
|
|
border=4,
|
|
)
|
|
|
|
qr.add_data(data)
|
|
qr.make(fit=True)
|
|
|
|
img = qr.make_image(fill_color="black", back_color="white")
|
|
|
|
buffer = io.BytesIO()
|
|
img.save(buffer, format="PNG")
|
|
png_data = buffer.getvalue()
|
|
|
|
return png_data
|
|
|
|
except Exception as e:
|
|
print(f"Failed to generate QR code: {e}")
|
|
return None
|
|
|
|
except Exception as e:
|
|
print(f"Failed to generate QR code: {e}")
|
|
return None
|
|
|
|
|
|
# Test function
|
|
if __name__ == "__main__":
|
|
# Test QR generation
|
|
test_url = "https://example.com/login?code=ABC123"
|
|
|
|
png_data = generate_qr_code_png(test_url, size=512)
|
|
if png_data:
|
|
print(f"Generated QR code PNG: {len(png_data)} bytes")
|
|
|
|
# Save to file for testing
|
|
with open("test_qr.png", "wb") as f:
|
|
f.write(png_data)
|
|
print("Saved to test_qr.png")
|
|
else:
|
|
print("Failed to generate QR code")
|