Aasher/Flexx_Your_Homework_Assistant
0
1import base642import io3from PIL import Image4from typing import Optional, Dict, Any5 6def validate_base64_image(base64_string: str) -> bool:7 """8 Validate if a string is a valid base64 encoded image9 """10 try:11 if base64_string.startswith('data:'):12 # Extract base64 part from data URL13 base64_part = base64_string.split(',', 1)[1] if ',' in base64_string else base64_string14 else:15 base64_part = base64_string16 17 # Try to decode and open as image18 image_data = base64.b64decode(base64_part)19 image = Image.open(io.BytesIO(image_data))20 image.verify() # Verify it's a valid image21 return True22 23 except Exception:24 return False25 26def get_image_mime_type(base64_string: str) -> str:27 """28 Detect MIME type of base64 encoded image29 """30 try:31 if base64_string.startswith('data:'):32 # Extract MIME type from data URL33 if ';' in base64_string:34 return base64_string.split(';')[0].replace('data:', '')35 36 # Try to detect from image data37 if base64_string.startswith('data:'):38 base64_part = base64_string.split(',', 1)[1] if ',' in base64_string else base64_string39 else:40 base64_part = base64_string41 42 image_data = base64.b64decode(base64_part)43 image = Image.open(io.BytesIO(image_data))44 45 format_mapping = {46 'JPEG': 'image/jpeg',47 'PNG': 'image/png',48 'GIF': 'image/gif',49 'WEBP': 'image/webp'50 }51 52 return format_mapping.get(image.format, 'image/jpeg')53 54 except Exception:55 return 'image/jpeg' # Default fallback56 57def ensure_data_url_format(image_data: str) -> str:58 """59 Ensure image data is in proper data URL format60 """61 if image_data.startswith('data:'):62 return image_data63 64 # Detect MIME type and add data URL prefix65 mime_type = get_image_mime_type(image_data)66 return f"data:{mime_type};base64,{image_data}"