| 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 | |