”;
Image metadata refers to information associated with a digital image. This metadata can include various details, such as camera model, date and time of capture, location information (GPS coordinates), and keywords.
In this context, extracting image metadata retrieves this underlying information from an image. One widely used type of image metadata is EXIF data, short for “Exchangeable Image File Format.” This standardized format, established by organizations like Canon, Minolta/Sony, and Nikon, encapsulates a comprehensive set of specifics related to the image, including camera settings, exposure parameters, and more.
It”s important to note that all EXIF data is metadata, but not all metadata is EXIF data. EXIF is a specific type of metadata, and the data you”re seeking might also fall under other metadata types, such as IPTC or XMP data.
Extracting Basic Image Metadata
The Python Pillow Image object offers a straightforward way of accessing the basic image metadata, including the filename, dimensions, format, mode, and more.
Example
The example demonstrates how to extract various basic metadata from an image using attributes of the Pillow Image object.
from PIL import Image # Path to the image image_path = "Images/dance-cartoon.gif" # Read the image data using Pillow image = Image.open(image_path) # Access and print basic image metadata print("Filename:", image.filename) print("Image Size:", image.size) print("Image Height:", image.height) print("Image Width:", image.width) print("Image Format:", image.format) print("Image Mode:", image.mode) # Check if the image is animated (for GIF images) if hasattr(image, "is_animated"): print("Image is Animated:", image.is_animated) print("Frames in Image:", image.n_frames)
Output
Filename: Images/dance-cartoon.gif Image Size: (370, 300) Image Height: 300 Image Width: 370 Image Format: GIF Image Mode: P Image is Animated: True Frames in Image: 12
Extracting Advanced Image Metadata
The Python Pillow library offers tools to access and manage image metadata, specifically through the Image.getexif() function and the ExifTags module.
The Image.getexif() function retrieves EXIF data from an image, which includes a wealth of valuable information about the image. The syntax for using this function is −
Image.getexif()
The function returns an Exif object, This object provides read and write access to EXIF image data.
The PIL.ExifTags.TAGS dictionary is used to interpret EXIF data. This dictionary maps 16-bit integer EXIF tag enumerations to human-readable descriptive string names, making the metadata easier to understand. The syntax for this dictionary is −
PIL.ExifTags.TAGS: dict
Example
The following example demonstrates how to access and print EXIF metadata from an image file using Pillow”s getexif() method. It also shows how to use the TAGS dictionary to map tag IDs to human-readable tag names.
from PIL import Image from PIL.ExifTags import TAGS # The path to the image image_path = "Images/flowers_canon.JPG" # Open the image using the PIL library image = Image.open(image_path) # Extract EXIF data exif_data = image.getexif() # Iterate over all EXIF data fields for tag_id, data in exif_data.items(): # Get the tag name, instead of the tag ID tag_name = TAGS.get(tag_id, tag_id) print(f"{tag_name:25}: {data}")
Output
GPSInfo : 10628 ResolutionUnit : 2 ExifOffset : 360 Make : Canon Model : Canon EOS 80D YResolution : 72.0 Orientation : 8 DateTime : 2020:10:25 15:39:08 YCbCrPositioning : 2 Copyright : CAMERAMAN_SAI XResolution : 72.0 Artist : CAMERAMAN_SAI
”;