import exifread from pathlib import Path import csv paths = Path('photos').rglob('*.jpg') with open('exif_index.csv', 'w', newline='') as csvfile: writer = csv.DictWriter(csvfile, fieldnames=['path', 'datetime', 'make', 'model', 'lat', 'lon']) writer.writeheader() for p in paths: with open(p, 'rb') as f: tags = exifread.process_file(f, stop_tag='EXIF DateTimeOriginal') writer.writerow({ 'path': str(p), 'datetime': tags.get('EXIF DateTimeOriginal', ''), 'make': tags.get('Image Make', ''), 'model': tags.get('Image Model', ''), 'lat': '', 'lon': '' })
Privacy and ethical considerations
- Treat EXIF data as potentially sensitive. GPS plus photos can reveal home locations and personal routines.
- When publishing images, remove or selectively strip EXIF (tools: exiftool, Pillow, or photography apps).
- For forensic or investigative uses, verify chain-of-custody and consider metadata tampering (EXIF can be edited).
Alternatives and complementary tools
- exiftool (Perl-based) — very feature-rich for reading/writing and batch operations.
- Pillow — image handling plus some EXIF support (more for image manipulation).
- piexif — read/write EXIF in JPEG/PNG; useful if you need to modify metadata.
- exif (Python package) — higher-level API for EXIF than exifread in some cases.
Comparison table:
Tool | Read | Write | Best for |
---|---|---|---|
EXIFRead | Yes | No | Simple, reliable read-only extraction |
exiftool | Yes | Yes | Powerful command-line batch processing |
piexif | Yes | Yes | Python-based read/write manipulation |
Pillow | Limited | Limited | Image manipulation + basic EXIF handling |
Troubleshooting examples
- If tags are empty or missing: confirm the file is actually JPEG/TIFF and not already stripped by an uploader.
- If GPS values look wrong: check GPSLatitudeRef/GPSLongitudeRef for N/S/E/W to sign coordinates correctly.
- If orientation displays incorrectly: apply rotation based on Image Orientation before displaying or creating thumbnails.
Quick reference checklist
- Open files in binary mode (‘rb’) before calling exifread.process_file().
- Check for tag presence before using values.
- Convert GPS rationals to decimal degrees.
- Handle Orientation by rotating pixels if display matters.
- Be careful with privacy-sensitive fields.
EXIFRead gives a straightforward, reliable way to extract the metadata many photographers and developers need. For simple inspection and analytics, it’s often all you need; for heavy-duty editing or batch rewriting of metadata, combine it with tools like exiftool or piexif.
Leave a Reply