/* * Copyright 2002-2016 Drew Noakes * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * More information about this project is available at: * * https://drewnoakes.com/code/exif/ * https://github.com/drewnoakes/metadata-extractor */ package com.drew.metadata.exif; import com.drew.metadata.Directory; import java.util.HashMap; /** * Base class for several Exif format tag directories. * * @author Drew Noakes https://drewnoakes.com */ public abstract class ExifDirectoryBase extends Directory { public static final int TAG_INTEROP_INDEX = 0x0001; public static final int TAG_INTEROP_VERSION = 0x0002; /** * The new subfile type tag. * 0 = Full-resolution Image * 1 = Reduced-resolution image * 2 = Single page of multi-page image * 3 = Single page of multi-page reduced-resolution image * 4 = Transparency mask * 5 = Transparency mask of reduced-resolution image * 6 = Transparency mask of multi-page image * 7 = Transparency mask of reduced-resolution multi-page image */ public static final int TAG_NEW_SUBFILE_TYPE = 0x00FE; /** * The old subfile type tag. * 1 = Full-resolution image (Main image) * 2 = Reduced-resolution image (Thumbnail) * 3 = Single page of multi-page image */ public static final int TAG_SUBFILE_TYPE = 0x00FF; public static final int TAG_IMAGE_WIDTH = 0x0100; public static final int TAG_IMAGE_HEIGHT = 0x0101; /** * When image format is no compression, this value shows the number of bits * per component for each pixel. Usually this value is '8,8,8'. */ public static final int TAG_BITS_PER_SAMPLE = 0x0102; public static final int TAG_COMPRESSION = 0x0103; /** * Shows the color space of the image data components. * 0 = WhiteIsZero * 1 = BlackIsZero * 2 = RGB * 3 = RGB Palette * 4 = Transparency Mask * 5 = CMYK * 6 = YCbCr * 8 = CIELab * 9 = ICCLab * 10 = ITULab * 32803 = Color Filter Array * 32844 = Pixar LogL * 32845 = Pixar LogLuv * 34892 = Linear Raw */ public static final int TAG_PHOTOMETRIC_INTERPRETATION = 0x0106; /** * 1 = No dithering or halftoning * 2 = Ordered dither or halftone * 3 = Randomized dither */ public static final int TAG_THRESHOLDING = 0x0107; /** * 1 = Normal * 2 = Reversed */ public static final int TAG_FILL_ORDER = 0x010A; public static final int TAG_DOCUMENT_NAME = 0x010D; public static final int TAG_IMAGE_DESCRIPTION = 0x010E; public static final int TAG_MAKE = 0x010F; public static final int TAG_MODEL = 0x0110; /** The position in the file of raster data. */ public static final int TAG_STRIP_OFFSETS = 0x0111; public static final int TAG_ORIENTATION = 0x0112; /** Each pixel is composed of this many samples. */ public static final int TAG_SAMPLES_PER_PIXEL = 0x0115; /** The raster is codified by a single block of data holding this many rows. */ public static final int TAG_ROWS_PER_STRIP = 0x0116; /** The size of the raster data in bytes. */ public static final int TAG_STRIP_BYTE_COUNTS = 0x0117; public static final int TAG_MIN_SAMPLE_VALUE = 0x0118; public static final int TAG_MAX_SAMPLE_VALUE = 0x0119; public static final int TAG_X_RESOLUTION = 0x011A; public static final int TAG_Y_RESOLUTION = 0x011B; /** * When image format is no compression YCbCr, this value shows byte aligns of * YCbCr data. If value is '1', Y/Cb/Cr value is chunky format, contiguous for * each subsampling pixel. If value is '2', Y/Cb/Cr value is separated and * stored to Y plane/Cb plane/Cr plane format. */ public static final int TAG_PLANAR_CONFIGURATION = 0x011C; public static final int TAG_PAGE_NAME = 0x011D; public static final int TAG_RESOLUTION_UNIT = 0x0128; public static final int TAG_TRANSFER_FUNCTION = 0x012D; public static final int TAG_SOFTWARE = 0x0131; public static final int TAG_DATETIME = 0x0132; public static final int TAG_ARTIST = 0x013B; public static final int TAG_HOST_COMPUTER = 0x013C; public static final int TAG_PREDICTOR = 0x013D; public static final int TAG_WHITE_POINT = 0x013E; public static final int TAG_PRIMARY_CHROMATICITIES = 0x013F; public static final int TAG_TILE_WIDTH = 0x0142; public static final int TAG_TILE_LENGTH = 0x0143; public static final int TAG_TILE_OFFSETS = 0x0144; public static final int TAG_TILE_BYTE_COUNTS = 0x0145; /** * Tag is a pointer to one or more sub-IFDs. + Seems to be used exclusively by raw formats, referencing one or two IFDs. */ public static final int TAG_SUB_IFD_OFFSET = 0x014a; public static final int TAG_TRANSFER_RANGE = 0x0156; public static final int TAG_JPEG_TABLES = 0x015B; public static final int TAG_JPEG_PROC = 0x0200; public static final int TAG_YCBCR_COEFFICIENTS = 0x0211; public static final int TAG_YCBCR_SUBSAMPLING = 0x0212; public static final int TAG_YCBCR_POSITIONING = 0x0213; public static final int TAG_REFERENCE_BLACK_WHITE = 0x0214; public static final int TAG_STRIP_ROW_COUNTS = 0x022f; public static final int TAG_APPLICATION_NOTES = 0x02bc; public static final int TAG_RELATED_IMAGE_FILE_FORMAT = 0x1000; public static final int TAG_RELATED_IMAGE_WIDTH = 0x1001; public static final int TAG_RELATED_IMAGE_HEIGHT = 0x1002; public static final int TAG_RATING = 0x4746; public static final int TAG_CFA_REPEAT_PATTERN_DIM = 0x828D; /** There are two definitions for CFA pattern, I don't know the difference... */ public static final int TAG_CFA_PATTERN_2 = 0x828E; public static final int TAG_BATTERY_LEVEL = 0x828F; public static final int TAG_COPYRIGHT = 0x8298; /** * Exposure time (reciprocal of shutter speed). Unit is second. */ public static final int TAG_EXPOSURE_TIME = 0x829A; /** * The actual F-number(F-stop) of lens when the image was taken. */ public static final int TAG_FNUMBER = 0x829D; public static final int TAG_IPTC_NAA = 0x83BB; public static final int TAG_INTER_COLOR_PROFILE = 0x8773; /** * Exposure program that the camera used when image was taken. '1' means * manual control, '2' program normal, '3' aperture priority, '4' shutter * priority, '5' program creative (slow program), '6' program action * (high-speed program), '7' portrait mode, '8' landscape mode. */ public static final int TAG_EXPOSURE_PROGRAM = 0x8822; public static final int TAG_SPECTRAL_SENSITIVITY = 0x8824; public static final int TAG_ISO_EQUIVALENT = 0x8827; /** * Indicates the Opto-Electric Conversion Function (OECF) specified in ISO 14524. *
* OECF is the relationship between the camera optical input and the image values. *
* The values are: *
* The component count for this tag includes all of the bytes needed for the makernote.
*/
public static final int TAG_MAKERNOTE = 0x927C;
public static final int TAG_USER_COMMENT = 0x9286;
public static final int TAG_SUBSECOND_TIME = 0x9290;
public static final int TAG_SUBSECOND_TIME_ORIGINAL = 0x9291;
public static final int TAG_SUBSECOND_TIME_DIGITIZED = 0x9292;
/** The image title, as used by Windows XP. */
public static final int TAG_WIN_TITLE = 0x9C9B;
/** The image comment, as used by Windows XP. */
public static final int TAG_WIN_COMMENT = 0x9C9C;
/** The image author, as used by Windows XP (called Artist in the Windows shell). */
public static final int TAG_WIN_AUTHOR = 0x9C9D;
/** The image keywords, as used by Windows XP. */
public static final int TAG_WIN_KEYWORDS = 0x9C9E;
/** The image subject, as used by Windows XP. */
public static final int TAG_WIN_SUBJECT = 0x9C9F;
public static final int TAG_FLASHPIX_VERSION = 0xA000;
/**
* Defines Color Space. DCF image must use sRGB color space so value is
* always '1'. If the picture uses the other color space, value is
* '65535':Uncalibrated.
*/
public static final int TAG_COLOR_SPACE = 0xA001;
public static final int TAG_EXIF_IMAGE_WIDTH = 0xA002;
public static final int TAG_EXIF_IMAGE_HEIGHT = 0xA003;
public static final int TAG_RELATED_SOUND_FILE = 0xA004;
public static final int TAG_FLASH_ENERGY = 0xA20B;
public static final int TAG_SPATIAL_FREQ_RESPONSE = 0xA20C;
public static final int TAG_FOCAL_PLANE_X_RESOLUTION = 0xA20E;
public static final int TAG_FOCAL_PLANE_Y_RESOLUTION = 0xA20F;
/**
* Unit of FocalPlaneXResolution/FocalPlaneYResolution. '1' means no-unit,
* '2' inch, '3' centimeter.
*
* Note: Some of Fujifilm's digicam(e.g.FX2700,FX2900,Finepix4700Z/40i etc)
* uses value '3' so it must be 'centimeter', but it seems that they use a
* '8.3mm?'(1/3in.?) to their ResolutionUnit. Fuji's BUG? Finepix4900Z has
* been changed to use value '2' but it doesn't match to actual value also.
*/
public static final int TAG_FOCAL_PLANE_RESOLUTION_UNIT = 0xA210;
public static final int TAG_SUBJECT_LOCATION = 0xA214;
public static final int TAG_EXPOSURE_INDEX = 0xA215;
public static final int TAG_SENSING_METHOD = 0xA217;
public static final int TAG_FILE_SOURCE = 0xA300;
public static final int TAG_SCENE_TYPE = 0xA301;
public static final int TAG_CFA_PATTERN = 0xA302;
/**
* This tag indicates the use of special processing on image data, such as rendering
* geared to output. When special processing is performed, the reader is expected to
* disable or minimize any further processing.
* Tag = 41985 (A401.H)
* Type = SHORT
* Count = 1
* Default = 0
* 0 = Normal process
* 1 = Custom process
* Other = reserved
*/
public static final int TAG_CUSTOM_RENDERED = 0xA401;
/**
* This tag indicates the exposure mode set when the image was shot. In auto-bracketing
* mode, the camera shoots a series of frames of the same scene at different exposure settings.
* Tag = 41986 (A402.H)
* Type = SHORT
* Count = 1
* Default = none
* 0 = Auto exposure
* 1 = Manual exposure
* 2 = Auto bracket
* Other = reserved
*/
public static final int TAG_EXPOSURE_MODE = 0xA402;
/**
* This tag indicates the white balance mode set when the image was shot.
* Tag = 41987 (A403.H)
* Type = SHORT
* Count = 1
* Default = none
* 0 = Auto white balance
* 1 = Manual white balance
* Other = reserved
*/
public static final int TAG_WHITE_BALANCE_MODE = 0xA403;
/**
* This tag indicates the digital zoom ratio when the image was shot. If the
* numerator of the recorded value is 0, this indicates that digital zoom was
* not used.
* Tag = 41988 (A404.H)
* Type = RATIONAL
* Count = 1
* Default = none
*/
public static final int TAG_DIGITAL_ZOOM_RATIO = 0xA404;
/**
* This tag indicates the equivalent focal length assuming a 35mm film camera,
* in mm. A value of 0 means the focal length is unknown. Note that this tag
* differs from the FocalLength tag.
* Tag = 41989 (A405.H)
* Type = SHORT
* Count = 1
* Default = none
*/
public static final int TAG_35MM_FILM_EQUIV_FOCAL_LENGTH = 0xA405;
/**
* This tag indicates the type of scene that was shot. It can also be used to
* record the mode in which the image was shot. Note that this differs from
* the scene type (SceneType) tag.
* Tag = 41990 (A406.H)
* Type = SHORT
* Count = 1
* Default = 0
* 0 = Standard
* 1 = Landscape
* 2 = Portrait
* 3 = Night scene
* Other = reserved
*/
public static final int TAG_SCENE_CAPTURE_TYPE = 0xA406;
/**
* This tag indicates the degree of overall image gain adjustment.
* Tag = 41991 (A407.H)
* Type = SHORT
* Count = 1
* Default = none
* 0 = None
* 1 = Low gain up
* 2 = High gain up
* 3 = Low gain down
* 4 = High gain down
* Other = reserved
*/
public static final int TAG_GAIN_CONTROL = 0xA407;
/**
* This tag indicates the direction of contrast processing applied by the camera
* when the image was shot.
* Tag = 41992 (A408.H)
* Type = SHORT
* Count = 1
* Default = 0
* 0 = Normal
* 1 = Soft
* 2 = Hard
* Other = reserved
*/
public static final int TAG_CONTRAST = 0xA408;
/**
* This tag indicates the direction of saturation processing applied by the camera
* when the image was shot.
* Tag = 41993 (A409.H)
* Type = SHORT
* Count = 1
* Default = 0
* 0 = Normal
* 1 = Low saturation
* 2 = High saturation
* Other = reserved
*/
public static final int TAG_SATURATION = 0xA409;
/**
* This tag indicates the direction of sharpness processing applied by the camera
* when the image was shot.
* Tag = 41994 (A40A.H)
* Type = SHORT
* Count = 1
* Default = 0
* 0 = Normal
* 1 = Soft
* 2 = Hard
* Other = reserved
*/
public static final int TAG_SHARPNESS = 0xA40A;
/**
* This tag indicates information on the picture-taking conditions of a particular
* camera model. The tag is used only to indicate the picture-taking conditions in
* the reader.
* Tag = 41995 (A40B.H)
* Type = UNDEFINED
* Count = Any
* Default = none
*
* The information is recorded in the format shown below. The data is recorded
* in Unicode using SHORT type for the number of display rows and columns and
* UNDEFINED type for the camera settings. The Unicode (UCS-2) string including
* Signature is NULL terminated. The specifics of the Unicode string are as given
* in ISO/IEC 10464-1.
*
* Length Type Meaning
* ------+-----------+------------------
* 2 SHORT Display columns
* 2 SHORT Display rows
* Any UNDEFINED Camera setting-1
* Any UNDEFINED Camera setting-2
* : : :
* Any UNDEFINED Camera setting-n
*/
public static final int TAG_DEVICE_SETTING_DESCRIPTION = 0xA40B;
/**
* This tag indicates the distance to the subject.
* Tag = 41996 (A40C.H)
* Type = SHORT
* Count = 1
* Default = none
* 0 = unknown
* 1 = Macro
* 2 = Close view
* 3 = Distant view
* Other = reserved
*/
public static final int TAG_SUBJECT_DISTANCE_RANGE = 0xA40C;
/**
* This tag indicates an identifier assigned uniquely to each image. It is
* recorded as an ASCII string equivalent to hexadecimal notation and 128-bit
* fixed length.
* Tag = 42016 (A420.H)
* Type = ASCII
* Count = 33
* Default = none
*/
public static final int TAG_IMAGE_UNIQUE_ID = 0xA420;
/** String. */
public static final int TAG_CAMERA_OWNER_NAME = 0xA430;
/** String. */
public static final int TAG_BODY_SERIAL_NUMBER = 0xA431;
/** An array of four Rational64u numbers giving focal and aperture ranges. */
public static final int TAG_LENS_SPECIFICATION = 0xA432;
/** String. */
public static final int TAG_LENS_MAKE = 0xA433;
/** String. */
public static final int TAG_LENS_MODEL = 0xA434;
/** String. */
public static final int TAG_LENS_SERIAL_NUMBER = 0xA435;
/** Rational64u. */
public static final int TAG_GAMMA = 0xA500;
public static final int TAG_PRINT_IM = 0xC4A5;
public static final int TAG_PANASONIC_TITLE = 0xC6D2;
public static final int TAG_PANASONIC_TITLE_2 = 0xC6D3;
public static final int TAG_PADDING = 0xEA1C;
public static final int TAG_LENS = 0xFDEA;
protected static void addExifTagNames(HashMap