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