exif: format specification

This page hosts a formal specification of exif using Kaitai Struct. This specification can be automatically translated into a variety of programming languages to get a parsing library.

Block diagram

Format specification in Kaitai Struct YAML

meta:
  id: exif
  xref:
    forensicswiki: exif
    justsolve: Exif
    loc: fdd000146
    pronom:
      - x-fmt/398 # Exif 2.0
      - x-fmt/390 # Exif 2.1
      - x-fmt/391 # Exif 2.2
      - fmt/645 # Exif 2.21 ("2.2.1" in PRONOM is misspelled)
    wikidata: Q26383099
  license: CC0-1.0
seq:
  - id: endianness
    type: u2le
  - id: body
    type: exif_body
types:
  exif_body:
    meta:
      endian:
        switch-on: _root.endianness
        cases:
          0x4949: le
          0x4d4d: be
    seq:
      - id: version
        type: u2
      - id: ifd0_ofs
        type: u4
    instances:
      ifd0:
        pos: ifd0_ofs
        type: ifd
    types:
      ifd:
        seq:
          - id: num_fields
            type: u2
          - id: fields
            type: ifd_field
            repeat: expr
            repeat-expr: num_fields
          - id: next_ifd_ofs
            type: u4
        instances:
          next_ifd:
            pos: next_ifd_ofs
            type: ifd
            if: next_ifd_ofs != 0
      ifd_field:
        seq:
          - id: tag
            type: u2
            enum: tag_enum
          - id: field_type
            type: u2
            enum: field_type_enum
          - id: length
            type: u4
          - id: ofs_or_data
            type: u4
        instances:
          type_byte_length:
            value: 'field_type == field_type_enum::word ? 2 : (field_type == field_type_enum::dword ? 4 : 1)'
          byte_length:
            value: length * type_byte_length
          is_immediate_data:
            value: 'byte_length <= 4'
          data:
            io: _root._io
            pos: ofs_or_data
            size: byte_length
            if: not is_immediate_data
        enums:
          field_type_enum:
            1: byte
            2: ascii_string
            3: word
            4: dword
            5: rational
            7: undefined
            9: slong
            10: srational
          tag_enum:
            0x0100: image_width
            0x0101: image_height
            0x0102: bits_per_sample
            0x0103: compression
            0x0106: photometric_interpretation
            0x0107: thresholding
            0x0108: cell_width
            0x0109: cell_length
            0x010a: fill_order
            0x010d: document_name
            0x010e: image_description
            0x010f: make
            0x0110: model
            0x0111: strip_offsets
            0x0112: orientation
            0x0115: samples_per_pixel
            0x0116: rows_per_strip
            0x0117: strip_byte_counts
            0x0118: min_sample_value
            0x0119: max_sample_value
            0x011a: x_resolution
            0x011b: y_resolution
            0x011c: planar_configuration
            0x011d: page_name
            0x011e: x_position
            0x011f: y_position
            0x0120: free_offsets
            0x0121: free_byte_counts
            0x0122: gray_response_unit
            0x0123: gray_response_curve
            0x0124: t4_options
            0x0125: t6_options
            0x0128: resolution_unit
            0x0129: page_number
            0x012c: color_response_unit
            0x012d: transfer_function
            0x0131: software
            0x0132: modify_date
            0x013b: artist
            0x013c: host_computer
            0x013d: predictor
            0x013e: white_point
            0x013f: primary_chromaticities
            0x0140: color_map
            0x0141: halftone_hints
            0x0142: tile_width
            0x0143: tile_length
            0x0144: tile_offsets
            0x0145: tile_byte_counts
            0x0146: bad_fax_lines
            0x0147: clean_fax_data
            0x0148: consecutive_bad_fax_lines
            0x014a: sub_ifd
            0x014c: ink_set
            0x014d: ink_names
            0x014e: numberof_inks
            0x0150: dot_range
            0x0151: target_printer
            0x0152: extra_samples
            0x0153: sample_format
            0x0154: s_min_sample_value
            0x0155: s_max_sample_value
            0x0156: transfer_range
            0x0157: clip_path
            0x0158: x_clip_path_units
            0x0159: y_clip_path_units
            0x015a: indexed
            0x015b: jpeg_tables
            0x015f: opi_proxy
            0x0190: global_parameters_ifd
            0x0191: profile_type
            0x0192: fax_profile
            0x0193: coding_methods
            0x0194: version_year
            0x0195: mode_number
            0x01b1: decode
            0x01b2: default_image_color
            0x01b3: t82_options
            0x01b5: jpeg_tables2
            0x0200: jpeg_proc
            0x0201: thumbnail_offset
            0x0202: thumbnail_length
            0x0203: jpeg_restart_interval
            0x0205: jpeg_lossless_predictors
            0x0206: jpeg_point_transforms
            0x0207: jpegq_tables
            0x0208: jpegdc_tables
            0x0209: jpegac_tables
            0x0211: y_cb_cr_coefficients
            0x0212: y_cb_cr_sub_sampling
            0x0213: y_cb_cr_positioning
            0x0214: reference_black_white
            0x022f: strip_row_counts
            0x02bc: application_notes
            0x03e7: uspto_miscellaneous
            0x1000: related_image_file_format
            0x1001: related_image_width
            0x1002: related_image_height
            0x4746: rating
            0x4747: xp_dip_xml
            0x4748: stitch_info
            0x4749: rating_percent
            0x7000: sony_raw_file_type
            0x7032: light_falloff_params
            0x7035: chromatic_aberration_corr_params
            0x7037: distortion_corr_params
            0x800d: image_id
            0x80a3: wang_tag1
            0x80a4: wang_annotation
            0x80a5: wang_tag3
            0x80a6: wang_tag4
            0x80b9: image_reference_points
            0x80ba: region_xform_tack_point
            0x80bb: warp_quadrilateral
            0x80bc: affine_transform_mat
            0x80e3: matteing
            0x80e4: data_type
            0x80e5: image_depth
            0x80e6: tile_depth
            0x8214: image_full_width
            0x8215: image_full_height
            0x8216: texture_format
            0x8217: wrap_modes
            0x8218: fov_cot
            0x8219: matrix_world_to_screen
            0x821a: matrix_world_to_camera
            0x827d: model2
            0x828d: cfa_repeat_pattern_dim
            0x828e: cfa_pattern2
            0x828f: battery_level
            0x8290: kodak_ifd
            0x8298: copyright
            0x829a: exposure_time
            0x829d: f_number
            0x82a5: md_file_tag
            0x82a6: md_scale_pixel
            0x82a7: md_color_table
            0x82a8: md_lab_name
            0x82a9: md_sample_info
            0x82aa: md_prep_date
            0x82ab: md_prep_time
            0x82ac: md_file_units
            0x830e: pixel_scale
            0x8335: advent_scale
            0x8336: advent_revision
            0x835c: uic1_tag
            0x835d: uic2_tag
            0x835e: uic3_tag
            0x835f: uic4_tag
            0x83bb: iptc_naa
            0x847e: intergraph_packet_data
            0x847f: intergraph_flag_registers
            0x8480: intergraph_matrix
            0x8481: ingr_reserved
            0x8482: model_tie_point
            0x84e0: site
            0x84e1: color_sequence
            0x84e2: it8_header
            0x84e3: raster_padding
            0x84e4: bits_per_run_length
            0x84e5: bits_per_extended_run_length
            0x84e6: color_table
            0x84e7: image_color_indicator
            0x84e8: background_color_indicator
            0x84e9: image_color_value
            0x84ea: background_color_value
            0x84eb: pixel_intensity_range
            0x84ec: transparency_indicator
            0x84ed: color_characterization
            0x84ee: hc_usage
            0x84ef: trap_indicator
            0x84f0: cmyk_equivalent
            0x8546: sem_info
            0x8568: afcp_iptc
            0x85b8: pixel_magic_jbig_options
            0x85d7: jpl_carto_ifd
            0x85d8: model_transform
            0x8602: wb_grgb_levels
            0x8606: leaf_data
            0x8649: photoshop_settings
            0x8769: exif_offset
            0x8773: icc_profile
            0x877f: tiff_fx_extensions
            0x8780: multi_profiles
            0x8781: shared_data
            0x8782: t88_options
            0x87ac: image_layer
            0x87af: geo_tiff_directory
            0x87b0: geo_tiff_double_params
            0x87b1: geo_tiff_ascii_params
            0x87be: jbig_options
            0x8822: exposure_program
            0x8824: spectral_sensitivity
            0x8825: gps_info
            0x8827: iso
            0x8828: opto_electric_conv_factor
            0x8829: interlace
            0x882a: time_zone_offset
            0x882b: self_timer_mode
            0x8830: sensitivity_type
            0x8831: standard_output_sensitivity
            0x8832: recommended_exposure_index
            0x8833: iso_speed
            0x8834: iso_speed_latitudeyyy
            0x8835: iso_speed_latitudezzz
            0x885c: fax_recv_params
            0x885d: fax_sub_address
            0x885e: fax_recv_time
            0x8871: fedex_edr
            0x888a: leaf_sub_ifd
            0x9000: exif_version
            0x9003: date_time_original
            0x9004: create_date
            0x9009: google_plus_upload_code
            0x9010: offset_time
            0x9011: offset_time_original
            0x9012: offset_time_digitized
            0x9101: components_configuration
            0x9102: compressed_bits_per_pixel
            0x9201: shutter_speed_value
            0x9202: aperture_value
            0x9203: brightness_value
            0x9204: exposure_compensation
            0x9205: max_aperture_value
            0x9206: subject_distance
            0x9207: metering_mode
            0x9208: light_source
            0x9209: flash
            0x920a: focal_length
            0x920b: flash_energy
            0x920c: spatial_frequency_response
            0x920d: noise
            0x920e: focal_plane_x_resolution
            0x920f: focal_plane_y_resolution
            0x9210: focal_plane_resolution_unit
            0x9211: image_number
            0x9212: security_classification
            0x9213: image_history
            0x9214: subject_area
            0x9215: exposure_index
            0x9216: tiff_ep_standard_id
            0x9217: sensing_method
            0x923a: cip3_data_file
            0x923b: cip3_sheet
            0x923c: cip3_side
            0x923f: sto_nits
            0x927c: maker_note
            0x9286: user_comment
            0x9290: sub_sec_time
            0x9291: sub_sec_time_original
            0x9292: sub_sec_time_digitized
            0x932f: ms_document_text
            0x9330: ms_property_set_storage
            0x9331: ms_document_text_position
            0x935c: image_source_data
            0x9400: ambient_temperature
            0x9401: humidity
            0x9402: pressure
            0x9403: water_depth
            0x9404: acceleration
            0x9405: camera_elevation_angle
            0x9c9b: xp_title
            0x9c9c: xp_comment
            0x9c9d: xp_author
            0x9c9e: xp_keywords
            0x9c9f: xp_subject
            0xa000: flashpix_version
            0xa001: color_space
            0xa002: exif_image_width
            0xa003: exif_image_height
            0xa004: related_sound_file
            0xa005: interop_offset
            0xa010: samsung_raw_pointers_offset
            0xa011: samsung_raw_pointers_length
            0xa101: samsung_raw_byte_order
            0xa102: samsung_raw_unknown
            0xa20b: flash_energy2
            0xa20c: spatial_frequency_response2
            0xa20d: noise2
            0xa20e: focal_plane_x_resolution2
            0xa20f: focal_plane_y_resolution2
            0xa210: focal_plane_resolution_unit2
            0xa211: image_number2
            0xa212: security_classification2
            0xa213: image_history2
            0xa214: subject_location
            0xa215: exposure_index2
            0xa216: tiff_ep_standard_id2
            0xa217: sensing_method2
            0xa300: file_source
            0xa301: scene_type
            0xa302: cfa_pattern
            0xa401: custom_rendered
            0xa402: exposure_mode
            0xa403: white_balance
            0xa404: digital_zoom_ratio
            0xa405: focal_length_in35mm_format
            0xa406: scene_capture_type
            0xa407: gain_control
            0xa408: contrast
            0xa409: saturation
            0xa40a: sharpness
            0xa40b: device_setting_description
            0xa40c: subject_distance_range
            0xa420: image_unique_id
            0xa430: owner_name
            0xa431: serial_number
            0xa432: lens_info
            0xa433: lens_make
            0xa434: lens_model
            0xa435: lens_serial_number
            0xa480: gdal_metadata
            0xa481: gdal_no_data
            0xa500: gamma
            0xafc0: expand_software
            0xafc1: expand_lens
            0xafc2: expand_film
            0xafc3: expand_filter_lens
            0xafc4: expand_scanner
            0xafc5: expand_flash_lamp
            0xbc01: pixel_format
            0xbc02: transformation
            0xbc03: uncompressed
            0xbc04: image_type
            0xbc80: image_width2
            0xbc81: image_height2
            0xbc82: width_resolution
            0xbc83: height_resolution
            0xbcc0: image_offset
            0xbcc1: image_byte_count
            0xbcc2: alpha_offset
            0xbcc3: alpha_byte_count
            0xbcc4: image_data_discard
            0xbcc5: alpha_data_discard
            0xc427: oce_scanjob_desc
            0xc428: oce_application_selector
            0xc429: oce_id_number
            0xc42a: oce_image_logic
            0xc44f: annotations
            0xc4a5: print_im
            0xc573: original_file_name
            0xc580: uspto_original_content_type
            0xc612: dng_version
            0xc613: dng_backward_version
            0xc614: unique_camera_model
            0xc615: localized_camera_model
            0xc616: cfa_plane_color
            0xc617: cfa_layout
            0xc618: linearization_table
            0xc619: black_level_repeat_dim
            0xc61a: black_level
            0xc61b: black_level_delta_h
            0xc61c: black_level_delta_v
            0xc61d: white_level
            0xc61e: default_scale
            0xc61f: default_crop_origin
            0xc620: default_crop_size
            0xc621: color_matrix1
            0xc622: color_matrix2
            0xc623: camera_calibration1
            0xc624: camera_calibration2
            0xc625: reduction_matrix1
            0xc626: reduction_matrix2
            0xc627: analog_balance
            0xc628: as_shot_neutral
            0xc629: as_shot_white_xy
            0xc62a: baseline_exposure
            0xc62b: baseline_noise
            0xc62c: baseline_sharpness
            0xc62d: bayer_green_split
            0xc62e: linear_response_limit
            0xc62f: camera_serial_number
            0xc630: dng_lens_info
            0xc631: chroma_blur_radius
            0xc632: anti_alias_strength
            0xc633: shadow_scale
            0xc634: sr2_private
            0xc635: maker_note_safety
            0xc640: raw_image_segmentation
            0xc65a: calibration_illuminant1
            0xc65b: calibration_illuminant2
            0xc65c: best_quality_scale
            0xc65d: raw_data_unique_id
            0xc660: alias_layer_metadata
            0xc68b: original_raw_file_name
            0xc68c: original_raw_file_data
            0xc68d: active_area
            0xc68e: masked_areas
            0xc68f: as_shot_icc_profile
            0xc690: as_shot_pre_profile_matrix
            0xc691: current_icc_profile
            0xc692: current_pre_profile_matrix
            0xc6bf: colorimetric_reference
            0xc6c5: s_raw_type
            0xc6d2: panasonic_title
            0xc6d3: panasonic_title2
            0xc6f3: camera_calibration_sig
            0xc6f4: profile_calibration_sig
            0xc6f5: profile_ifd
            0xc6f6: as_shot_profile_name
            0xc6f7: noise_reduction_applied
            0xc6f8: profile_name
            0xc6f9: profile_hue_sat_map_dims
            0xc6fa: profile_hue_sat_map_data1
            0xc6fb: profile_hue_sat_map_data2
            0xc6fc: profile_tone_curve
            0xc6fd: profile_embed_policy
            0xc6fe: profile_copyright
            0xc714: forward_matrix1
            0xc715: forward_matrix2
            0xc716: preview_application_name
            0xc717: preview_application_version
            0xc718: preview_settings_name
            0xc719: preview_settings_digest
            0xc71a: preview_color_space
            0xc71b: preview_date_time
            0xc71c: raw_image_digest
            0xc71d: original_raw_file_digest
            0xc71e: sub_tile_block_size
            0xc71f: row_interleave_factor
            0xc725: profile_look_table_dims
            0xc726: profile_look_table_data
            0xc740: opcode_list1
            0xc741: opcode_list2
            0xc74e: opcode_list3
            0xc761: noise_profile
            0xc763: time_codes
            0xc764: frame_rate
            0xc772: t_stop
            0xc789: reel_name
            0xc791: original_default_final_size
            0xc792: original_best_quality_size
            0xc793: original_default_crop_size
            0xc7a1: camera_label
            0xc7a3: profile_hue_sat_map_encoding
            0xc7a4: profile_look_table_encoding
            0xc7a5: baseline_exposure_offset
            0xc7a6: default_black_render
            0xc7a7: new_raw_image_digest
            0xc7a8: raw_to_preview_gain
            0xc7b5: default_user_crop
            0xea1c: padding
            0xea1d: offset_schema
            0xfde8: owner_name2
            0xfde9: serial_number2
            0xfdea: lens
            0xfe00: kdc_ifd
            0xfe4c: raw_file
            0xfe4d: converter
            0xfe4e: white_balance2
            0xfe51: exposure
            0xfe52: shadows
            0xfe53: brightness
            0xfe54: contrast2
            0xfe55: saturation2
            0xfe56: sharpness2
            0xfe57: smoothness
            0xfe58: moire_filter