Augmentus-robotics/object-analysis-api
0
1"""2Image utility functions for encoding/decoding and basic operations3"""4import base645import io6import numpy as np7from PIL import Image8 9 10def decode_base64_to_pil(base64_string: str) -> Image.Image:11 """12 Decode a base64 string to a PIL Image13 14 Args:15 base64_string: Base64 encoded image string (with or without data URL prefix)16 17 Returns:18 PIL Image object19 """20 if isinstance(base64_string, str) and base64_string.startswith('data:image'):21 base64_string = base64_string.split(',', 1)[1]22 23 img_bytes = base64.b64decode(base64_string)24 return Image.open(io.BytesIO(img_bytes))25 26 27def pil_to_base64_png(img: Image.Image) -> str:28 """29 Convert PIL Image to base64 PNG string30 31 Args:32 img: PIL Image object33 34 Returns:35 Base64 encoded PNG string (without data URL prefix)36 """37 buf = io.BytesIO()38 img.save(buf, format='PNG')39 buf.seek(0)40 return base64.b64encode(buf.read()).decode('utf-8')41 42 43def ensure_lanczos_resampling():44 """45 Get the correct Lanczos resampling constant for different Pillow versions46 47 Returns:48 Lanczos resampling constant49 """50 try:51 return Image.Resampling.LANCZOS52 except AttributeError:53 return Image.LANCZOS54 55 56def numpy_to_pil(np_array: np.ndarray) -> Image.Image:57 """58 Convert numpy array to PIL Image59 60 Args:61 np_array: Numpy array representation of image62 63 Returns:64 PIL Image object65 """66 return Image.fromarray(np_array)67 68 69def pil_to_numpy(pil_image: Image.Image) -> np.ndarray:70 """71 Convert PIL Image to numpy array72 73 Args:74 pil_image: PIL Image object75 76 Returns:77 Numpy array representation78 """79 return np.array(pil_image)