ianare / exif-py

Easy to use Python module to extract Exif metadata from digital image files.
BSD 3-Clause "New" or "Revised" License
831 stars 191 forks source link

Many useless warnings #167

Open MichaelMonashev opened 2 years ago

MichaelMonashev commented 2 years ago

I am opening many image file and see absolutely useless warning:

PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.
PNG file does not have exif data.

module version:

$ pip3 list | grep ExifRead
ExifRead                3.0.0

If image file does not have exif data we just get empty dict.

guwidoe commented 1 year ago

I have the same problem. This is very annoying! Unfortunately, the development of this module does not seem super active... I fixed it like this until the underlying issue gets fixed:

Go to the implementation of process_file and look at the first try except block, it looks like this:

    try:
        offset, endian, fake_exif = _determine_type(fh)
    except ExifNotFound as err:
        logger.warning(err)
        return {}
    except InvalidExif as err:
        logger.debug(err)
        return {}

logger.warning(err) is what prints the warning. You can get rid of it like this:

    try:
        offset, endian, fake_exif = _determine_type(fh)
    except ExifNotFound as err:
        if warnings:
            logger.warning(err)
        return {}
    except InvalidExif as err:
        logger.debug(err)
        return {}

and just add a warnings parameter to the function declaration:

def process_file(fh: BinaryIO, stop_tag=DEFAULT_STOP_TAG,
                 details=True, strict=False, debug=False,
                 truncate_tags=True, auto_seek=True, warnings=False):

Now if you really need the warning, you can still set warnings to True.

dwinant commented 1 year ago

Without hacking the module, in your main code where you call exifread, try: import logging then logging.getLogger("exifread").setLevel(logging.ERROR)