"""Image <-> bytes/base64 helpers shared by adapters.""" from __future__ import annotations import base64 import io from PIL import Image def to_jpeg_bytes(image: Image.Image, quality: int = 95) -> bytes: buf = io.BytesIO() image.convert("RGB").save(buf, format="JPEG", quality=quality) return buf.getvalue() def to_png_bytes(image: Image.Image) -> bytes: buf = io.BytesIO() image.save(buf, format="PNG") return buf.getvalue() def to_data_uri(image: Image.Image, fmt: str = "jpeg", quality: int = 90) -> str: """Encode an image as a data: URI for OpenAI-compatible image_url fields.""" if fmt == "jpeg": raw = to_jpeg_bytes(image, quality=quality) mime = "image/jpeg" else: raw = to_png_bytes(image) mime = "image/png" b64 = base64.b64encode(raw).decode("ascii") return f"data:{mime};base64,{b64}"