2 min read

Image Metadata Extractor

This utility extracts EXIF metadata from images using the Pillow library. It decodes standard EXIF tags (like Camera Model, DateTime, ISO) into human-readable format.

Modules Used:

  • Pillow: To open images and access EXIF data.
  • argparse: To handle command-line arguments.

Installation

pip install Pillow

The Code

Save this as metadata.py.

from PIL import Image, ExifTags
import argparse
import sys

def extract_metadata(image_path):
    try:
        img = Image.open(image_path)

        # getexif() returns a dictionary of tag IDs and values
        exif_data = img.getexif()

        if not exif_data:
            print(f"No EXIF metadata found in {image_path}")
            return

        print(f"Metadata for {image_path}:")
        print("-" * 40)

        for tag_id in exif_data:
            # Get the human-readable tag name from the ID
            tag = ExifTags.TAGS.get(tag_id, tag_id)
            data = exif_data.get(tag_id)

            # Decode bytes to string if possible for cleaner output
            if isinstance(data, bytes):
                try:
                    data = data.decode()
                except:
                    pass # Keep as bytes if decode fails

            print(f"{tag:25}: {data}")

    except IOError:
        print(f"Error: Could not open image file {image_path}")
    except Exception as e:
        print(f"Error: {e}")

if __name__ == "__main__":
    parser = argparse.ArgumentParser(description="Image Metadata Extractor")
    parser.add_argument("image", help="Path to the image file")
    args = parser.parse_args()

    extract_metadata(args.image)

Usage

python metadata.py photo.jpg

programming/python/python