Loading imgutils/data/image.py +16 −2 Original line number Diff line number Diff line from os import PathLike from typing import Union, BinaryIO, List, Tuple from typing import Union, BinaryIO, List, Tuple, Optional from PIL import Image __all__ = [ 'ImageTyping', 'load_image', 'MultiImagesTyping', 'load_images', 'add_background_for_rgba', ] Loading @@ -17,7 +18,7 @@ ImageTyping = Union[str, PathLike, bytes, bytearray, BinaryIO, Image.Image] MultiImagesTyping = Union[ImageTyping, List[ImageTyping], Tuple[ImageTyping, ...]] def load_image(image: ImageTyping, mode=None): def load_image(image: ImageTyping, mode=None, force_background: Optional[str] = 'white'): if isinstance(image, (str, PathLike, bytes, bytearray, BinaryIO)) or _is_readable(image): image = Image.open(image) elif isinstance(image, Image.Image): Loading @@ -25,6 +26,9 @@ def load_image(image: ImageTyping, mode=None): else: raise TypeError(f'Unknown image type - {image!r}.') if force_background is not None: image = add_background_for_rgba(image, force_background) if mode is not None and image.mode != mode: image = image.convert(mode) Loading @@ -36,3 +40,13 @@ def load_images(images: MultiImagesTyping, mode=None) -> List[Image.Image]: images = [images] return [load_image(item, mode) for item in images] def add_background_for_rgba(image: ImageTyping, background: str = 'white'): if not isinstance(image, Image.Image): image = load_image(image) image = image.convert("RGBA") new_image = Image.new("RGBA", image.size, background) new_image.paste(image, mask=image) image = new_image.convert("RGB") return image test/data/test_image.py +1 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,6 @@ class TestDataImage: with pytest.raises(result): _ = load_image(image_) elif isinstance(image_, Image.Image): assert load_image(image_) is image_ assert load_image(image_, force_background=None) is image_ else: assert image_diff(load_image(image_), result, throw_exception=False) < 1e-2 Loading
imgutils/data/image.py +16 −2 Original line number Diff line number Diff line from os import PathLike from typing import Union, BinaryIO, List, Tuple from typing import Union, BinaryIO, List, Tuple, Optional from PIL import Image __all__ = [ 'ImageTyping', 'load_image', 'MultiImagesTyping', 'load_images', 'add_background_for_rgba', ] Loading @@ -17,7 +18,7 @@ ImageTyping = Union[str, PathLike, bytes, bytearray, BinaryIO, Image.Image] MultiImagesTyping = Union[ImageTyping, List[ImageTyping], Tuple[ImageTyping, ...]] def load_image(image: ImageTyping, mode=None): def load_image(image: ImageTyping, mode=None, force_background: Optional[str] = 'white'): if isinstance(image, (str, PathLike, bytes, bytearray, BinaryIO)) or _is_readable(image): image = Image.open(image) elif isinstance(image, Image.Image): Loading @@ -25,6 +26,9 @@ def load_image(image: ImageTyping, mode=None): else: raise TypeError(f'Unknown image type - {image!r}.') if force_background is not None: image = add_background_for_rgba(image, force_background) if mode is not None and image.mode != mode: image = image.convert(mode) Loading @@ -36,3 +40,13 @@ def load_images(images: MultiImagesTyping, mode=None) -> List[Image.Image]: images = [images] return [load_image(item, mode) for item in images] def add_background_for_rgba(image: ImageTyping, background: str = 'white'): if not isinstance(image, Image.Image): image = load_image(image) image = image.convert("RGBA") new_image = Image.new("RGBA", image.size, background) new_image.paste(image, mask=image) image = new_image.convert("RGB") return image
test/data/test_image.py +1 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,6 @@ class TestDataImage: with pytest.raises(result): _ = load_image(image_) elif isinstance(image_, Image.Image): assert load_image(image_) is image_ assert load_image(image_, force_background=None) is image_ else: assert image_diff(load_image(image_), result, throw_exception=False) < 1e-2