Source code for bag.corrupt_image

"""Read image files and do something if they are corrupt."""

from pathlib import Path
from typing import Generator, Union  # noqa

[docs]def is_valid_image(pth: Union[str, Path]) -> bool: """Read an image file and return whether it is valid.""" from PIL import Image # try: img = except IOError: return False try: img.load() except IOError: return False finally: if img.fp: img.fp.close() return True
[docs]def corrupt_images(directory: Union[str, Path]='.', files: str='*.jpg', ) -> Generator[Path, None, None]: """Find corrupt images in ``directory``. Generator that, given a ``directory``, goes through all files that pass through the filter ``files``, reads them onto Pillow and yields each corrupt image path. Example usage:: target = Path('./images/corrupt/') target.mkdir() for img in corrupt_images('./images/', files='*.png'): # Do something with *img*, which is a Path object: img.rename(target / # move it """ directory = Path(directory) for p in directory.glob(files): if not is_valid_image(p): yield p