Tai Truong
fix readme
d202ada
import base64
import mimetypes
from pathlib import Path
def convert_image_to_base64(image_path: str | Path) -> str:
"""Convert an image file to a base64 encoded string.
Args:
image_path (str | Path): Path to the image file.
Returns:
str: Base64 encoded string representation of the image.
Raises:
FileNotFoundError: If the image file does not exist.
IOError: If there's an error reading the image file.
ValueError: If the image path is empty or invalid.
"""
if not image_path:
msg = "Image path cannot be empty"
raise ValueError(msg)
image_path = Path(image_path)
if not image_path.exists():
msg = f"Image file not found: {image_path}"
raise FileNotFoundError(msg)
if not image_path.is_file():
msg = f"Path is not a file: {image_path}"
raise ValueError(msg)
try:
with image_path.open("rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
except OSError as e:
msg = f"Error reading image file: {e}"
raise OSError(msg) from e
def create_data_url(image_path: str | Path, mime_type: str | None = None) -> str:
"""Create a data URL from an image file.
Args:
image_path (str | Path): Path to the image file.
mime_type (Optional[str], optional): MIME type of the image.
If None, it will be guessed from the file extension.
Returns:
str: Data URL containing the base64 encoded image.
Raises:
FileNotFoundError: If the image file does not exist.
IOError: If there's an error reading the image file.
ValueError: If the image path is empty or invalid.
"""
if not mime_type:
mime_type = mimetypes.guess_type(str(image_path))[0]
if not mime_type:
msg = f"Could not determine MIME type for: {image_path}"
raise ValueError(msg)
try:
base64_data = convert_image_to_base64(image_path)
except (OSError, FileNotFoundError, ValueError) as e:
msg = f"Failed to create data URL: {e}"
raise type(e)(msg) from e
return f"data:{mime_type};base64,{base64_data}"