narugo1992
dev(narugo): add full project
66aead2
from os import PathLike
from typing import Union, BinaryIO, List, Tuple
from PIL import Image
__all__ = [
'ImageTyping', 'load_image',
'MultiImagesTyping', 'load_images',
]
def _is_readable(obj):
return hasattr(obj, 'read') and hasattr(obj, 'seek')
ImageTyping = Union[str, PathLike, bytes, bytearray, BinaryIO, Image.Image]
MultiImagesTyping = Union[ImageTyping, List[ImageTyping], Tuple[ImageTyping, ...]]
def load_image(image: ImageTyping, mode=None):
if isinstance(image, (str, PathLike, bytes, bytearray, BinaryIO)) or _is_readable(image):
image = Image.open(image)
elif isinstance(image, Image.Image):
pass # just do nothing
else:
raise TypeError(f'Unknown image type - {image!r}.')
if mode is not None and image.mode != mode:
image = image.convert(mode)
return image
def load_images(images: MultiImagesTyping, mode=None) -> List[Image.Image]:
if not isinstance(images, (list, tuple)):
images = [images]
return [load_image(item, mode) for item in images]