1

Taking the guide from ExifRead 3.0.0 which says that it can deal with HEIC images, and with the examples of How to work with HEIC image file types in Python, I tried to read metadata of a HEIC file:

p = Path(r'C:\Users\Admin\Pictures\Apple media files\gallery\202204')

l=list(p.glob('**/*.HEIC'))
print(l[0])
# Open image file for reading (must be in binary mode)
f = open(l[0], 'rb')
# Return Exif tags
# tags = exifread.process_file(f)
# tags

exifread.process_file(f)
C:\Users\Admin\Pictures\Apple media files\gallery\202204\IMG_1234.HEIC
---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
c:\Users\Admin\anaconda3\envs\scrape\lib\site-packages\exifread\heic.py in get_parser(self, box)
    170         try:
--> 171             return defs[box.name]
    172         except (IndexError, KeyError) as err:

KeyError: 'hdlr'

The above exception was the direct cause of the following exception:

NoParser                                  Traceback (most recent call last)
 in 
      9 # tags
     10 
---> 11 exifread.process_file(f)

c:\Users\Admin\anaconda3\envs\scrape\lib\site-packages\exifread\__init__.py in process_file(fh, stop_tag, details, strict, debug, truncate_tags, auto_seek)
    135 
    136     try:
--> 137         offset, endian, fake_exif = _determine_type(fh)
    138     except ExifNotFound as err:
    139         logger.warning(err)

c:\Users\Admin\anaconda3\envs\scrape\lib\site-packages\exifread\__init__.py in _determine_type(fh)
...
--> 173             raise NoParser(box.name) from err
    174 
    175     def parse_box(self, box: Box) -> Box:

NoParser: hdlr
Output is truncated. View as a scrollable element or open in a text editor. Adjust cell output settings...

How to reach the metadata of HEIC files with the "exifread" Python module?

questionto42
  • 7,175
  • 4
  • 57
  • 90

1 Answers1

1

This is just to share what I found on the net to fix this. Check HEIC processing error: hdlr on Apple Silicon #4.

Thus, you should downgrade to a version below 3.0.0:

(scrape) C:\Users\Admin>conda install -c conda-forge "exifread<3"
Collecting package metadata (current_repodata.json): done
Solving environment: failed with initial frozen solve. Retrying with flexible solve.
Solving environment: failed with repodata from current_repodata.json, will retry with next repodata source.
Collecting package metadata (repodata.json): done
Solving environment: done

## Package Plan ##

  environment location: C:\Users\Admin\anaconda3\envs\scrape

  added / updated specs:
    - exifread[version='<3']


The following packages will be downloaded:

    package                    |            build
    ---------------------------|-----------------
    exifread-2.3.2             |     pyhd8ed1ab_0          35 KB  conda-forge
    ------------------------------------------------------------
                                           Total:          35 KB

The following packages will be DOWNGRADED:

  exifread                               3.0.0-pyhd8ed1ab_0 --> 2.3.2-pyhd8ed1ab_0


Proceed ([y]/n)? y


Downloading and Extracting Packages
exifread-2.3.2       | 35 KB     | ################################################################################################################# | 100%
Preparing transaction: done
Verifying transaction: done
Executing transaction: done

Restart the Kernel/file/VSCode to reload exifread in version 2.3.2, and it works:

C:\Users\Admin\Pictures\Apple media files\gallery\202204\IMG_1234.HEIC
{'Image Make': (0x010F) ASCII=Apple @ 146,  
...,  
...}
questionto42
  • 7,175
  • 4
  • 57
  • 90