chat-image-edit / src /utils.py
simonlee-cb's picture
feat: fix chat
ad3aed5
raw
history blame
1.78 kB
import base64
from fastapi import UploadFile
from src.services.google_cloud_image_upload import GoogleCloudImageUploadService
from PIL import Image
from urllib.request import urlopen
import io
def image_path_to_base64(image_path: str) -> str:
with open(image_path, "rb") as image_file:
return base64.b64encode(image_file.read()).decode("utf-8")
def upload_file_to_base64(file: UploadFile) -> str:
return base64.b64encode(file.file.read()).decode("utf-8")
def image_path_to_uri(image_path: str) -> str:
return f"data:image/jpeg;base64,{image_path_to_base64(image_path)}"
def upload_image(image_path: str) -> str:
"""
Upload an image to Google Cloud Storage and return the public URL.
Args:
image (str): The path to the image file.
Returns:
str: The public URL of the uploaded image.
"""
upload_service = GoogleCloudImageUploadService()
return upload_service.upload_image_to_gcs(image_path)
def download_image_to_data_uri(image_url: str) -> str:
# Open the image from the URL
response = urlopen(image_url)
img = Image.open(response)
# Determine the image format; default to 'JPEG' if not found
image_format = img.format if img.format is not None else "JPEG"
# Build the MIME type; for 'JPEG', use 'image/jpeg'
mime_type = "image/jpeg" if image_format.upper() == "JPEG" else f"image/{image_format.lower()}"
# Save the image to an in-memory buffer using the detected format
buffered = io.BytesIO()
img.save(buffered, format=image_format)
# Encode the image bytes to base64
img_base64 = base64.b64encode(buffered.getvalue()).decode("utf-8")
# Return the data URI with the correct MIME type
return f"data:{mime_type};base64,{img_base64}"