1969 lines
48 KiB
PHP
1969 lines
48 KiB
PHP
<?php
|
|
|
|
/* PEL: PHP Exif Library. A library with support for reading and
|
|
* writing all Exif headers in JPEG and TIFF images using PHP.
|
|
*
|
|
* Copyright (C) 2004, 2005, 2006 Martin Geisler.
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2 of the License, or
|
|
* (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program in the file COPYING; if not, write to the
|
|
* Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
|
|
* Boston, MA 02110-1301 USA
|
|
*/
|
|
|
|
/* $Id: PelTag.php 472 2006-11-19 20:29:14Z mgeisler $ */
|
|
|
|
|
|
/**
|
|
* Namespace for functions operating on Exif tags.
|
|
*
|
|
* @author Martin Geisler <mgeisler@users.sourceforge.net>
|
|
* @version $Revision: 472 $
|
|
* @date $Date: 2006-11-19 21:29:14 +0100 (Sun, 19 Nov 2006) $
|
|
* @license http://www.gnu.org/licenses/gpl.html GNU General Public
|
|
* License (GPL)
|
|
* @package PEL
|
|
*/
|
|
|
|
/**#@+ Required class definitions. */
|
|
require_once('Pel.php');
|
|
require_once('PelIfd.php');
|
|
/**#@-*/
|
|
|
|
|
|
/**
|
|
* Class with static methods for Exif tags.
|
|
*
|
|
* This class defines the constants that represents the Exif tags
|
|
* known to PEL. They are supposed to be used whenever one needs to
|
|
* specify an Exif tag, and they will be denoted by the pseudo-type
|
|
* {@link PelTag} throughout the documentation.
|
|
*
|
|
* Please note that the constrains on the format and number of
|
|
* components given here are advisory only. To follow the Exif
|
|
* specification one should obey them, but there is nothing that
|
|
* prevents you from creating an {@link IMAGE_LENGTH} entry with two
|
|
* or more components, even though the standard says that there should
|
|
* be exactly one component.
|
|
*
|
|
* All the methods in this class are static and should be called with
|
|
* the Exif tag on which they should operate.
|
|
*
|
|
* @author Martin Geisler <mgeisler@users.sourceforge.net>
|
|
* @package PEL
|
|
*/
|
|
class PelTag {
|
|
|
|
/**
|
|
* Interoperability index.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const INTEROPERABILITY_INDEX = 0x0001;
|
|
|
|
/**
|
|
* Interoperability version.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const INTEROPERABILITY_VERSION = 0x0002;
|
|
|
|
/**
|
|
* Image width.
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const IMAGE_WIDTH = 0x0100;
|
|
|
|
/**
|
|
* Image length.
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const IMAGE_LENGTH = 0x0101;
|
|
|
|
/**
|
|
* Number of bits per component.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const BITS_PER_SAMPLE = 0x0102;
|
|
|
|
/**
|
|
* Compression scheme.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const COMPRESSION = 0x0103;
|
|
|
|
/**
|
|
* Pixel composition.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const PHOTOMETRIC_INTERPRETATION = 0x0106;
|
|
|
|
/**
|
|
* Fill Orde
|
|
*
|
|
* Format: Unknown.
|
|
*
|
|
* Components: Unknown.
|
|
*/
|
|
const FILL_ORDER = 0x010A;
|
|
|
|
/**
|
|
* Document Name
|
|
*
|
|
* Format: Unknown.
|
|
*
|
|
* Components: Unknown.
|
|
*/
|
|
const DOCUMENT_NAME = 0x010D;
|
|
|
|
/**
|
|
* Image Description
|
|
*
|
|
* Format: {@link PelEntryAscii}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const IMAGE_DESCRIPTION = 0x010E;
|
|
|
|
/**
|
|
* Manufacturer
|
|
*
|
|
* Format: {@link PelEntryAscii}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const MAKE = 0x010F;
|
|
|
|
/**
|
|
* Model
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const MODEL = 0x0110;
|
|
|
|
/**
|
|
* Strip Offsets
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const STRIP_OFFSETS = 0x0111;
|
|
|
|
/**
|
|
* Orientation of image.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const ORIENTATION = 0x0112;
|
|
|
|
/**
|
|
* Number of components.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SAMPLES_PER_PIXEL = 0x0115;
|
|
|
|
/**
|
|
* Rows per Strip
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const ROWS_PER_STRIP = 0x0116;
|
|
|
|
/**
|
|
* Strip Byte Count
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const STRIP_BYTE_COUNTS = 0x0117;
|
|
|
|
/**
|
|
* Image resolution in width direction.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const X_RESOLUTION = 0x011A;
|
|
|
|
/**
|
|
* Image resolution in height direction.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const Y_RESOLUTION = 0x011B;
|
|
|
|
/**
|
|
* Image data arrangement.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const PLANAR_CONFIGURATION = 0x011C;
|
|
|
|
/**
|
|
* Unit of X and Y resolution.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const RESOLUTION_UNIT = 0x0128;
|
|
|
|
/**
|
|
* Transfer function.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const TRANSFER_FUNCTION = 0x012D;
|
|
|
|
/**
|
|
* Software used.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const SOFTWARE = 0x0131;
|
|
|
|
/**
|
|
* File change date and time.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}, modelled by the {@link
|
|
* PelEntryTime} class.
|
|
*
|
|
* Components: 20.
|
|
*/
|
|
const DATE_TIME = 0x0132;
|
|
|
|
/**
|
|
* Person who created the image.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const ARTIST = 0x013B;
|
|
|
|
/**
|
|
* White point chromaticity.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const WHITE_POINT = 0x013E;
|
|
|
|
/**
|
|
* Chromaticities of primaries.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 6.
|
|
*/
|
|
const PRIMARY_CHROMATICITIES = 0x013F;
|
|
|
|
/**
|
|
* Transfer Range
|
|
*
|
|
* Format: Unknown.
|
|
*
|
|
* Components: Unknown.
|
|
*/
|
|
const TRANSFER_RANGE = 0x0156;
|
|
|
|
/**
|
|
* JPEGProc
|
|
*
|
|
* Format: Unknown.
|
|
*
|
|
* Components: Unknown.
|
|
*/
|
|
const JPEG_PROC = 0x0200;
|
|
|
|
/**
|
|
* Offset to JPEG SOI.
|
|
*
|
|
* Format: {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const JPEG_INTERCHANGE_FORMAT = 0x0201;
|
|
|
|
/**
|
|
* Bytes of JPEG data.
|
|
*
|
|
* Format: {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const JPEG_INTERCHANGE_FORMAT_LENGTH = 0x0202;
|
|
|
|
/**
|
|
* Color space transformation matrix coefficients.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const YCBCR_COEFFICIENTS = 0x0211;
|
|
|
|
/**
|
|
* Subsampling ratio of Y to C.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const YCBCR_SUB_SAMPLING = 0x0212;
|
|
|
|
/**
|
|
* Y and C positioning.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const YCBCR_POSITIONING = 0x0213;
|
|
|
|
/**
|
|
* Pair of black and white reference values.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 6.
|
|
*/
|
|
const REFERENCE_BLACK_WHITE = 0x0214;
|
|
|
|
/**
|
|
* Related Image File Format
|
|
*
|
|
* Format: Unknown.
|
|
*
|
|
* Components: Unknown.
|
|
*/
|
|
const RELATED_IMAGE_FILE_FORMAT = 0x1000;
|
|
|
|
/**
|
|
* Related Image Width
|
|
*
|
|
* Format: Unknown, probably {@link PelFormat::SHORT}?
|
|
*
|
|
* Components: Unknown, probably 1.
|
|
*/
|
|
const RELATED_IMAGE_WIDTH = 0x1001;
|
|
|
|
/** Related Image Length
|
|
*
|
|
* Format: Unknown, probably {@link PelFormat::SHORT}?
|
|
*
|
|
* Components: Unknown, probably 1.
|
|
*/
|
|
const RELATED_IMAGE_LENGTH = 0x1002;
|
|
|
|
/**
|
|
* CFA Repeat Pattern Dim.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const CFA_REPEAT_PATTERN_DIM = 0x828D;
|
|
|
|
/**
|
|
* Battery level.
|
|
*
|
|
* Format: Unknown.
|
|
*
|
|
* Components: Unknown.
|
|
*/
|
|
const BATTERY_LEVEL = 0x828F;
|
|
|
|
/**
|
|
* Copyright holder.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}, modelled by the {@link
|
|
* PelEntryCopyright} class.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const COPYRIGHT = 0x8298;
|
|
|
|
/**
|
|
* Exposure Time
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const EXPOSURE_TIME = 0x829A;
|
|
|
|
/**
|
|
* FNumber
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FNUMBER = 0x829D;
|
|
|
|
/**
|
|
* IPTC/NAA
|
|
*
|
|
* Format: {@link PelFormat::LONG}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const IPTC_NAA = 0x83BB;
|
|
|
|
/**
|
|
* Exif IFD Pointer
|
|
*
|
|
* Format: {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const EXIF_IFD_POINTER = 0x8769;
|
|
|
|
/**
|
|
* Inter Color Profile
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const INTER_COLOR_PROFILE = 0x8773;
|
|
|
|
/**
|
|
* Exposure Program
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const EXPOSURE_PROGRAM = 0x8822;
|
|
|
|
/**
|
|
* Spectral Sensitivity
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const SPECTRAL_SENSITIVITY = 0x8824;
|
|
|
|
/**
|
|
* GPS Info IFD Pointer
|
|
*
|
|
* Format: {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_INFO_IFD_POINTER = 0x8825;
|
|
|
|
/**
|
|
* ISO Speed Ratings
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const ISO_SPEED_RATINGS = 0x8827;
|
|
|
|
/**
|
|
* OECF
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const OECF = 0x8828;
|
|
|
|
/**
|
|
* Exif version.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}, modelled by the {@link
|
|
* PelEntryVersion} class.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const EXIF_VERSION = 0x9000;
|
|
|
|
/**
|
|
* Date and time of original data generation.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}, modelled by the {@link
|
|
* PelEntryTime} class.
|
|
*
|
|
* Components: 20.
|
|
*/
|
|
const DATE_TIME_ORIGINAL = 0x9003;
|
|
|
|
/**
|
|
* Date and time of digital data generation.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}, modelled by the {@link
|
|
* PelEntryTime} class.
|
|
*
|
|
* Components: 20.
|
|
*/
|
|
const DATE_TIME_DIGITIZED = 0x9004;
|
|
|
|
/**
|
|
* Meaning of each component.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const COMPONENTS_CONFIGURATION = 0x9101;
|
|
|
|
/**
|
|
* Image compression mode.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const COMPRESSED_BITS_PER_PIXEL = 0x9102;
|
|
|
|
/**
|
|
* Shutter speed
|
|
*
|
|
* Format: {@link PelFormat::SRATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SHUTTER_SPEED_VALUE = 0x9201;
|
|
|
|
/**
|
|
* Aperture
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const APERTURE_VALUE = 0x9202;
|
|
|
|
/**
|
|
* Brightness
|
|
*
|
|
* Format: {@link PelFormat::SRATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const BRIGHTNESS_VALUE = 0x9203;
|
|
|
|
/**
|
|
* Exposure Bias
|
|
*
|
|
* Format: {@link PelFormat::SRATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const EXPOSURE_BIAS_VALUE = 0x9204;
|
|
|
|
/**
|
|
* Max Aperture Value
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const MAX_APERTURE_VALUE = 0x9205;
|
|
|
|
/**
|
|
* Subject Distance
|
|
*
|
|
* Format: {@link PelFormat::SRATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SUBJECT_DISTANCE = 0x9206;
|
|
|
|
/**
|
|
* Metering Mode
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const METERING_MODE = 0x9207;
|
|
|
|
/**
|
|
* Light Source
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const LIGHT_SOURCE = 0x9208;
|
|
|
|
/**
|
|
* Flash
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FLASH = 0x9209;
|
|
|
|
/**
|
|
* Focal Length
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FOCAL_LENGTH = 0x920A;
|
|
|
|
/**
|
|
* Subject Area
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const SUBJECT_AREA = 0x9214;
|
|
|
|
/**
|
|
* Maker Note
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const MAKER_NOTE = 0x927C;
|
|
|
|
/**
|
|
* User Comment
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}, modelled by the {@link
|
|
* PelEntryUserComment} class.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const USER_COMMENT = 0x9286;
|
|
|
|
/**
|
|
* SubSec Time
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const SUB_SEC_TIME = 0x9290;
|
|
|
|
/**
|
|
* SubSec Time Original
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const SUB_SEC_TIME_ORIGINAL = 0x9291;
|
|
|
|
/**
|
|
* SubSec Time Digitized
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const SUB_SEC_TIME_DIGITIZED = 0x9292;
|
|
|
|
/**
|
|
* Windows XP Title
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const XP_TITLE = 0x9C9B;
|
|
|
|
|
|
/**
|
|
* Windows XP Comment
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const XP_COMMENT = 0x9C9C;
|
|
|
|
|
|
/**
|
|
* Windows XP Author
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const XP_AUTHOR = 0x9C9D;
|
|
|
|
|
|
/**
|
|
* Windows XP Keywords
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const XP_KEYWORDS = 0x9C9E;
|
|
|
|
|
|
/**
|
|
* Windows XP Subject
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const XP_SUBJECT = 0x9C9F;
|
|
|
|
|
|
/**
|
|
* Supported Flashpix version
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}, modelled by the {@link
|
|
* PelEntryVersion} class.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const FLASH_PIX_VERSION = 0xA000;
|
|
|
|
/**
|
|
* Color space information.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const COLOR_SPACE = 0xA001;
|
|
|
|
/**
|
|
* Valid image width.
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const PIXEL_X_DIMENSION = 0xA002;
|
|
|
|
/**
|
|
* Valid image height.
|
|
*
|
|
* Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const PIXEL_Y_DIMENSION = 0xA003;
|
|
|
|
/**
|
|
* Related audio file.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const RELATED_SOUND_FILE = 0xA004;
|
|
|
|
/**
|
|
* Interoperability IFD Pointer
|
|
*
|
|
* Format: {@link PelFormat::LONG}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const INTEROPERABILITY_IFD_POINTER = 0xA005;
|
|
|
|
/**
|
|
* Flash energy.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FLASH_ENERGY = 0xA20B;
|
|
|
|
/**
|
|
* Spatial frequency response.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const SPATIAL_FREQUENCY_RESPONSE = 0xA20C;
|
|
|
|
/**
|
|
* Focal plane X resolution.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FOCAL_PLANE_X_RESOLUTION = 0xA20E;
|
|
|
|
/**
|
|
* Focal plane Y resolution.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FOCAL_PLANE_Y_RESOLUTION = 0xA20F;
|
|
|
|
/**
|
|
* Focal plane resolution unit.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FOCAL_PLANE_RESOLUTION_UNIT = 0xA210;
|
|
|
|
/**
|
|
* Subject location.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SUBJECT_LOCATION = 0xA214;
|
|
|
|
/**
|
|
* Exposure index.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const EXPOSURE_INDEX = 0xA215;
|
|
|
|
/**
|
|
* Sensing method.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SENSING_METHOD = 0xA217;
|
|
|
|
/**
|
|
* File source.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FILE_SOURCE = 0xA300;
|
|
|
|
/**
|
|
* Scene type.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SCENE_TYPE = 0xA301;
|
|
|
|
/**
|
|
* CFA pattern.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: any number.
|
|
*/
|
|
const CFA_PATTERN = 0xA302;
|
|
|
|
/**
|
|
* Custom image processing.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const CUSTOM_RENDERED = 0xA401;
|
|
|
|
/**
|
|
* Exposure mode.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const EXPOSURE_MODE = 0xA402;
|
|
|
|
/**
|
|
* White balance.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const WHITE_BALANCE = 0xA403;
|
|
|
|
/**
|
|
* Digital zoom ratio.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const DIGITAL_ZOOM_RATIO = 0xA404;
|
|
|
|
/**
|
|
* Focal length in 35mm film.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const FOCAL_LENGTH_IN_35MM_FILM = 0xA405;
|
|
|
|
/**
|
|
* Scene capture type.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SCENE_CAPTURE_TYPE = 0xA406;
|
|
|
|
/**
|
|
* Gain control.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GAIN_CONTROL = 0xA407;
|
|
|
|
/**
|
|
* Contrast.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const CONTRAST = 0xA408;
|
|
|
|
/**
|
|
* Saturation.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SATURATION = 0xA409;
|
|
|
|
/**
|
|
* Sharpness.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SHARPNESS = 0xA40A;
|
|
|
|
/**
|
|
* Device settings description.
|
|
*
|
|
* 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.
|
|
*/
|
|
const DEVICE_SETTING_DESCRIPTION = 0xA40B;
|
|
|
|
/**
|
|
* Subject distance range.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const SUBJECT_DISTANCE_RANGE = 0xA40C;
|
|
|
|
/**
|
|
* Image unique ID.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 32.
|
|
*/
|
|
const IMAGE_UNIQUE_ID = 0xA420;
|
|
|
|
/**
|
|
* Gamma.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GAMMA = 0xA500;
|
|
|
|
/**
|
|
* PrintIM
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: unknown.
|
|
*/
|
|
const PRINT_IM = 0xC4A5;
|
|
|
|
/**
|
|
* GPS tag version.
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: 4.
|
|
*/
|
|
const GPS_VERSION_ID = 0x0000;
|
|
|
|
/**
|
|
* North or South Latitude.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_LATITUDE_REF = 0x0001;
|
|
|
|
/**
|
|
* Latitude.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const GPS_LATITUDE = 0x0002;
|
|
|
|
/**
|
|
* East or West Longitude.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_LONGITUDE_REF = 0x0003;
|
|
|
|
/**
|
|
* Longitude.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const GPS_LONGITUDE = 0x0004;
|
|
|
|
/**
|
|
* Altitude reference.
|
|
*
|
|
* Format: {@link PelFormat::BYTE}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_ALTITUDE_REF = 0x0005;
|
|
|
|
/**
|
|
* Altitude.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_ALTITUDE = 0x0006;
|
|
|
|
/**
|
|
* GPS time (atomic clock).
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const GPS_TIME_STAMP = 0x0007;
|
|
|
|
/**
|
|
* GPS satellites used for measurement.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: Any.
|
|
*/
|
|
const GPS_SATELLITES = 0x0008;
|
|
|
|
/**
|
|
* GPS receiver status.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_STATUS = 0x0009;
|
|
|
|
/**
|
|
* GPS measurement mode.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_MEASURE_MODE = 0x000A;
|
|
|
|
/**
|
|
* Measurement precision.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_DOP = 0x000B;
|
|
|
|
/**
|
|
* Speed unit.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_SPEED_REF = 0x000C;
|
|
|
|
/**
|
|
* Speed of GPS receiver.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_SPEED = 0x000D;
|
|
|
|
/**
|
|
* Reference for direction of movement.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_TRACK_REF = 0x000E;
|
|
|
|
/**
|
|
* Direction of movement.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_TRACK = 0x000F;
|
|
|
|
/**
|
|
* Reference for direction of image.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_IMG_DIRECTION_REF = 0x0010;
|
|
|
|
/**
|
|
* Direction of image.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_IMG_DIRECTION = 0x0011;
|
|
|
|
/**
|
|
* Geodetic survey data used.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: Any.
|
|
*/
|
|
const GPS_MAP_DATUM = 0x0012;
|
|
|
|
/**
|
|
* Reference for latitude of destination.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_DEST_LATITUDE_REF = 0x0013;
|
|
|
|
/**
|
|
* Latitude of destination.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const GPS_DEST_LATITUDE = 0x0014;
|
|
|
|
/**
|
|
* Reference for longitude of destination.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_DEST_LONGITUDE_REF = 0x0015;
|
|
|
|
/**
|
|
* Longitude of destination.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 3.
|
|
*/
|
|
const GPS_DEST_LONGITUDE = 0x0016;
|
|
|
|
/**
|
|
* Reference for bearing of destination.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_DEST_BEARING_REF = 0x0017;
|
|
|
|
/**
|
|
* Bearing of destination.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_DEST_BEARING = 0x0018;
|
|
|
|
/**
|
|
* Reference for distance to destination.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 2.
|
|
*/
|
|
const GPS_DEST_DISTANCE_REF = 0x0019;
|
|
|
|
/**
|
|
* Distance to destination.
|
|
*
|
|
* Format: {@link PelFormat::RATIONAL}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_DEST_DISTANCE = 0x001A;
|
|
|
|
/**
|
|
* Name of GPS processing method.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: Any.
|
|
*/
|
|
const GPS_PROCESSING_METHOD = 0x001B;
|
|
|
|
/**
|
|
* Name of GPS area.
|
|
*
|
|
* Format: {@link PelFormat::UNDEFINED}.
|
|
*
|
|
* Components: Any.
|
|
*/
|
|
const GPS_AREA_INFORMATION = 0x001C;
|
|
|
|
/**
|
|
* GPS date.
|
|
*
|
|
* Format: {@link PelFormat::ASCII}.
|
|
*
|
|
* Components: 11.
|
|
*/
|
|
const GPS_DATE_STAMP = 0x001D;
|
|
|
|
/**
|
|
* GPS differential correction.
|
|
*
|
|
* Format: {@link PelFormat::SHORT}.
|
|
*
|
|
* Components: 1.
|
|
*/
|
|
const GPS_DIFFERENTIAL = 0x001E;
|
|
|
|
|
|
/**
|
|
* Returns a short name for an Exif tag.
|
|
*
|
|
* @param int the IFD type of the tag, one of {@link PelIfd::IFD0},
|
|
* {@link PelIfd::IFD1}, {@link PelIfd::EXIF}, {@link PelIfd::GPS},
|
|
* or {@link PelIfd::INTEROPERABILITY}.
|
|
*
|
|
* @param PelTag the tag.
|
|
*
|
|
* @return string the short name of the tag, e.g., 'ImageWidth' for
|
|
* the {@link IMAGE_WIDTH} tag. If the tag is not known, the string
|
|
* 'Unknown:0xTTTT' will be returned where 'TTTT' is the hexadecimal
|
|
* representation of the tag.
|
|
*/
|
|
static function getName($type, $tag) {
|
|
|
|
switch ($type) {
|
|
case PelIfd::IFD0:
|
|
case PelIfd::IFD1:
|
|
case PelIfd::EXIF:
|
|
case PelIfd::INTEROPERABILITY:
|
|
|
|
switch ($tag) {
|
|
case self::INTEROPERABILITY_INDEX:
|
|
return 'InteroperabilityIndex';
|
|
case self::INTEROPERABILITY_VERSION:
|
|
return 'InteroperabilityVersion';
|
|
case self::IMAGE_WIDTH:
|
|
return 'ImageWidth';
|
|
case self::IMAGE_LENGTH:
|
|
return 'ImageLength';
|
|
case self::BITS_PER_SAMPLE:
|
|
return 'BitsPerSample';
|
|
case self::COMPRESSION:
|
|
return 'Compression';
|
|
case self::PHOTOMETRIC_INTERPRETATION:
|
|
return 'PhotometricInterpretation';
|
|
case self::FILL_ORDER:
|
|
return 'FillOrder';
|
|
case self::DOCUMENT_NAME:
|
|
return 'DocumentName';
|
|
case self::IMAGE_DESCRIPTION:
|
|
return 'ImageDescription';
|
|
case self::MAKE:
|
|
return 'Make';
|
|
case self::MODEL:
|
|
return 'Model';
|
|
case self::STRIP_OFFSETS:
|
|
return 'StripOffsets';
|
|
case self::ORIENTATION:
|
|
return 'Orientation';
|
|
case self::SAMPLES_PER_PIXEL:
|
|
return 'SamplesPerPixel';
|
|
case self::ROWS_PER_STRIP:
|
|
return 'RowsPerStrip';
|
|
case self::STRIP_BYTE_COUNTS:
|
|
return 'StripByteCounts';
|
|
case self::X_RESOLUTION:
|
|
return 'XResolution';
|
|
case self::Y_RESOLUTION:
|
|
return 'YResolution';
|
|
case self::PLANAR_CONFIGURATION:
|
|
return 'PlanarConfiguration';
|
|
case self::RESOLUTION_UNIT:
|
|
return 'ResolutionUnit';
|
|
case self::TRANSFER_FUNCTION:
|
|
return 'TransferFunction';
|
|
case self::SOFTWARE:
|
|
return 'Software';
|
|
case self::DATE_TIME:
|
|
return 'DateTime';
|
|
case self::ARTIST:
|
|
return 'Artist';
|
|
case self::WHITE_POINT:
|
|
return 'WhitePoint';
|
|
case self::PRIMARY_CHROMATICITIES:
|
|
return 'PrimaryChromaticities';
|
|
case self::TRANSFER_RANGE:
|
|
return 'TransferRange';
|
|
case self::JPEG_PROC:
|
|
return 'JPEGProc';
|
|
case self::JPEG_INTERCHANGE_FORMAT:
|
|
return 'JPEGInterchangeFormat';
|
|
case self::JPEG_INTERCHANGE_FORMAT_LENGTH:
|
|
return 'JPEGInterchangeFormatLength';
|
|
case self::YCBCR_COEFFICIENTS:
|
|
return 'YCbCrCoefficients';
|
|
case self::YCBCR_SUB_SAMPLING:
|
|
return 'YCbCrSubSampling';
|
|
case self::YCBCR_POSITIONING:
|
|
return 'YCbCrPositioning';
|
|
case self::REFERENCE_BLACK_WHITE:
|
|
return 'ReferenceBlackWhite';
|
|
case self::RELATED_IMAGE_FILE_FORMAT:
|
|
return 'RelatedImageFileFormat';
|
|
case self::RELATED_IMAGE_WIDTH:
|
|
return 'RelatedImageWidth';
|
|
case self::RELATED_IMAGE_LENGTH:
|
|
return 'RelatedImageLength';
|
|
case self::CFA_REPEAT_PATTERN_DIM:
|
|
return 'CFARepeatPatternDim';
|
|
case self::CFA_PATTERN:
|
|
return 'CFAPattern';
|
|
case self::BATTERY_LEVEL:
|
|
return 'BatteryLevel';
|
|
case self::COPYRIGHT:
|
|
return 'Copyright';
|
|
case self::EXPOSURE_TIME:
|
|
return 'ExposureTime';
|
|
case self::FNUMBER:
|
|
return 'FNumber';
|
|
case self::IPTC_NAA:
|
|
return 'IPTC/NAA';
|
|
case self::EXIF_IFD_POINTER:
|
|
return 'ExifIFDPointer';
|
|
case self::INTER_COLOR_PROFILE:
|
|
return 'InterColorProfile';
|
|
case self::EXPOSURE_PROGRAM:
|
|
return 'ExposureProgram';
|
|
case self::SPECTRAL_SENSITIVITY:
|
|
return 'SpectralSensitivity';
|
|
case self::GPS_INFO_IFD_POINTER:
|
|
return 'GPSInfoIFDPointer';
|
|
case self::ISO_SPEED_RATINGS:
|
|
return 'ISOSpeedRatings';
|
|
case self::OECF:
|
|
return 'OECF';
|
|
case self::EXIF_VERSION:
|
|
return 'ExifVersion';
|
|
case self::DATE_TIME_ORIGINAL:
|
|
return 'DateTimeOriginal';
|
|
case self::DATE_TIME_DIGITIZED:
|
|
return 'DateTimeDigitized';
|
|
case self::COMPONENTS_CONFIGURATION:
|
|
return 'ComponentsConfiguration';
|
|
case self::COMPRESSED_BITS_PER_PIXEL:
|
|
return 'CompressedBitsPerPixel';
|
|
case self::SHUTTER_SPEED_VALUE:
|
|
return 'ShutterSpeedValue';
|
|
case self::APERTURE_VALUE:
|
|
return 'ApertureValue';
|
|
case self::BRIGHTNESS_VALUE:
|
|
return 'BrightnessValue';
|
|
case self::EXPOSURE_BIAS_VALUE:
|
|
return 'ExposureBiasValue';
|
|
case self::MAX_APERTURE_VALUE:
|
|
return 'MaxApertureValue';
|
|
case self::SUBJECT_DISTANCE:
|
|
return 'SubjectDistance';
|
|
case self::METERING_MODE:
|
|
return 'MeteringMode';
|
|
case self::LIGHT_SOURCE:
|
|
return 'LightSource';
|
|
case self::FLASH:
|
|
return 'Flash';
|
|
case self::FOCAL_LENGTH:
|
|
return 'FocalLength';
|
|
case self::MAKER_NOTE:
|
|
return 'MakerNote';
|
|
case self::USER_COMMENT:
|
|
return 'UserComment';
|
|
case self::SUB_SEC_TIME:
|
|
return 'SubSecTime';
|
|
case self::SUB_SEC_TIME_ORIGINAL:
|
|
return 'SubSecTimeOriginal';
|
|
case self::SUB_SEC_TIME_DIGITIZED:
|
|
return 'SubSecTimeDigitized';
|
|
case self::XP_TITLE:
|
|
return 'WindowsXPTitle';
|
|
case self::XP_COMMENT:
|
|
return 'WindowsXPComment';
|
|
case self::XP_AUTHOR:
|
|
return 'WindowsXPAuthor';
|
|
case self::XP_KEYWORDS:
|
|
return 'WindowsXPKeywords';
|
|
case self::XP_SUBJECT:
|
|
return 'WindowsXPSubject';
|
|
case self::FLASH_PIX_VERSION:
|
|
return 'FlashPixVersion';
|
|
case self::COLOR_SPACE:
|
|
return 'ColorSpace';
|
|
case self::PIXEL_X_DIMENSION:
|
|
return 'PixelXDimension';
|
|
case self::PIXEL_Y_DIMENSION:
|
|
return 'PixelYDimension';
|
|
case self::RELATED_SOUND_FILE:
|
|
return 'RelatedSoundFile';
|
|
case self::INTEROPERABILITY_IFD_POINTER:
|
|
return 'InteroperabilityIFDPointer';
|
|
case self::FLASH_ENERGY:
|
|
return 'FlashEnergy';
|
|
case self::SPATIAL_FREQUENCY_RESPONSE:
|
|
return 'SpatialFrequencyResponse';
|
|
case self::FOCAL_PLANE_X_RESOLUTION:
|
|
return 'FocalPlaneXResolution';
|
|
case self::FOCAL_PLANE_Y_RESOLUTION:
|
|
return 'FocalPlaneYResolution';
|
|
case self::FOCAL_PLANE_RESOLUTION_UNIT:
|
|
return 'FocalPlaneResolutionUnit';
|
|
case self::SUBJECT_LOCATION:
|
|
return 'SubjectLocation';
|
|
case self::EXPOSURE_INDEX:
|
|
return 'ExposureIndex';
|
|
case self::SENSING_METHOD:
|
|
return 'SensingMethod';
|
|
case self::FILE_SOURCE:
|
|
return 'FileSource';
|
|
case self::SCENE_TYPE:
|
|
return 'SceneType';
|
|
case self::SUBJECT_AREA:
|
|
return 'SubjectArea';
|
|
case self::CUSTOM_RENDERED:
|
|
return 'CustomRendered';
|
|
case self::EXPOSURE_MODE:
|
|
return 'ExposureMode';
|
|
case self::WHITE_BALANCE:
|
|
return 'WhiteBalance';
|
|
case self::DIGITAL_ZOOM_RATIO:
|
|
return 'DigitalZoomRatio';
|
|
case self::FOCAL_LENGTH_IN_35MM_FILM:
|
|
return 'FocalLengthIn35mmFilm';
|
|
case self::SCENE_CAPTURE_TYPE:
|
|
return 'SceneCaptureType';
|
|
case self::GAIN_CONTROL:
|
|
return 'GainControl';
|
|
case self::CONTRAST:
|
|
return 'Contrast';
|
|
case self::SATURATION:
|
|
return 'Saturation';
|
|
case self::SHARPNESS:
|
|
return 'Sharpness';
|
|
case self::DEVICE_SETTING_DESCRIPTION:
|
|
return 'DeviceSettingDescription';
|
|
case self::SUBJECT_DISTANCE_RANGE:
|
|
return 'SubjectDistanceRange';
|
|
case self::IMAGE_UNIQUE_ID:
|
|
return 'ImageUniqueID';
|
|
case self::GAMMA:
|
|
return 'Gamma';
|
|
case self::PRINT_IM:
|
|
return 'PrintIM';
|
|
}
|
|
|
|
case PelIfd::GPS:
|
|
switch ($tag) {
|
|
case self::GPS_VERSION_ID:
|
|
return 'GPSVersionID';
|
|
case self::GPS_LATITUDE_REF:
|
|
return 'GPSLatitudeRef';
|
|
case self::GPS_LATITUDE:
|
|
return 'GPSLatitude';
|
|
case self::GPS_LONGITUDE_REF:
|
|
return 'GPSLongitudeRef';
|
|
case self::GPS_LONGITUDE:
|
|
return 'GPSLongitude';
|
|
case self::GPS_ALTITUDE_REF:
|
|
return 'GPSAltitudeRef';
|
|
case self::GPS_ALTITUDE:
|
|
return 'GPSAltitude';
|
|
case self::GPS_TIME_STAMP:
|
|
return 'GPSTimeStamp';
|
|
case self::GPS_SATELLITES:
|
|
return 'GPSSatellites';
|
|
case self::GPS_STATUS:
|
|
return 'GPSStatus';
|
|
case self::GPS_MEASURE_MODE:
|
|
return 'GPSMeasureMode';
|
|
case self::GPS_DOP:
|
|
return 'GPSDOP';
|
|
case self::GPS_SPEED_REF:
|
|
return 'GPSSpeedRef';
|
|
case self::GPS_SPEED:
|
|
return 'GPSSpeed';
|
|
case self::GPS_TRACK_REF:
|
|
return 'GPSTrackRef';
|
|
case self::GPS_TRACK:
|
|
return 'GPSTrack';
|
|
case self::GPS_IMG_DIRECTION_REF:
|
|
return 'GPSImgDirectionRef';
|
|
case self::GPS_IMG_DIRECTION:
|
|
return 'GPSImgDirection';
|
|
case self::GPS_MAP_DATUM:
|
|
return 'GPSMapDatum';
|
|
case self::GPS_DEST_LATITUDE_REF:
|
|
return 'GPSDestLatitudeRef';
|
|
case self::GPS_DEST_LATITUDE:
|
|
return 'GPSDestLatitude';
|
|
case self::GPS_DEST_LONGITUDE_REF:
|
|
return 'GPSDestLongitudeRef';
|
|
case self::GPS_DEST_LONGITUDE:
|
|
return 'GPSDestLongitude';
|
|
case self::GPS_DEST_BEARING_REF:
|
|
return 'GPSDestBearingRef';
|
|
case self::GPS_DEST_BEARING:
|
|
return 'GPSDestBearing';
|
|
case self::GPS_DEST_DISTANCE_REF:
|
|
return 'GPSDestDistanceRef';
|
|
case self::GPS_DEST_DISTANCE:
|
|
return 'GPSDestDistance';
|
|
case self::GPS_PROCESSING_METHOD:
|
|
return 'GPSProcessingMethod';
|
|
case self::GPS_AREA_INFORMATION:
|
|
return 'GPSAreaInformation';
|
|
case self::GPS_DATE_STAMP:
|
|
return 'GPSDateStamp';
|
|
case self::GPS_DIFFERENTIAL:
|
|
return 'GPSDifferential';
|
|
}
|
|
|
|
default:
|
|
return Pel::fmt('Unknown: 0x%04X', $tag);
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* Returns a title for an Exif tag.
|
|
*
|
|
* @param int the IFD type of the tag, one of {@link PelIfd::IFD0},
|
|
* {@link PelIfd::IFD1}, {@link PelIfd::EXIF}, {@link PelIfd::GPS},
|
|
* or {@link PelIfd::INTEROPERABILITY}.
|
|
*
|
|
* @param PelTag the tag.
|
|
*
|
|
* @return string the title of the tag, e.g., 'Image Width' for the
|
|
* {@link IMAGE_WIDTH} tag. If the tag isn't known, the string
|
|
* 'Unknown Tag: 0xTT' will be returned where 'TT' is the
|
|
* hexadecimal representation of the tag.
|
|
*/
|
|
function getTitle($type, $tag) {
|
|
|
|
switch ($type) {
|
|
case PelIfd::IFD0:
|
|
case PelIfd::IFD1:
|
|
case PelIfd::EXIF:
|
|
case PelIfd::INTEROPERABILITY:
|
|
|
|
switch ($tag) {
|
|
case self::INTEROPERABILITY_INDEX:
|
|
return Pel::tra('Interoperability Index');
|
|
case self::INTEROPERABILITY_VERSION:
|
|
return Pel::tra('Interoperability Version');
|
|
case self::IMAGE_WIDTH:
|
|
return Pel::tra('Image Width');
|
|
case self::IMAGE_LENGTH:
|
|
return Pel::tra('Image Length');
|
|
case self::BITS_PER_SAMPLE:
|
|
return Pel::tra('Bits per Sample');
|
|
case self::COMPRESSION:
|
|
return Pel::tra('Compression');
|
|
case self::PHOTOMETRIC_INTERPRETATION:
|
|
return Pel::tra('Photometric Interpretation');
|
|
case self::FILL_ORDER:
|
|
return Pel::tra('Fill Order');
|
|
case self::DOCUMENT_NAME:
|
|
return Pel::tra('Document Name');
|
|
case self::IMAGE_DESCRIPTION:
|
|
return Pel::tra('Image Description');
|
|
case self::MAKE:
|
|
return Pel::tra('Manufacturer');
|
|
case self::MODEL:
|
|
return Pel::tra('Model');
|
|
case self::STRIP_OFFSETS:
|
|
return Pel::tra('Strip Offsets');
|
|
case self::ORIENTATION:
|
|
return Pel::tra('Orientation');
|
|
case self::SAMPLES_PER_PIXEL:
|
|
return Pel::tra('Samples per Pixel');
|
|
case self::ROWS_PER_STRIP:
|
|
return Pel::tra('Rows per Strip');
|
|
case self::STRIP_BYTE_COUNTS:
|
|
return Pel::tra('Strip Byte Count');
|
|
case self::X_RESOLUTION:
|
|
return Pel::tra('x-Resolution');
|
|
case self::Y_RESOLUTION:
|
|
return Pel::tra('y-Resolution');
|
|
case self::PLANAR_CONFIGURATION:
|
|
return Pel::tra('Planar Configuration');
|
|
case self::RESOLUTION_UNIT:
|
|
return Pel::tra('Resolution Unit');
|
|
case self::TRANSFER_FUNCTION:
|
|
return Pel::tra('Transfer Function');
|
|
case self::SOFTWARE:
|
|
return Pel::tra('Software');
|
|
case self::DATE_TIME:
|
|
return Pel::tra('Date and Time');
|
|
case self::ARTIST:
|
|
return Pel::tra('Artist');
|
|
case self::WHITE_POINT:
|
|
return Pel::tra('White Point');
|
|
case self::PRIMARY_CHROMATICITIES:
|
|
return Pel::tra('Primary Chromaticities');
|
|
case self::TRANSFER_RANGE:
|
|
return Pel::tra('Transfer Range');
|
|
case self::JPEG_PROC:
|
|
return Pel::tra('JPEG Process');
|
|
case self::JPEG_INTERCHANGE_FORMAT:
|
|
return Pel::tra('JPEG Interchange Format');
|
|
case self::JPEG_INTERCHANGE_FORMAT_LENGTH:
|
|
return Pel::tra('JPEG Interchange Format Length');
|
|
case self::YCBCR_COEFFICIENTS:
|
|
return Pel::tra('YCbCr Coefficients');
|
|
case self::YCBCR_SUB_SAMPLING:
|
|
return Pel::tra('YCbCr Sub-Sampling');
|
|
case self::YCBCR_POSITIONING:
|
|
return Pel::tra('YCbCr Positioning');
|
|
case self::REFERENCE_BLACK_WHITE:
|
|
return Pel::tra('Reference Black/White');
|
|
case self::RELATED_IMAGE_FILE_FORMAT:
|
|
return Pel::tra('Related Image File Format');
|
|
case self::RELATED_IMAGE_WIDTH:
|
|
return Pel::tra('Related Image Width');
|
|
case self::RELATED_IMAGE_LENGTH:
|
|
return Pel::tra('Related Image Length');
|
|
case self::CFA_REPEAT_PATTERN_DIM:
|
|
return Pel::tra('CFA Repeat Pattern Dim');
|
|
case self::CFA_PATTERN:
|
|
return Pel::tra('CFA Pattern');
|
|
case self::BATTERY_LEVEL:
|
|
return Pel::tra('Battery Level');
|
|
case self::COPYRIGHT:
|
|
return Pel::tra('Copyright');
|
|
case self::EXPOSURE_TIME:
|
|
return Pel::tra('Exposure Time');
|
|
case self::FNUMBER:
|
|
return Pel::tra('FNumber');
|
|
case self::IPTC_NAA:
|
|
return Pel::tra('IPTC/NAA');
|
|
case self::EXIF_IFD_POINTER:
|
|
return Pel::tra('Exif IFD Pointer');
|
|
case self::INTER_COLOR_PROFILE:
|
|
return Pel::tra('Inter Color Profile');
|
|
case self::EXPOSURE_PROGRAM:
|
|
return Pel::tra('Exposure Program');
|
|
case self::SPECTRAL_SENSITIVITY:
|
|
return Pel::tra('Spectral Sensitivity');
|
|
case self::GPS_INFO_IFD_POINTER:
|
|
return Pel::tra('GPS Info IFD Pointer');
|
|
case self::ISO_SPEED_RATINGS:
|
|
return Pel::tra('ISO Speed Ratings');
|
|
case self::OECF:
|
|
return Pel::tra('OECF');
|
|
case self::EXIF_VERSION:
|
|
return Pel::tra('Exif Version');
|
|
case self::DATE_TIME_ORIGINAL:
|
|
return Pel::tra('Date and Time (original)');
|
|
case self::DATE_TIME_DIGITIZED:
|
|
return Pel::tra('Date and Time (digitized)');
|
|
case self::COMPONENTS_CONFIGURATION:
|
|
return Pel::tra('Components Configuration');
|
|
case self::COMPRESSED_BITS_PER_PIXEL:
|
|
return Pel::tra('Compressed Bits per Pixel');
|
|
case self::SHUTTER_SPEED_VALUE:
|
|
return Pel::tra('Shutter speed');
|
|
case self::APERTURE_VALUE:
|
|
return Pel::tra('Aperture');
|
|
case self::BRIGHTNESS_VALUE:
|
|
return Pel::tra('Brightness');
|
|
case self::EXPOSURE_BIAS_VALUE:
|
|
return Pel::tra('Exposure Bias');
|
|
case self::MAX_APERTURE_VALUE:
|
|
return Pel::tra('Max Aperture Value');
|
|
case self::SUBJECT_DISTANCE:
|
|
return Pel::tra('Subject Distance');
|
|
case self::METERING_MODE:
|
|
return Pel::tra('Metering Mode');
|
|
case self::LIGHT_SOURCE:
|
|
return Pel::tra('Light Source');
|
|
case self::FLASH:
|
|
return Pel::tra('Flash');
|
|
case self::FOCAL_LENGTH:
|
|
return Pel::tra('Focal Length');
|
|
case self::MAKER_NOTE:
|
|
return Pel::tra('Maker Note');
|
|
case self::USER_COMMENT:
|
|
return Pel::tra('User Comment');
|
|
case self::SUB_SEC_TIME:
|
|
return Pel::tra('SubSec Time');
|
|
case self::SUB_SEC_TIME_ORIGINAL:
|
|
return Pel::tra('SubSec Time Original');
|
|
case self::SUB_SEC_TIME_DIGITIZED:
|
|
return Pel::tra('SubSec Time Digitized');
|
|
case self::XP_TITLE:
|
|
return 'Windows XP Title';
|
|
case self::XP_COMMENT:
|
|
return 'Windows XP Comment';
|
|
case self::XP_AUTHOR:
|
|
return 'Windows XP Author';
|
|
case self::XP_KEYWORDS:
|
|
return 'Windows XP Keywords';
|
|
case self::XP_SUBJECT:
|
|
return 'Windows XP Subject';
|
|
case self::FLASH_PIX_VERSION:
|
|
return Pel::tra('FlashPix Version');
|
|
case self::COLOR_SPACE:
|
|
return Pel::tra('Color Space');
|
|
case self::PIXEL_X_DIMENSION:
|
|
return Pel::tra('Pixel x-Dimension');
|
|
case self::PIXEL_Y_DIMENSION:
|
|
return Pel::tra('Pixel y-Dimension');
|
|
case self::RELATED_SOUND_FILE:
|
|
return Pel::tra('Related Sound File');
|
|
case self::INTEROPERABILITY_IFD_POINTER:
|
|
return Pel::tra('Interoperability IFD Pointer');
|
|
case self::FLASH_ENERGY:
|
|
return Pel::tra('Flash Energy');
|
|
case self::SPATIAL_FREQUENCY_RESPONSE:
|
|
return Pel::tra('Spatial Frequency Response');
|
|
case self::FOCAL_PLANE_X_RESOLUTION:
|
|
return Pel::tra('Focal Plane x-Resolution');
|
|
case self::FOCAL_PLANE_Y_RESOLUTION:
|
|
return Pel::tra('Focal Plane y-Resolution');
|
|
case self::FOCAL_PLANE_RESOLUTION_UNIT:
|
|
return Pel::tra('Focal Plane Resolution Unit');
|
|
case self::SUBJECT_LOCATION:
|
|
return Pel::tra('Subject Location');
|
|
case self::EXPOSURE_INDEX:
|
|
return Pel::tra('Exposure index');
|
|
case self::SENSING_METHOD:
|
|
return Pel::tra('Sensing Method');
|
|
case self::FILE_SOURCE:
|
|
return Pel::tra('File Source');
|
|
case self::SCENE_TYPE:
|
|
return Pel::tra('Scene Type');
|
|
case self::SUBJECT_AREA:
|
|
return Pel::tra('Subject Area');
|
|
case self::CUSTOM_RENDERED:
|
|
return Pel::tra('Custom Rendered');
|
|
case self::EXPOSURE_MODE:
|
|
return Pel::tra('Exposure Mode');
|
|
case self::WHITE_BALANCE:
|
|
return Pel::tra('White Balance');
|
|
case self::DIGITAL_ZOOM_RATIO:
|
|
return Pel::tra('Digital Zoom Ratio');
|
|
case self::FOCAL_LENGTH_IN_35MM_FILM:
|
|
return Pel::tra('Focal Length In 35mm Film');
|
|
case self::SCENE_CAPTURE_TYPE:
|
|
return Pel::tra('Scene Capture Type');
|
|
case self::GAIN_CONTROL:
|
|
return Pel::tra('Gain Control');
|
|
case self::CONTRAST:
|
|
return Pel::tra('Contrast');
|
|
case self::SATURATION:
|
|
return Pel::tra('Saturation');
|
|
case self::SHARPNESS:
|
|
return Pel::tra('Sharpness');
|
|
case self::DEVICE_SETTING_DESCRIPTION:
|
|
return Pel::tra('Device Setting Description');
|
|
case self::SUBJECT_DISTANCE_RANGE:
|
|
return Pel::tra('Subject Distance Range');
|
|
case self::IMAGE_UNIQUE_ID:
|
|
return Pel::tra('Image Unique ID');
|
|
case self::GAMMA:
|
|
return Pel::tra('Gamma');
|
|
case self::PRINT_IM:
|
|
return Pel::tra('Print IM');
|
|
}
|
|
|
|
case PelIfd::GPS:
|
|
switch ($tag) {
|
|
case self::GPS_VERSION_ID:
|
|
return 'GPSVersionID';
|
|
case self::GPS_LATITUDE_REF:
|
|
return 'GPSLatitudeRef';
|
|
case self::GPS_LATITUDE:
|
|
return 'GPSLatitude';
|
|
case self::GPS_LONGITUDE_REF:
|
|
return 'GPSLongitudeRef';
|
|
case self::GPS_LONGITUDE:
|
|
return 'GPSLongitude';
|
|
case self::GPS_ALTITUDE_REF:
|
|
return 'GPSAltitudeRef';
|
|
case self::GPS_ALTITUDE:
|
|
return 'GPSAltitude';
|
|
case self::GPS_TIME_STAMP:
|
|
return 'GPSTimeStamp';
|
|
case self::GPS_SATELLITES:
|
|
return 'GPSSatellites';
|
|
case self::GPS_STATUS:
|
|
return 'GPSStatus';
|
|
case self::GPS_MEASURE_MODE:
|
|
return 'GPSMeasureMode';
|
|
case self::GPS_DOP:
|
|
return 'GPSDOP';
|
|
case self::GPS_SPEED_REF:
|
|
return 'GPSSpeedRef';
|
|
case self::GPS_SPEED:
|
|
return 'GPSSpeed';
|
|
case self::GPS_TRACK_REF:
|
|
return 'GPSTrackRef';
|
|
case self::GPS_TRACK:
|
|
return 'GPSTrack';
|
|
case self::GPS_IMG_DIRECTION_REF:
|
|
return 'GPSImgDirectionRef';
|
|
case self::GPS_IMG_DIRECTION:
|
|
return 'GPSImgDirection';
|
|
case self::GPS_MAP_DATUM:
|
|
return 'GPSMapDatum';
|
|
case self::GPS_DEST_LATITUDE_REF:
|
|
return 'GPSDestLatitudeRef';
|
|
case self::GPS_DEST_LATITUDE:
|
|
return 'GPSDestLatitude';
|
|
case self::GPS_DEST_LONGITUDE_REF:
|
|
return 'GPSDestLongitudeRef';
|
|
case self::GPS_DEST_LONGITUDE:
|
|
return 'GPSDestLongitude';
|
|
case self::GPS_DEST_BEARING_REF:
|
|
return 'GPSDestBearingRef';
|
|
case self::GPS_DEST_BEARING:
|
|
return 'GPSDestBearing';
|
|
case self::GPS_DEST_DISTANCE_REF:
|
|
return 'GPSDestDistanceRef';
|
|
case self::GPS_DEST_DISTANCE:
|
|
return 'GPSDestDistance';
|
|
case self::GPS_PROCESSING_METHOD:
|
|
return 'GPSProcessingMethod';
|
|
case self::GPS_AREA_INFORMATION:
|
|
return 'GPSAreaInformation';
|
|
case self::GPS_DATE_STAMP:
|
|
return 'GPSDateStamp';
|
|
case self::GPS_DIFFERENTIAL:
|
|
return 'GPSDifferential';
|
|
}
|
|
|
|
default:
|
|
return Pel::fmt('Unknown Tag: 0x%04X', $tag);
|
|
}
|
|
}
|
|
|
|
}
|
|
?>
|