defmodule Image.Exif.FieldNames do
@moduledoc """
Defines the field names with mapping to the relevant
EXIF IFD.
This is useful for mapping developer and user friendly
names to the internal header names in `libvips`.
"""
@field_names [
["ifd3", "GPSDateStamp"],
["ifd3", "GPSMapDatum"],
["ifd3", "GPSDOP"],
["ifd3", "GPSMeasureMode"],
["ifd3", "GPSStatus"],
["ifd3", "GPSSatellites"],
["ifd3", "GPSTimeStamp"],
["ifd3", "GPSAltitude"],
["ifd3", "GPSAltitudeRef"],
["ifd3", "GPSLongitude"],
["ifd3", "GPSLongitudeRef"],
["ifd3", "GPSLatitude"],
["ifd3", "GPSLatitudeRef"],
["ifd3", "GPSVersionID"],
["ifd2", "FlashpixVersion"],
["ifd2", "LensSerialNumber"],
["ifd2", "LensModel"],
["ifd2", "LensSpecification"],
["ifd2", "BodySerialNumber"],
["ifd2", "SceneCaptureType"],
["ifd2", "WhiteBalance"],
["ifd2", "ExposureMode"],
["ifd2", "CustomRendered"],
["ifd2", "FocalPlaneResolutionUnit"],
["ifd2", "FocalPlaneYResolution"],
["ifd2", "FocalPlaneXResolution"],
["ifd2", "ColorSpace"],
["ifd2", "SubSecTimeDigitized"],
["ifd2", "SubSecTimeOriginal"],
["ifd2", "FocalLength"],
["ifd2", "Flash"],
["ifd2", "MeteringMode"],
["ifd2", "MaxApertureValue"],
["ifd2", "ExposureBiasValue"],
["ifd2", "ApertureValue"],
["ifd2", "ShutterSpeedValue"],
["ifd2", "OffsetTime"],
["ifd2", "DateTimeDigitized"],
["ifd2", "DateTimeOriginal"],
["ifd2", "ExifVersion"],
["ifd2", "RecommendedExposureIndex"],
["ifd2", "SensitivityType"],
["ifd2", "ISOSpeedRatings"],
["ifd2", "ExposureProgram"],
["ifd2", "FNumber"],
["ifd2", "ExposureTime"],
["ifd1", "ResolutionUnit"],
["ifd1", "YResolution"],
["ifd1", "XResolution"],
["ifd1", "Compression"],
["ifd0", "Copyright"],
["ifd0", "Artist"],
["ifd0", "DateTime"],
["ifd0", "Software"],
["ifd0", "ResolutionUnit"],
["ifd0", "YResolution"],
["ifd0", "XResolution"],
["ifd0", "Model"],
["ifd0", "Make"],
["ifd0", "ImageDescription"]
]
@omit [
["ifd1", "YResolution"],
["ifd1", "XResolution"],
["ifd1", "ResolutionUnit"]
]
for [ifd, name] <- @field_names, [ifd, name] not in @omit do
vips_header_name = "exif-" <> ifd <> "-" <> name
field = Macro.underscore(name) |> String.to_atom()
def vips_header_name(unquote(field)), do: unquote(vips_header_name)
end
end