Spaces:
Paused
Paused
import os | |
from typing import Callable, Union | |
import PIL.Image | |
import PIL.ImageOps | |
import requests | |
def load_image( | |
image: Union[str, PIL.Image.Image], convert_method: Callable[[PIL.Image.Image], PIL.Image.Image] = None | |
) -> PIL.Image.Image: | |
""" | |
Loads `image` to a PIL Image. | |
Args: | |
image (`str` or `PIL.Image.Image`): | |
The image to convert to the PIL Image format. | |
convert_method (Callable[[PIL.Image.Image], PIL.Image.Image], optional): | |
A conversion method to apply to the image after loading it. | |
When set to `None` the image will be converted "RGB". | |
Returns: | |
`PIL.Image.Image`: | |
A PIL Image. | |
""" | |
if isinstance(image, str): | |
if image.startswith("http://") or image.startswith("https://"): | |
image = PIL.Image.open(requests.get(image, stream=True).raw) | |
elif os.path.isfile(image): | |
image = PIL.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, PIL.Image.Image): | |
image = image | |
else: | |
raise ValueError( | |
"Incorrect format used for the image. Should be a URL linking to an image, a local path, or a PIL image." | |
) | |
image = PIL.ImageOps.exif_transpose(image) | |
if convert_method is not None: | |
image = convert_method(image) | |
else: | |
image = image.convert("RGB") | |
return image | |