|
from .instructpix2pix import InstructPix2Pix, MagicBrush |
|
|
|
from typing import Union, Optional, Tuple |
|
import numpy as np |
|
from PIL import Image, ImageOps |
|
import os |
|
import requests |
|
|
|
|
|
|
|
|
|
def load_image(image: Union[str, Image.Image], format: str = "RGB", size: Optional[Tuple] = None) -> Image.Image: |
|
""" |
|
Load an image from a given path or URL and convert it to a PIL Image. |
|
|
|
Args: |
|
image (Union[str, Image.Image]): The image path, URL, or a PIL Image object to be loaded. |
|
format (str, optional): Desired color format of the resulting image. Defaults to "RGB". |
|
size (Optional[Tuple], optional): Desired size for resizing the image. Defaults to None. |
|
|
|
Returns: |
|
Image.Image: A PIL Image in the specified format and size. |
|
|
|
Raises: |
|
ValueError: If the provided image format is not recognized. |
|
""" |
|
if isinstance(image, str): |
|
if image.startswith("http://") or image.startswith("https://"): |
|
image = Image.open(requests.get(image, stream=True).raw) |
|
elif os.path.isfile(image): |
|
image = Image.open(image) |
|
else: |
|
raise ValueError( |
|
f"Incorrect path or url, URLs must start with `http://` or `https://`, and {image} is not a valid path" |
|
) |
|
elif isinstance(image, Image.Image): |
|
image = image |
|
else: |
|
raise ValueError( |
|
"Incorrect format used for image. Should be an url linking to an image, a local path, or a PIL image." |
|
) |
|
image = ImageOps.exif_transpose(image) |
|
image = image.convert(format) |
|
if (size != None): |
|
image = image.resize(size, Image.LANCZOS) |
|
return image |
|
|