Source for file PelTag.php

Documentation is available at PelTag.php

  1. <?php
  2.  
  3. /* PEL: PHP EXIF Library. A library with support for reading and
  4. * writing all EXIF headers in JPEG and TIFF images using PHP.
  5. *
  6. * Copyright (C) 2004, 2005 Martin Geisler.
  7. *
  8. * This program is free software; you can redistribute it and/or modify
  9. * it under the terms of the GNU General Public License as published by
  10. * the Free Software Foundation; either version 2 of the License, or
  11. * (at your option) any later version.
  12. *
  13. * This program is distributed in the hope that it will be useful,
  14. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  15. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  16. * GNU General Public License for more details.
  17. *
  18. * You should have received a copy of the GNU General Public License
  19. * along with this program in the file COPYING; if not, write to the
  20. * Free Software Foundation, Inc., 59 Temple Place, Suite 330,
  21. * Boston, MA 02111-1307 USA
  22. */
  23.  
  24. /* PelTag.php,v 1.14 2005/02/10 21:22:46 gimpster Exp */
  25.  
  26.  
  27. /**
  28. * Namespace for functions operating on EXIF tags.
  29. *
  30. * @author Martin Geisler <gimpster@users.sourceforge.net>
  31. * @version 1.14
  32. * @date 2005/02/10 21:22:46
  33. * @license http://www.gnu.org/licenses/gpl.html GNU General Public
  34. * License (GPL)
  35. * @package PEL
  36. */
  37.  
  38. /**#@+ Required class definitions. */
  39. ('Pel.php');
  40. /**#@-*/ * Class with static methods for EXIF tags.
  41. *
  42. * This class defines the constants that represents the EXIF tags
  43. * known to PEL. They are supposed to be used whenever one needs to
  44. * specify an EXIF tag, and they will be denoted by the pseudo type
  45. * {@link PelTag} throughout the documentation.
  46. *
  47. * All the methods in this class are static and should be called with
  48. * the EXIF tag on which they should operate.
  49. *
  50. * @author Martin Geisler <gimpster@users.sourceforge.net>
  51. * @package PEL
  52. */
  53. class PelTag {
  54.  
  55. /**
  56. * Interoperability Index
  57. *
  58. * Indicates the identification of the Interoperability rule.
  59. * Use "R98" for stating ExifR98 Rules. Four bytes used including
  60. * the termination code (NULL). see the separate volume of
  61. * Recommended Exif Interoperability Rules (ExifR98) for other tags
  62. * used for ExifR98.
  63. */
  64. const INTEROPERABILITY_INDEX = 0x0001;
  65.  
  66. /** Interoperability Version
  67. *
  68. * An entry holding this tag must have format {@link }
  69. * PelFormat::UNDEFINED}.
  70. */
  71. const INTEROPERABILITY_VERSION = 0x0002;
  72.  
  73. /**
  74. * Image Width
  75. *
  76. * The number of columns of image data, equal to the number of
  77. * pixels per row. In JPEG compressed data a JPEG marker is used
  78. * instead of this tag.
  79. */
  80. const IMAGE_WIDTH = 0x0100;
  81.  
  82. /**
  83. * Image Length
  84. *
  85. * The number of rows of image data. In JPEG compressed data a
  86. * JPEG marker is used instead of this tag.
  87. */
  88. const IMAGE_LENGTH = 0x0101;
  89.  
  90. /**
  91. * Bits per Sample
  92. *
  93. * The number of bits per image component. In this standard
  94. * each component of the image is 8 bits, so the value for this tag
  95. * is 9. See also {@link SAMPLES_PER_PIXEL}. In JPEG compressed data
  96. * a JPEG marker is used instead of this tag.
  97. */
  98. const BITS_PER_SAMPLE = 0x0102;
  99.  
  100. /**
  101. * Compression
  102. *
  103. * The compression scheme used for the image data. When a
  104. * primary image is JPEG compressed, this designation is not
  105. * necessary and is omitted. When thumbnails use JPEG compression,
  106. * this tag value is set to 6.
  107. */
  108. const COMPRESSION = 0x0103;
  109.  
  110. /**
  111. * Photometric Interpretation
  112. *
  113. * The pixel composition. In JPEG compressed data a JPEG marker
  114. * is used instead of this tag.
  115. */
  116. const PHOTOMETRIC_INTERPRETATION = 0x0106;
  117.  
  118. /** Fill Order */
  119.  
  120. const FILL_ORDER = 0x010A;
  121.  
  122. /** Document Name */
  123.  
  124. const DOCUMENT_NAME = 0x010D;
  125.  
  126. /**
  127. * Image Description
  128. *
  129. * A character string giving the title of the image. It may be
  130. * a comment such as "1988 company picnic" or the like. Two-bytes
  131. * character codes cannot be used. When a 2-bytes code is necessary,
  132. * the Exif Private tag {@link USER_COMMENT} is to be used.
  133. */
  134. const IMAGE_DESCRIPTION = 0x010E;
  135.  
  136. /**
  137. * Manufacturer
  138. *
  139. * The manufacturer of the recording equipment. This is the
  140. * manufacturer of the DSC, scanner, video digitizer or other
  141. * equipment that generated the image. When the field is left blank,
  142. * it is treated as unknown.
  143. */
  144. const MAKE = 0x010F;
  145.  
  146. /**
  147. * Model
  148. *
  149. * The model name or model number of the equipment. This is the
  150. * model name or number of the DSC, scanner, video digitizer or
  151. * other equipment that generated the image. When the field is left
  152. * blank, it is treated as unknown.
  153. */
  154. const MODEL = 0x0110;
  155.  
  156. /**
  157. * Strip Offsets
  158. *
  159. * For each strip, the byte offset of that strip. It is
  160. * recommended that this be selected so the number of strip bytes
  161. * does not exceed 64 Kbytes. With JPEG compressed data this
  162. * designation is not needed and is omitted. See also {@link }
  163. * ROWS_PER_STRIP} and {@link STRIP_BYTE_COUNTS}.
  164. */
  165. const STRIP_OFFSETS = 0x0111;
  166.  
  167. /**
  168. * Orientation
  169. *
  170. * The image orientation viewed in terms of rows and columns.
  171. */
  172. const ORIENTATION = 0x0112;
  173.  
  174. /**
  175. * Samples per Pixel
  176. *
  177. * The number of components per pixel. Since this standard
  178. * applies to RGB and YCbCr images, the value set for this tag is 3.
  179. * In JPEG compressed data a JPEG marker is used instead of this
  180. * tag.
  181. */
  182. const SAMPLES_PER_PIXEL = 0x0115;
  183.  
  184. /**
  185. * Rows per Strip
  186. *
  187. * The number of rows per strip. This is the number of rows in
  188. * the image of one strip when an image is divided into strips. With
  189. * JPEG compressed data this designation is not needed and is
  190. * omitted. See also {@link ROWS_PER_STRIP} and {@link }
  191. * STRIP_BYTE_COUNTS}.
  192. */
  193. const ROWS_PER_STRIP = 0x0116;
  194.  
  195. /**
  196. * Strip Byte Count
  197. *
  198. * The total number of bytes in each strip. With JPEG
  199. * compressed data this designation is not needed and is omitted.
  200. */
  201. const STRIP_BYTE_COUNTS = 0x0117;
  202.  
  203. /**
  204. * x-Resolution
  205. *
  206. * The number of pixels per {@link RESOLUTION_UNIT} in the
  207. * {@link IMAGE_WIDTH} direction. When the image resolution is
  208. * unknown, 72 [dpi] is designated.
  209. */
  210. const X_RESOLUTION = 0x011A;
  211.  
  212. /**
  213. * y-Resolution
  214. *
  215. * The number of pixels per {@link RESOLUTION_UNIT} in the
  216. * {@link IMAGE_LENGTH} direction. The same value as {@link }
  217. * X_RESOLUTION} is designated.
  218. */
  219. const Y_RESOLUTION = 0x011B;
  220.  
  221. /**
  222. * Planar Configuration
  223. *
  224. * Indicates whether pixel components are recorded in a chunky
  225. * or planar format. In JPEG compressed files a JPEG marker is used
  226. * instead of this tag. If this field does not exist, the TIFF
  227. * default of 1 (chunky) is assumed.
  228. */
  229. const PLANAR_CONFIGURATION = 0x011C;
  230.  
  231. /**
  232. * Resolution Unit
  233. *
  234. * The unit for measuring {@link X_RESOLUTION} and {@link }
  235. * Y_RESOLUTION}. The same unit is used for both {@link X_RESOLUTION}
  236. * and {@link Y_RESOLUTION}. If the image resolution is unknown, 2
  237. * (inches) is designated.
  238. */
  239. const RESOLUTION_UNIT = 0x0128;
  240.  
  241. /**
  242. * Transfer Function
  243. *
  244. * A transfer function for the image, described in tabular
  245. * style. Normally this tag is not necessary, since color space is
  246. * specified in the color space information tag ({@link }
  247. * COLOR_SPACE}).
  248. */
  249. const TRANSFER_FUNCTION = 0x012D;
  250.  
  251. /**
  252. * Software
  253. *
  254. * This tag records the name and version of the software or
  255. * firmware of the camera or image input device used to generate the
  256. * image. The detailed format is not specified, but it is
  257. * recommended that the example shown below be followed. When the
  258. * field is left blank, it is treated as unknown.
  259. */
  260. const SOFTWARE = 0x0131;
  261.  
  262. /**
  263. * Date and Time
  264. *
  265. * The date and time of image creation. In this standard
  266. * (EXIF-2.1) it is the date and time the file was changed.
  267. *
  268. * An entry holding this tag must have format {@link }
  269. * PelFormat::ASCII} and a component count of exactly 20.
  270. */
  271. const DATE_TIME = 0x0132;
  272.  
  273. /**
  274. * Artist
  275. *
  276. * This tag records the name of the camera owner, photographer
  277. * or image creator. The detailed format is not specified, but it is
  278. * recommended that the information be written as in the example
  279. * below for ease of Interoperability. When the field is left blank,
  280. * it is treated as unknown.
  281. */
  282. const ARTIST = 0x013B;
  283.  
  284. /**
  285. * White Point
  286. *
  287. * The chromaticity of the white point of the image. Normally
  288. * this tag is not necessary, since color space is specified in the
  289. * colorspace information tag ({@link COLOR_SPACE}).
  290. */
  291. const WHITE_POINT = 0x013E;
  292.  
  293. /**
  294. * Primary Chromaticities
  295. *
  296. * The chromaticity of the three primary colors of the image.
  297. * Normally this tag is not necessary, since colorspace is specified
  298. * in the colorspace information tag ({@link COLOR_SPACE}).
  299. */
  300. const PRIMARY_CHROMATICITIES = 0x013F;
  301.  
  302. /** Transfer Range */
  303.  
  304. const TRANSFER_RANGE = 0x0156;
  305.  
  306. /** JPEGProc */
  307.  
  308. const JPEG_PROC = 0x0200;
  309.  
  310. /**
  311. * JPEG Interchange Format
  312. *
  313. * The offset to the start byte ({@link PelJpegMarker::SOI SOI}) of
  314. * JPEG compressed thumbnail data. This is not used for primary
  315. * image JPEG data.
  316. */
  317. const JPEG_INTERCHANGE_FORMAT = 0x0201;
  318.  
  319. /**
  320. * JPEG Interchange Format Length
  321. *
  322. * The number of bytes of JPEG compressed thumbnail data. This is
  323. * not used for primary image JPEG data. JPEG thumbnails are not
  324. * divided but are recorded as a continuous JPEG bitstream from
  325. * {@link PelJpegMarker::SOI SOI} to {@link PelJpegMarker::EOI}
  326. * EOI}. Appn and {@link PelJpegMarker::COM COM} markers should not
  327. * be recorded. Compressed thumbnails must be recorded in no more
  328. * than 64 Kbytes, including all other data to be recorded in {@link }
  329. * PelJpegMarker::APP1 APP1}.
  330. */
  331. const JPEG_INTERCHANGE_FORMAT_LENGTH = 0x0202;
  332.  
  333. /**
  334. * YCbCr Coefficients
  335. *
  336. * The matrix coefficients for transformation from RGB to YCbCr
  337. * image data. No default is given in TIFF; but here the value given
  338. * in Appendix E, "Color Space Guidelines", is used as the default.
  339. * The color space is declared in a color space information tag,
  340. * with the default being the value that gives the optimal image
  341. * characteristics Interoperability this condition.
  342. */
  343. const YCBCR_COEFFICIENTS = 0x0211;
  344.  
  345. /**
  346. * YCbCr Sub-Sampling
  347. *
  348. * The sampling ratio of chrominance components in relation to
  349. * the luminance component. In JPEG compressed data a JPEG marker is
  350. * used instead of this tag.
  351. */
  352. const YCBCR_SUB_SAMPLING = 0x0212;
  353.  
  354. /**
  355. * YCbCr Positioning
  356. *
  357. * The position of chrominance components in relation to the
  358. * luminance component. This field is designated only for JPEG
  359. * compressed data or uncompressed YCbCr data. The TIFF default is 1
  360. * (centered); but when Y:Cb:Cr = 4:2:2 it is recommended in this
  361. * standard that 2 (co-sited) be used to record data, in order to
  362. * improve the image quality when viewed on TV systems. When this
  363. * field does not exist, the reader shall assume the TIFF default.
  364. * In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is
  365. * recommended. If the reader does not have the capability of
  366. * supporting both kinds of {@link YCB_CR_POSITIONING}, it shall
  367. * follow the TIFF default regardless of the value in this field. It
  368. * is preferable that readers be able to support both centered and
  369. * co-sited positioning.
  370. */
  371. const YCBCR_POSITIONING = 0x0213;
  372.  
  373. /**
  374. * Reference Black/White
  375. *
  376. * The reference black point value and reference white point
  377. * value. No defaults are given in TIFF, but the values below are
  378. * given as defaults here. The color space is declared in a color
  379. * space information tag, with the default being the value that
  380. * gives the optimal image characteristics Interoperability these
  381. * conditions.
  382. */
  383. const REFERENCE_BLACK_WHITE = 0x0214;
  384.  
  385. /** Related Image File Format */
  386.  
  387. const RELATED_IMAGE_FILE_FORMAT = 0x1000;
  388.  
  389. /** Related Image Width */
  390.  
  391. const RELATED_IMAGE_WIDTH = 0x1001;
  392.  
  393. /** Related Image Length */
  394.  
  395. const RELATED_IMAGE_LENGTH = 0x1002;
  396.  
  397. /** CFA Repeat Pattern Dim */
  398.  
  399. const CFA_REPEAT_PATTERN_DIM = 0x828D;
  400.  
  401. /**
  402. * CFA Pattern
  403. *
  404. * Indicates the color filter array (CFA) geometric pattern of
  405. * the image sensor when a one-chip color area sensor is used. It
  406. * does not apply to all sensing methods.
  407. */
  408. const CFA_PATTERN = 0x828E;
  409.  
  410. /** Battery Level */
  411.  
  412. const BATTERY_LEVEL = 0x828F;
  413.  
  414. /**
  415. * Copyright
  416. *
  417. * Copyright information. In this standard the tag is used to
  418. * indicate both the photographer and editor copyrights. It is the
  419. * copyright notice of the person or organization claiming rights to
  420. * the image. The Interoperability copyright statement including
  421. * date and rights should be written in this field; e.g.,
  422. * "Copyright, John Smith, 19xx. All rights reserved.". In this
  423. * standard the field records both the photographer and editor
  424. * copyrights, with each recorded in a separate part of the
  425. * statement. When there is a clear distinction between the
  426. * photographer and editor copyrights, these are to be written in
  427. * the order of photographer followed by editor copyright, separated
  428. * by NULL (in this case, since the statement also ends with a NULL,
  429. * there are two NULL codes) (see example 1). When only the
  430. * photographer is given, it is terminated by one NULL code (see
  431. * example 2). When only the editor copyright is given, the
  432. * photographer copyright part consists of one space followed by a
  433. * terminating NULL code, then the editor copyright is given (see
  434. * example 3). When the field is left blank, it is treated as
  435. * unknown.
  436. *
  437. * An entry holding this tag must have format {@link }
  438. * PelFormat::ASCII}.
  439. */
  440. const COPYRIGHT = 0x8298;
  441.  
  442. /**
  443. * Exposure Time
  444. *
  445. * Exposure time, given in seconds (sec).
  446. */
  447. const EXPOSURE_TIME = 0x829A;
  448.  
  449. /**
  450. * FNumber
  451. *
  452. * The F number.
  453. */
  454. const FNUMBER = 0x829D;
  455.  
  456. /** IPTC/NAA */
  457.  
  458. const IPTC_NAA = 0x83BB;
  459.  
  460. /**
  461. * Exif IFD Pointer
  462. *
  463. * A pointer to the Exif IFD. Interoperability, Exif IFD has
  464. * the same structure as that of the IFD specified in TIFF.
  465. * ordinarily, however, it does not contain image data as in the
  466. * case of TIFF.
  467. */
  468. const EXIF_IFD_POINTER = 0x8769;
  469.  
  470. /** Inter Color Profile */
  471.  
  472. const INTER_COLOR_PROFILE = 0x8773;
  473.  
  474. /**
  475. * Exposure Program
  476. *
  477. * The class of the program used by the camera to set exposure
  478. * when the picture is taken.
  479. */
  480. const EXPOSURE_PROGRAM = 0x8822;
  481.  
  482. /**
  483. * Spectral Sensitivity
  484. *
  485. * Indicates the spectral sensitivity of each channel of the
  486. * camera used. The tag value is an ASCII string compatible with the
  487. * standard developed by the ASTM Technical committee.
  488. */
  489. const SPECTRAL_SENSITIVITY = 0x8824;
  490.  
  491. /**
  492. * GPS Info IFD Pointer
  493. *
  494. * A pointer to the GPS Info IFD. The Interoperability
  495. * structure of the GPS Info IFD, like that of Exif IFD, has no
  496. * image data.
  497. */
  498. const GPS_INFO_IFD_POINTER = 0x8825;
  499.  
  500. /**
  501. * ISO Speed Ratings
  502. *
  503. * Indicates the ISO Speed and ISO Latitude of the camera or
  504. * input device as specified in ISO 12232.
  505. */
  506. const ISO_SPEED_RATINGS = 0x8827;
  507.  
  508. /**
  509. * OECF
  510. *
  511. * Indicates the Opto-Electoric Conversion Function (OECF)
  512. * specified in ISO 14524. OECF is the relationship between the
  513. * camera optical input and the image values.
  514. */
  515. const OECF = 0x8828;
  516.  
  517. /**
  518. * Exif Version
  519. *
  520. * The version of this standard supported. Nonexistence of this
  521. * field is taken to mean non-conformance to the standard.
  522. *
  523. * An entry holding this tag must have format {@link }
  524. * PelFormat::UNDEFINED}.
  525. */
  526. const EXIF_VERSION = 0x9000;
  527.  
  528. /**
  529. * Date and Time (original)
  530. *
  531. * The date and time when the original image data was
  532. * generated. For a digital still camera the date and time the
  533. * picture was taken are recorded.
  534. *
  535. * An entry holding this tag must have format {@link }
  536. * PelFormat::ASCII} and a component count of exactly 20.
  537. */
  538. const DATE_TIME_ORIGINAL = 0x9003;
  539.  
  540. /**
  541. * Date and Time (digitized)
  542. *
  543. * The date and time when the image was stored as digital data.
  544. *
  545. * An entry holding this tag must have format {@link }
  546. * PelFormat::ASCII} and a component count of exactly 20.
  547. */
  548. const DATE_TIME_DIGITIZED = 0x9004;
  549.  
  550. /**
  551. * Components Configuration
  552. *
  553. * Information specific to compressed data. The channels of
  554. * each component are arranged in order from the 1st component to
  555. * the 4th. For uncompressed data the data arrangement is given in
  556. * the {@link PHOTOMETRIC_INTERPRETATION} tag. However, since {@link }
  557. * PHOTOMETRIC_INTERPRETATION} can only express the order of Y, Cb
  558. * and Cr, this tag is provided for cases when compressed data uses
  559. * components other than Y, Cb, and Cr and to enable support of
  560. * other sequences.
  561. */
  562. const COMPONENTS_CONFIGURATION = 0x9101;
  563.  
  564. /**
  565. * Compressed Bits per Pixel
  566. *
  567. * Information specific to compressed data. The compression
  568. * mode used for a compressed image is indicated in unit bits per
  569. * pixel.
  570. */
  571. const COMPRESSED_BITS_PER_PIXEL = 0x9102;
  572.  
  573. /**
  574. * Shutter speed
  575. *
  576. * Shutter speed. The unit is the APEX (Additive System of
  577. * Photographic Exposure) setting (see Appendix C).
  578. */
  579. const SHUTTER_SPEED_VALUE = 0x9201;
  580.  
  581. /**
  582. * Aperture
  583. *
  584. * The lens aperture. The unit is the APEX value.
  585. */
  586. const APERTURE_VALUE = 0x9202;
  587.  
  588. /**
  589. * Brightness
  590. *
  591. * The value of brightness. The unit is the APEX value.
  592. * Ordinarily it is given in the range of -99.99 to 99.99.
  593. */
  594. const BRIGHTNESS_VALUE = 0x9203;
  595.  
  596. /**
  597. * Exposure Bias
  598. *
  599. * The exposure bias. The units is the APEX value. Ordinarily
  600. * it is given in the range of -99.99 to 99.99.
  601. */
  602. const EXPOSURE_BIAS_VALUE = 0x9204;
  603.  
  604. /**
  605. * Max Aperture Value
  606. *
  607. * The smallest F number of the lens. The unit is the APEX
  608. * value. Ordinarily it is given in the range of 00.00 to 99.99, but
  609. * it is not limited to this range.
  610. */
  611. const MAX_APERTURE_VALUE = 0x9205;
  612.  
  613. /**
  614. * Subject Distance
  615. *
  616. * The distance to the subject, given in meters.
  617. */
  618. const SUBJECT_DISTANCE = 0x9206;
  619.  
  620. /**
  621. * Metering Mode
  622. *
  623. * The metering mode.
  624. */
  625. const METERING_MODE = 0x9207;
  626.  
  627. /**
  628. * Light Source
  629. *
  630. * The kind of light source.
  631. */
  632. const LIGHT_SOURCE = 0x9208;
  633.  
  634. /**
  635. * Flash
  636. *
  637. * This tag is recorded when an image is taken using a strobe
  638. * light (flash).
  639. */
  640. const FLASH = 0x9209;
  641.  
  642. /**
  643. * Focal Length
  644. *
  645. * The actual focal length of the lens, in mm. Conversion is not
  646. * made to the focal length of a 35 mm film camera, see the {@link }
  647. * FOCAL_LENGTH_IN_35MM_FILM} tag for this information.
  648. */
  649. const FOCAL_LENGTH = 0x920A;
  650.  
  651. /**
  652. * Subject Area
  653. *
  654. * This tag indicates the location and area of the main subject
  655. * in the overall scene.
  656. */
  657. const SUBJECT_AREA = 0x9214;
  658.  
  659. /**
  660. * Maker Note
  661. *
  662. * A tag for manufacturers of Exif writers to record any
  663. * desired information. The contents are up to the manufacturer.
  664. */
  665. const MAKER_NOTE = 0x927C;
  666.  
  667. /**
  668. * User Comment
  669. *
  670. * A tag for Exif users to write keywords or comments on the
  671. * image besides those in {@link IMAGE_DESCRIPTION}, and without the
  672. * character code limitations of the {@link IMAGE_DESCRIPTION} tag.
  673. * The character code used in the {@link USER_COMMENT} tag is
  674. * identified based on an ID code in a fixed 8-byte area at the
  675. * start of the tag data area. The unused portion of the area is
  676. * padded with NULL ("00.h"). ID codes are assigned by means of
  677. * registration. The designation method and references for each
  678. * character code are given in Table 6. The value of CountN is
  679. * determined based on the 8 bytes in the character code area and
  680. * the number of bytes in the user comment part. Since the TYPE is
  681. * not ASCII, NULL termination is not necessary (see Fig. 9). The ID
  682. * code for the {@link USER_COMMENT} area may be a Defined code such
  683. * as JIS or ASCII, or may be Undefined. The Undefined name is
  684. * UndefinedText, and the ID code is filled with 8 bytes of all
  685. * "NULL" ("00.H"). An Exif reader that reads the {@link }
  686. * USER_COMMENT} tag must have a function for determining the ID
  687. * code. This function is not required in Exif readers that do not
  688. * use the {@link USER_COMMENT} tag (see Table 7). When a {@link }
  689. * USER_COMMENT} area is set aside, it is recommended that the ID
  690. * code be ASCII and that the following user comment part be filled
  691. * with blank characters [20.H].
  692. *
  693. * An entry holding this tag must have format {@link }
  694. * PelFormat::UNDEFINED}.
  695. */
  696. const USER_COMMENT = 0x9286;
  697.  
  698. /**
  699. * Subsec Time
  700. *
  701. * A tag used to record fractions of seconds for the {@link }
  702. * DATE_TIME} tag.
  703. */
  704. const SUB_SEC_TIME = 0x9290;
  705.  
  706. /**
  707. * SubSec Time Original
  708. *
  709. * A tag used to record fractions of seconds for the {@link }
  710. * DATE_TIME_ORIGINAL} tag.
  711. */
  712. const SUB_SEC_TIME_ORIGINAL = 0x9291;
  713.  
  714. /**
  715. * SubSec Time Digitized
  716. *
  717. * A tag used to record fractions of seconds for the {@link }
  718. * DATE_TIME_DIGITIZED} tag.
  719. */
  720. const SUB_SEC_TIME_DIGITIZED = 0x9292;
  721.  
  722. /**
  723. * FlashPix Version
  724. *
  725. * The FlashPix format version supported by a FPXR file.
  726. *
  727. * An entry holding this tag must have format {@link }
  728. * PelFormat::UNDEFINED}.
  729. */
  730. const FLASH_PIX_VERSION = 0xA000;
  731.  
  732. /**
  733. * Color Space
  734. *
  735. * The color space information tag is always recorded as the
  736. * color space specifier. Normally sRGB (=1) is used to define the
  737. * color space based on the PC monitor conditions and environment.
  738. * If a color space other than sRGB is used, Uncalibrated (=FFFF.H)
  739. * is set. Image data recorded as Uncalibrated can be treated as
  740. * sRGB when it is converted to FlashPix. On sRGB see Appendix E.
  741. */
  742. const COLOR_SPACE = 0xA001;
  743.  
  744. /**
  745. * Pixel x-Dimension
  746. *
  747. * Information specific to compressed data. When a compressed
  748. * file is recorded, the valid width of the meaningful image must be
  749. * recorded in this tag, whether or not there is padding data or a
  750. * restart marker. This tag should not exist in an uncompressed
  751. * file. For details see section 2.8.1 and Appendix F.
  752. */
  753. const PIXEL_X_DIMENSION = 0xA002;
  754.  
  755. /**
  756. * Pixel y-Dimension
  757. *
  758. * Information specific to compressed data. When a compressed
  759. * file is recorded, the valid height of the meaningful image must
  760. * be recorded in this tag, whether or not there is padding data or
  761. * a restart marker. This tag should not exist in an uncompressed
  762. * file. For details see section 2.8.1 and Appendix F. Since data
  763. * padding is unnecessary in the vertical direction, the number of
  764. * lines recorded in this valid image height tag will in fact be the
  765. * same as that recorded in the SOF.
  766. */
  767. const PIXEL_Y_DIMENSION = 0xA003;
  768.  
  769. /**
  770. * Related Sound File
  771. *
  772. * This tag is used to record the name of an audio file related
  773. * to the image data. The only relational information recorded here
  774. * is the Exif audio file name and extension (an ASCII string
  775. * consisting of 8 characters + '.' + 3 characters). The path is not
  776. * recorded. Stipulations on audio are given in section 3.6.3. File
  777. * naming conventions are given in section 3.7.1. When using this
  778. * tag, audio files must be recorded in conformance to the Exif
  779. * audio format. Writers are also allowed to store the data such as
  780. * Audio within APP2 as FlashPix extension stream data. Audio files
  781. * must be recorded in conformance to the Exif audio format. The
  782. * mapping of Exif image files and audio files is done in any of the
  783. * three ways shown in Table 8. If multiple files are mapped to one
  784. * file as in [2] or [3] of this table, the above format is used to
  785. * record just one audio file name. If there are multiple audio
  786. * files, the first recorded file is given. In the case of [3] in
  787. * Table 8, for example, for the Exif image file "DSC00001.JPG" only
  788. * "SND00001.WAV" is given as the related Exif audio file. When
  789. * there are three Exif audio files "SND00001.WAV", "SND00002.WAV"
  790. * and "SND00003.WAV", the Exif image file name for each of them,
  791. * "DSC00001.JPG", is indicated. By combining multiple relational
  792. * information, a variety of playback possibilities can be
  793. * supported. The method of using relational information is left to
  794. * the implementation on the playback side. Since this information
  795. * is an ASCII character string, it is terminated by NULL. When this
  796. * tag is used to map audio files, the relation of the audio file to
  797. * image data must also be indicated on the audio file end.
  798. */
  799. const RELATED_SOUND_FILE = 0xA004;
  800.  
  801. /**
  802. * Interoperability IFD Pointer
  803. *
  804. * Interoperability IFD is composed of tags which stores the
  805. * information to ensure the Interoperability and pointed by the
  806. * following tag located in Exif IFD. The Interoperability structure
  807. * of Interoperability IFD is the same as TIFF defined IFD structure
  808. * but does not contain the image data characteristically compared
  809. * with normal TIFF IFD.
  810. */
  811. const INTEROPERABILITY_IFD_POINTER = 0xA005;
  812.  
  813. /**
  814. * Flash Energy
  815. *
  816. * Indicates the strobe energy at the time the image is
  817. * captured, as measured in Beam Candle Power Seconds (BCPS).
  818. */
  819. const FLASH_ENERGY = 0xA20B;
  820.  
  821. /**
  822. * Spatial Frequency Response
  823. *
  824. * This tag records the camera or input device spatial
  825. * frequency table and SFR values in the direction of image width,
  826. * image height, and diagonal direction, as specified in ISO 12233.
  827. */
  828. const SPATIAL_FREQUENCY_RESPONSE = 0xA20C;
  829.  
  830. /**
  831. * Focal Plane x-Resolution
  832. *
  833. * Indicates the number of pixels in the image width (X)
  834. * direction per {@link FOCAL_PLANE_RESOLUTION_UNIT} on the camera
  835. * focal plane.
  836. */
  837. const FOCAL_PLANE_X_RESOLUTION = 0xA20E;
  838.  
  839. /**
  840. * Focal Plane y-Resolution
  841. *
  842. * Indicates the number of pixels in the image height (V)
  843. * direction per {@link FOCAL_PLANE_RESOLUTION_UNIT} on the camera
  844. * focal plane.
  845. */
  846. const FOCAL_PLANE_Y_RESOLUTION = 0xA20F;
  847.  
  848. /**
  849. * Focal Plane Resolution Unit
  850. *
  851. * Indicates the unit for measuring {@link }
  852. * FOCAL_PLANE_X_RESOLUTION} and {@link FOCAL_PLANE_Y_RESOLUTION}.
  853. * This value is the same as the {@link RESOLUTION_UNIT}.
  854. */
  855. const FOCAL_PLANE_RESOLUTION_UNIT = 0xA210;
  856.  
  857. /**
  858. * Subject Location
  859. *
  860. * Indicates the location of the main subject in the scene. The
  861. * value of this tag represents the pixel at the center of the main
  862. * subject relative to the left edge, prior to rotation processing
  863. * as per the {@link ROTATION} tag. The first value indicates the X
  864. * column number and second indicates the Y row number.
  865. */
  866. const SUBJECT_LOCATION = 0xA214;
  867.  
  868. /**
  869. * Exposure index
  870. *
  871. * Indicates the exposure index selected on the camera or input
  872. * device at the time the image is captured.
  873. */
  874. const EXPOSURE_INDEX = 0xA215;
  875.  
  876. /**
  877. * Sensing Method
  878. *
  879. * Indicates the image sensor type on the camera or input
  880. * device.
  881. */
  882. const SENSING_METHOD = 0xA217;
  883.  
  884. /**
  885. * File Source
  886. *
  887. * Indicates the image source. If a DSC recorded the image,
  888. * this tag value of this tag always be set to 3, indicating that
  889. * the image was recorded on a DSC.
  890. */
  891. const FILE_SOURCE = 0xA300;
  892.  
  893. /**
  894. * Scene Type
  895. *
  896. * Indicates the type of scene. If a DSC recorded the image,
  897. * this tag value must always be set to 1, indicating that the image
  898. * was directly photographed.
  899. */
  900. const SCENE_TYPE = 0xA301;
  901.  
  902. /**
  903. * CFA Pattern
  904. *
  905. * Indicates the color filter array (CFA) geometric pattern of
  906. * the image sensor when a one-chip color area sensor is used. It
  907. * does not apply to all sensing methods.
  908. */
  909. const NEW_CFA_PATTERN = 0xA302;
  910.  
  911. /**
  912. * Custom Rendered
  913. *
  914. * This tag indicates the use of special processing on image
  915. * data, such as rendering geared to output. When special processing
  916. * is performed, the reader is expected to disable or minimize any
  917. * further processing.
  918. */
  919. const CUSTOM_RENDERED = 0xA401;
  920.  
  921. /**
  922. * Exposure Mode
  923. *
  924. * This tag indicates the exposure mode set when the image was
  925. * shot. In auto-bracketing mode, the camera shoots a series of
  926. * frames of the same scene at different exposure settings.
  927. */
  928. const EXPOSURE_MODE = 0xA402;
  929.  
  930. /**
  931. * White Balance
  932. *
  933. * This tag indicates the white balance mode set when the image
  934. * was shot.
  935. */
  936. const WHITE_BALANCE = 0xA403;
  937.  
  938. /**
  939. * Digital Zoom Ratio
  940. *
  941. * This tag indicates the digital zoom ratio when the image was
  942. * shot. If the numerator of the recorded value is 0, this indicates
  943. * that digital zoom was not used.
  944. */
  945. const DIGITAL_ZOOM_RATIO = 0xA404;
  946.  
  947. /**
  948. * Focal Length In 35mm Film
  949. *
  950. * This tag indicates the equivalent focal length assuming a
  951. * 35mm film camera, in mm. A value of 0 means the focal length is
  952. * unknown. Note that this tag differs from the {@link FOCAL_LENGTH}
  953. * tag.
  954. */
  955. const FOCAL_LENGTH_IN_35MM_FILM = 0xA405;
  956.  
  957. /**
  958. * Scene Capture Type
  959. *
  960. * This tag indicates the type of scene that was shot. It can
  961. * also be used to record the mode in which the image was shot. Note
  962. * that this differs from the {@link SCENE_TYPE} tag.
  963. */
  964. const SCENE_CAPTURE_TYPE = 0xA406;
  965.  
  966. /**
  967. * Gain Control
  968. *
  969. * This tag indicates the degree of overall image gain
  970. * adjustment.
  971. */
  972. const GAIN_CONTROL = 0xA407;
  973.  
  974. /**
  975. * Contrast
  976. *
  977. * This tag indicates the direction of contrast processing
  978. * applied by the camera when the image was shot.
  979. */
  980. const CONTRAST = 0xA408;
  981.  
  982. /**
  983. * Saturation
  984. *
  985. * This tag indicates the direction of saturation processing
  986. * applied by the camera when the image was shot.
  987. */
  988. const SATURATION = 0xA409;
  989.  
  990. /**
  991. * Sharpness
  992. *
  993. * This tag indicates the direction of sharpness processing
  994. * applied by the camera when the image was shot.
  995. */
  996. const SHARPNESS = 0xA40A;
  997.  
  998. /**
  999. * Device Setting Description
  1000. *
  1001. * This tag indicates information on the picture-taking
  1002. * conditions of a particular camera model. The tag is used only to
  1003. * indicate the picture-taking conditions in the reader.
  1004. */
  1005. const DEVICE_SETTING_DESCRIPTION = 0xA40B;
  1006.  
  1007. /**
  1008. * Subject Distance Range
  1009. *
  1010. * This tag indicates the distance to the subject.
  1011. */
  1012. const SUBJECT_DISTANCE_RANGE = 0xA40C;
  1013.  
  1014. /**
  1015. * Image Unique ID
  1016. *
  1017. * This tag indicates an identifier assigned uniquely to each
  1018. * image. It is recorded as an ASCII string equivalent to
  1019. * hexadecimal notation and 128-bit fixed length.
  1020. */
  1021. const IMAGE_UNIQUE_ID = 0xA420;
  1022.  
  1023.  
  1024. /**
  1025. * Check a short value to see if it's a valid EXIF tag.
  1026. *
  1027. * @param PelTag the tag.
  1028. *
  1029. * @return boolean true if the tag is known, false otherwise.
  1030. */
  1031. static function isKnownTag($tag) {
  1032. return ($tag >= self::INTEROPERABILITY_INDEX &&
  1033. $tag <= self::IMAGE_UNIQUE_ID);
  1034. }
  1035.  
  1036. /**
  1037. * Returns a short name for an EXIF tag.
  1038. *
  1039. * @param PelTag the tag.
  1040. *
  1041. * @return string the short name of the tag, e.g., 'ImageWidth' for
  1042. * the {@link IMAGE_WIDTH} tag. If the tag isn't known, the string
  1043. * 'Unknown:0xTT' will be returned where 'TT' is the hexadecimal
  1044. * representation of the tag.
  1045. */
  1046. static function getName($tag) {
  1047. switch ($tag) {
  1048. case self::INTEROPERABILITY_INDEX:
  1049. return 'InteroperabilityIndex';
  1050. case self::INTEROPERABILITY_VERSION:
  1051. return 'InteroperabilityVersion';
  1052. case self::IMAGE_WIDTH:
  1053. return 'ImageWidth';
  1054. case self::IMAGE_LENGTH:
  1055. return 'ImageLength';
  1056. case self::BITS_PER_SAMPLE:
  1057. return 'BitsPerSample';
  1058. case self::COMPRESSION:
  1059. return 'Compression';
  1060. case self::PHOTOMETRIC_INTERPRETATION:
  1061. return 'PhotometricInterpretation';
  1062. case self::FILL_ORDER:
  1063. return 'FillOrder';
  1064. case self::DOCUMENT_NAME:
  1065. return 'DocumentName';
  1066. case self::IMAGE_DESCRIPTION:
  1067. return 'ImageDescription';
  1068. case self::MAKE:
  1069. return 'Make';
  1070. case self::MODEL:
  1071. return 'Model';
  1072. case self::STRIP_OFFSETS:
  1073. return 'StripOffsets';
  1074. case self::ORIENTATION:
  1075. return 'Orientation';
  1076. case self::SAMPLES_PER_PIXEL:
  1077. return 'SamplesPerPixel';
  1078. case self::ROWS_PER_STRIP:
  1079. return 'RowsPerStrip';
  1080. case self::STRIP_BYTE_COUNTS:
  1081. return 'StripByteCounts';
  1082. case self::X_RESOLUTION:
  1083. return 'XResolution';
  1084. case self::Y_RESOLUTION:
  1085. return 'YResolution';
  1086. case self::PLANAR_CONFIGURATION:
  1087. return 'PlanarConfiguration';
  1088. case self::RESOLUTION_UNIT:
  1089. return 'ResolutionUnit';
  1090. case self::TRANSFER_FUNCTION:
  1091. return 'TransferFunction';
  1092. case self::SOFTWARE:
  1093. return 'Software';
  1094. case self::DATE_TIME:
  1095. return 'DateTime';
  1096. case self::ARTIST:
  1097. return 'Artist';
  1098. case self::WHITE_POINT:
  1099. return 'WhitePoint';
  1100. case self::PRIMARY_CHROMATICITIES:
  1101. return 'PrimaryChromaticities';
  1102. case self::TRANSFER_RANGE:
  1103. return 'TransferRange';
  1104. case self::JPEG_PROC:
  1105. return 'JPEGProc';
  1106. case self::JPEG_INTERCHANGE_FORMAT:
  1107. return 'JPEGInterchangeFormat';
  1108. case self::JPEG_INTERCHANGE_FORMAT_LENGTH:
  1109. return 'JPEGInterchangeFormatLength';
  1110. case self::YCBCR_COEFFICIENTS:
  1111. return 'YCbCrCoefficients';
  1112. case self::YCBCR_SUB_SAMPLING:
  1113. return 'YCbCrSubSampling';
  1114. case self::YCBCR_POSITIONING:
  1115. return 'YCbCrPositioning';
  1116. case self::REFERENCE_BLACK_WHITE:
  1117. return 'ReferenceBlackWhite';
  1118. case self::RELATED_IMAGE_FILE_FORMAT:
  1119. return 'RelatedImageFileFormat';
  1120. case self::RELATED_IMAGE_WIDTH:
  1121. return 'RelatedImageWidth';
  1122. case self::RELATED_IMAGE_LENGTH:
  1123. return 'RelatedImageLength';
  1124. case self::CFA_REPEAT_PATTERN_DIM:
  1125. return 'CFARepeatPatternDim';
  1126. case self::CFA_PATTERN:
  1127. return 'CFAPattern';
  1128. case self::BATTERY_LEVEL:
  1129. return 'BatteryLevel';
  1130. case self::COPYRIGHT:
  1131. return 'Copyright';
  1132. case self::EXPOSURE_TIME:
  1133. return 'ExposureTime';
  1134. case self::FNUMBER:
  1135. return 'FNumber';
  1136. case self::IPTC_NAA:
  1137. return 'IPTC/NAA';
  1138. case self::EXIF_IFD_POINTER:
  1139. return 'ExifIFDPointer';
  1140. case self::INTER_COLOR_PROFILE:
  1141. return 'InterColorProfile';
  1142. case self::EXPOSURE_PROGRAM:
  1143. return 'ExposureProgram';
  1144. case self::SPECTRAL_SENSITIVITY:
  1145. return 'SpectralSensitivity';
  1146. case self::GPS_INFO_IFD_POINTER:
  1147. return 'GPSInfoIFDPointer';
  1148. // case self::GPS_VERSION_ID:
  1149. // return 'GPSVersionID';
  1150. // case self::GPS_LATITUDE_REF:
  1151. // return 'GPSLatitudeRef';
  1152. // case self::GPS_LATITUDE:
  1153. // return 'GPSLatitude';
  1154. // case self::GPS_LONGITUDE_REF:
  1155. // return 'GPSLongitudeRef';
  1156. // case self::GPS_LONGITUDE:
  1157. // return 'GPSLongitude';
  1158. case self::ISO_SPEED_RATINGS:
  1159. return 'ISOSpeedRatings';
  1160. case self::OECF:
  1161. return 'OECF';
  1162. case self::EXIF_VERSION:
  1163. return 'ExifVersion';
  1164. case self::DATE_TIME_ORIGINAL:
  1165. return 'DateTimeOriginal';
  1166. case self::DATE_TIME_DIGITIZED:
  1167. return 'DateTimeDigitized';
  1168. case self::COMPONENTS_CONFIGURATION:
  1169. return 'ComponentsConfiguration';
  1170. case self::COMPRESSED_BITS_PER_PIXEL:
  1171. return 'CompressedBitsPerPixel';
  1172. case self::SHUTTER_SPEED_VALUE:
  1173. return 'ShutterSpeedValue';
  1174. case self::APERTURE_VALUE:
  1175. return 'ApertureValue';
  1176. case self::BRIGHTNESS_VALUE:
  1177. return 'BrightnessValue';
  1178. case self::EXPOSURE_BIAS_VALUE:
  1179. return 'ExposureBiasValue';
  1180. case self::MAX_APERTURE_VALUE:
  1181. return 'MaxApertureValue';
  1182. case self::SUBJECT_DISTANCE:
  1183. return 'SubjectDistance';
  1184. case self::METERING_MODE:
  1185. return 'MeteringMode';
  1186. case self::LIGHT_SOURCE:
  1187. return 'LightSource';
  1188. case self::FLASH:
  1189. return 'Flash';
  1190. case self::FOCAL_LENGTH:
  1191. return 'FocalLength';
  1192. case self::MAKER_NOTE:
  1193. return 'MakerNote';
  1194. case self::USER_COMMENT:
  1195. return 'UserComment';
  1196. case self::SUB_SEC_TIME:
  1197. return 'SubsecTime';
  1198. case self::SUB_SEC_TIME_ORIGINAL:
  1199. return 'SubSecTimeOriginal';
  1200. case self::SUB_SEC_TIME_DIGITIZED:
  1201. return 'SubSecTimeDigitized';
  1202. case self::FLASH_PIX_VERSION:
  1203. return 'FlashPixVersion';
  1204. case self::COLOR_SPACE:
  1205. return 'ColorSpace';
  1206. case self::PIXEL_X_DIMENSION:
  1207. return 'PixelXDimension';
  1208. case self::PIXEL_Y_DIMENSION:
  1209. return 'PixelYDimension';
  1210. case self::RELATED_SOUND_FILE:
  1211. return 'RelatedSoundFile';
  1212. case self::INTEROPERABILITY_IFD_POINTER:
  1213. return 'InteroperabilityIFDPointer';
  1214. case self::FLASH_ENERGY:
  1215. return 'FlashEnergy';
  1216. case self::SPATIAL_FREQUENCY_RESPONSE:
  1217. return 'SpatialFrequencyResponse';
  1218. case self::FOCAL_PLANE_X_RESOLUTION:
  1219. return 'FocalPlaneXResolution';
  1220. case self::FOCAL_PLANE_Y_RESOLUTION:
  1221. return 'FocalPlaneYResolution';
  1222. case self::FOCAL_PLANE_RESOLUTION_UNIT:
  1223. return 'FocalPlaneResolutionUnit';
  1224. case self::SUBJECT_LOCATION:
  1225. return 'SubjectLocation';
  1226. case self::EXPOSURE_INDEX:
  1227. return 'ExposureIndex';
  1228. case self::SENSING_METHOD:
  1229. return 'SensingMethod';
  1230. case self::FILE_SOURCE:
  1231. return 'FileSource';
  1232. case self::SCENE_TYPE:
  1233. return 'SceneType';
  1234. case self::NEW_CFA_PATTERN:
  1235. return 'CFAPattern';
  1236. case self::SUBJECT_AREA:
  1237. return 'SubjectArea';
  1238. case self::CUSTOM_RENDERED:
  1239. return 'CustomRendered';
  1240. case self::EXPOSURE_MODE:
  1241. return 'ExposureMode';
  1242. case self::WHITE_BALANCE:
  1243. return 'WhiteBalance';
  1244. case self::DIGITAL_ZOOM_RATIO:
  1245. return 'DigitalZoomRatio';
  1246. case self::FOCAL_LENGTH_IN_35MM_FILM:
  1247. return 'FocalLengthIn35mmFilm';
  1248. case self::SCENE_CAPTURE_TYPE:
  1249. return 'SceneCaptureType';
  1250. case self::GAIN_CONTROL:
  1251. return 'GainControl';
  1252. case self::CONTRAST:
  1253. return 'Contrast';
  1254. case self::SATURATION:
  1255. return 'Saturation';
  1256. case self::SHARPNESS:
  1257. return 'Sharpness';
  1258. case self::DEVICE_SETTING_DESCRIPTION:
  1259. return 'DeviceSettingDescription';
  1260. case self::SUBJECT_DISTANCE_RANGE:
  1261. return 'SubjectDistanceRange';
  1262. case self::IMAGE_UNIQUE_ID:
  1263. return 'ImageUniqueID';
  1264. default:
  1265. return Pel::fmt('Unknown: 0x%02X', $tag);
  1266. }
  1267. }
  1268.  
  1269.  
  1270. /**
  1271. * Returns a title for an EXIF tag.
  1272. *
  1273. * @param PelTag the tag.
  1274. *
  1275. * @return string the title of the tag, e.g., 'Image Width' for the
  1276. * {@link IMAGE_WIDTH} tag. If the tag isn't known, the string
  1277. * 'Unknown Tag: 0xTT' will be returned where 'TT' is the
  1278. * hexadecimal representation of the tag.
  1279. */
  1280. function getTitle($tag) {
  1281. switch ($tag) {
  1282. case self::INTEROPERABILITY_INDEX:
  1283. return Pel::tra('Interoperability Index');
  1284. case self::INTEROPERABILITY_VERSION:
  1285. return Pel::tra('Interoperability Version');
  1286. case self::IMAGE_WIDTH:
  1287. return Pel::tra('Image Width');
  1288. case self::IMAGE_LENGTH:
  1289. return Pel::tra('Image Length');
  1290. case self::BITS_PER_SAMPLE:
  1291. return Pel::tra('Bits per Sample');
  1292. case self::COMPRESSION:
  1293. return Pel::tra('Compression');
  1294. case self::PHOTOMETRIC_INTERPRETATION:
  1295. return Pel::tra('Photometric Interpretation');
  1296. case self::FILL_ORDER:
  1297. return Pel::tra('Fill Order');
  1298. case self::DOCUMENT_NAME:
  1299. return Pel::tra('Document Name');
  1300. case self::IMAGE_DESCRIPTION:
  1301. return Pel::tra('Image Description');
  1302. case self::MAKE:
  1303. return Pel::tra('Manufacturer');
  1304. case self::MODEL:
  1305. return Pel::tra('Model');
  1306. case self::STRIP_OFFSETS:
  1307. return Pel::tra('Strip Offsets');
  1308. case self::ORIENTATION:
  1309. return Pel::tra('Orientation');
  1310. case self::SAMPLES_PER_PIXEL:
  1311. return Pel::tra('Samples per Pixel');
  1312. case self::ROWS_PER_STRIP:
  1313. return Pel::tra('Rows per Strip');
  1314. case self::STRIP_BYTE_COUNTS:
  1315. return Pel::tra('Strip Byte Count');
  1316. case self::X_RESOLUTION:
  1317. return Pel::tra('x-Resolution');
  1318. case self::Y_RESOLUTION:
  1319. return Pel::tra('y-Resolution');
  1320. case self::PLANAR_CONFIGURATION:
  1321. return Pel::tra('Planar Configuration');
  1322. case self::RESOLUTION_UNIT:
  1323. return Pel::tra('Resolution Unit');
  1324. case self::TRANSFER_FUNCTION:
  1325. return Pel::tra('Transfer Function');
  1326. case self::SOFTWARE:
  1327. return Pel::tra('Software');
  1328. case self::DATE_TIME:
  1329. return Pel::tra('Date and Time');
  1330. case self::ARTIST:
  1331. return Pel::tra('Artist');
  1332. case self::WHITE_POINT:
  1333. return Pel::tra('White Point');
  1334. case self::PRIMARY_CHROMATICITIES:
  1335. return Pel::tra('Primary Chromaticities');
  1336. case self::TRANSFER_RANGE:
  1337. return Pel::tra('Transfer Range');
  1338. case self::JPEG_PROC:
  1339. return Pel::tra('JPEGProc');
  1340. case self::JPEG_INTERCHANGE_FORMAT:
  1341. return Pel::tra('JPEG Interchange Format');
  1342. case self::JPEG_INTERCHANGE_FORMAT_LENGTH:
  1343. return Pel::tra('JPEG Interchange Format Length');
  1344. case self::YCBCR_COEFFICIENTS:
  1345. return Pel::tra('YCbCr Coefficients');
  1346. case self::YCBCR_SUB_SAMPLING:
  1347. return Pel::tra('YCbCr Sub-Sampling');
  1348. case self::YCBCR_POSITIONING:
  1349. return Pel::tra('YCbCr Positioning');
  1350. case self::REFERENCE_BLACK_WHITE:
  1351. return Pel::tra('Reference Black/White');
  1352. case self::RELATED_IMAGE_FILE_FORMAT:
  1353. return Pel::tra('Related Image File Format');
  1354. case self::RELATED_IMAGE_WIDTH:
  1355. return Pel::tra('Related Image Width');
  1356. case self::RELATED_IMAGE_LENGTH:
  1357. return Pel::tra('Related Image Length');
  1358. case self::CFA_REPEAT_PATTERN_DIM:
  1359. return Pel::tra('CFA Repeat Pattern Dim');
  1360. case self::CFA_PATTERN:
  1361. return Pel::tra('CFA Pattern');
  1362. case self::BATTERY_LEVEL:
  1363. return Pel::tra('Battery Level');
  1364. case self::COPYRIGHT:
  1365. return Pel::tra('Copyright');
  1366. case self::EXPOSURE_TIME:
  1367. return Pel::tra('Exposure Time');
  1368. case self::FNUMBER:
  1369. return Pel::tra('FNumber');
  1370. case self::IPTC_NAA:
  1371. return Pel::tra('IPTC/NAA');
  1372. case self::EXIF_IFD_POINTER:
  1373. return Pel::tra('Exif IFD Pointer');
  1374. case self::INTER_COLOR_PROFILE:
  1375. return Pel::tra('Inter Color Profile');
  1376. case self::EXPOSURE_PROGRAM:
  1377. return Pel::tra('Exposure Program');
  1378. case self::SPECTRAL_SENSITIVITY:
  1379. return Pel::tra('Spectral Sensitivity');
  1380. case self::GPS_INFO_IFD_POINTER:
  1381. return Pel::tra('GPS Info IFD Pointer');
  1382. // case self::GPS_VERSION_ID:
  1383. // return Pel::tra('GPS Version Id');
  1384. // case self::GPS_LATITUDE_REF:
  1385. // return Pel::tra('GPS Latitude Ref');
  1386. // case self::GPS_LATITUDE:
  1387. // return Pel::tra('GPS Latitude');
  1388. // case self::GPS_LONGITUDE_REF:
  1389. // return Pel::tra('GPS Longitude Ref');
  1390. // case self::GPS_LONGITUDE:
  1391. // return Pel::tra('GPS Longitude');
  1392. case self::ISO_SPEED_RATINGS:
  1393. return Pel::tra('ISO Speed Ratings');
  1394. case self::OECF:
  1395. return Pel::tra('OECF');
  1396. case self::EXIF_VERSION:
  1397. return Pel::tra('Exif Version');
  1398. case self::DATE_TIME_ORIGINAL:
  1399. return Pel::tra('Date and Time (original)');
  1400. case self::DATE_TIME_DIGITIZED:
  1401. return Pel::tra('Date and Time (digitized)');
  1402. case self::COMPONENTS_CONFIGURATION:
  1403. return Pel::tra('Components Configuration');
  1404. case self::COMPRESSED_BITS_PER_PIXEL:
  1405. return Pel::tra('Compressed Bits per Pixel');
  1406. case self::SHUTTER_SPEED_VALUE:
  1407. return Pel::tra('Shutter speed');
  1408. case self::APERTURE_VALUE:
  1409. return Pel::tra('Aperture');
  1410. case self::BRIGHTNESS_VALUE:
  1411. return Pel::tra('Brightness');
  1412. case self::EXPOSURE_BIAS_VALUE:
  1413. return Pel::tra('Exposure Bias');
  1414. case self::MAX_APERTURE_VALUE:
  1415. return Pel::tra('Max Aperture Value');
  1416. case self::SUBJECT_DISTANCE:
  1417. return Pel::tra('Subject Distance');
  1418. case self::METERING_MODE:
  1419. return Pel::tra('Metering Mode');
  1420. case self::LIGHT_SOURCE:
  1421. return Pel::tra('Light Source');
  1422. case self::FLASH:
  1423. return Pel::tra('Flash');
  1424. case self::FOCAL_LENGTH:
  1425. return Pel::tra('Focal Length');
  1426. case self::MAKER_NOTE:
  1427. return Pel::tra('Maker Note');
  1428. case self::USER_COMMENT:
  1429. return Pel::tra('User Comment');
  1430. case self::SUB_SEC_TIME:
  1431. return Pel::tra('Subsec Time');
  1432. case self::SUB_SEC_TIME_ORIGINAL:
  1433. return Pel::tra('SubSec Time Original');
  1434. case self::SUB_SEC_TIME_DIGITIZED:
  1435. return Pel::tra('SubSec Time Digitized');
  1436. case self::FLASH_PIX_VERSION:
  1437. return Pel::tra('FlashPix Version');
  1438. case self::COLOR_SPACE:
  1439. return Pel::tra('Color Space');
  1440. case self::PIXEL_X_DIMENSION:
  1441. return Pel::tra('Pixel x-Dimension');
  1442. case self::PIXEL_Y_DIMENSION:
  1443. return Pel::tra('Pixel y-Dimension');
  1444. case self::RELATED_SOUND_FILE:
  1445. return Pel::tra('Related Sound File');
  1446. case self::INTEROPERABILITY_IFD_POINTER:
  1447. return Pel::tra('Interoperability IFD Pointer');
  1448. case self::FLASH_ENERGY:
  1449. return Pel::tra('Flash Energy');
  1450. case self::SPATIAL_FREQUENCY_RESPONSE:
  1451. return Pel::tra('Spatial Frequency Response');
  1452. case self::FOCAL_PLANE_X_RESOLUTION:
  1453. return Pel::tra('Focal Plane x-Resolution');
  1454. case self::FOCAL_PLANE_Y_RESOLUTION:
  1455. return Pel::tra('Focal Plane y-Resolution');
  1456. case self::FOCAL_PLANE_RESOLUTION_UNIT:
  1457. return Pel::tra('Focal Plane Resolution Unit');
  1458. case self::SUBJECT_LOCATION:
  1459. return Pel::tra('Subject Location');
  1460. case self::EXPOSURE_INDEX:
  1461. return Pel::tra('Exposure index');
  1462. case self::SENSING_METHOD:
  1463. return Pel::tra('Sensing Method');
  1464. case self::FILE_SOURCE:
  1465. return Pel::tra('File Source');
  1466. case self::SCENE_TYPE:
  1467. return Pel::tra('Scene Type');
  1468. case self::NEW_CFA_PATTERN:
  1469. return Pel::tra('CFA Pattern');
  1470. case self::SUBJECT_AREA:
  1471. return Pel::tra('Subject Area');
  1472. case self::CUSTOM_RENDERED:
  1473. return Pel::tra('Custom Rendered');
  1474. case self::EXPOSURE_MODE:
  1475. return Pel::tra('Exposure Mode');
  1476. case self::WHITE_BALANCE:
  1477. return Pel::tra('White Balance');
  1478. case self::DIGITAL_ZOOM_RATIO:
  1479. return Pel::tra('Digital Zoom Ratio');
  1480. case self::FOCAL_LENGTH_IN_35MM_FILM:
  1481. return Pel::tra('Focal Length In 35mm Film');
  1482. case self::SCENE_CAPTURE_TYPE:
  1483. return Pel::tra('Scene Capture Type');
  1484. case self::GAIN_CONTROL:
  1485. return Pel::tra('Gain Control');
  1486. case self::CONTRAST:
  1487. return Pel::tra('Contrast');
  1488. case self::SATURATION:
  1489. return Pel::tra('Saturation');
  1490. case self::SHARPNESS:
  1491. return Pel::tra('Sharpness');
  1492. case self::DEVICE_SETTING_DESCRIPTION:
  1493. return Pel::tra('Device Setting Description');
  1494. case self::SUBJECT_DISTANCE_RANGE:
  1495. return Pel::tra('Subject Distance Range');
  1496. case self::IMAGE_UNIQUE_ID:
  1497. return Pel::tra('Image Unique ID');
  1498. default:
  1499. return Pel::fmt('Unknown Tag: 0x%04X', $tag);
  1500. }
  1501. }
  1502.  
  1503.  
  1504. /**
  1505. * Returns a description of an EXIF tag.
  1506. *
  1507. * @param PelTag the tag.
  1508. *
  1509. * @return string the description of the tag which generally
  1510. * explains how the tag is supposed to be used or interpreted. If
  1511. * the tag isn't known, the string 'Unknown Tag :0xTT' will be
  1512. * returned where 'TT' is the hexadecimal representation of the tag.
  1513. */
  1514. function getDescription($tag) {
  1515. switch ($tag) {
  1516. case self::INTEROPERABILITY_INDEX:
  1517. return Pel::tra('Indicates the identification of the Interoperability rule. Use "R98" for stating ExifR98 Rules. Four bytes used including the termination code (NULL). See the separate volume of Recommended Exif Interoperability Rules (ExifR98) for other tags used for ExifR98.');
  1518. case self::INTEROPERABILITY_VERSION:
  1519. return '';
  1520. case self::IMAGE_WIDTH:
  1521. return Pel::tra('The number of columns of image data, equal to the number of pixels per row. In JPEG compressed data a JPEG marker is used instead of this tag.');
  1522. case self::IMAGE_LENGTH:
  1523. return Pel::tra('The number of rows of image data. In JPEG compressed data a JPEG marker is used instead of this tag.');
  1524. case self::BITS_PER_SAMPLE:
  1525. return Pel::tra('The number of bits per image component. In this standard each component of the image is 8 bits, so the value for this tag is 9. See also <SamplesPerPixel>. In JPEG compressed data a JPEG marker is used instead of this tag.');
  1526. case self::COMPRESSION:
  1527. return Pel::tra('The compression scheme used for the image data. When a primary image is JPEG compressed, this designation is not necessary and is omitted. When thumbnails use JPEG compression, this tag value is set to 6.');
  1528. case self::PHOTOMETRIC_INTERPRETATION:
  1529. return Pel::tra('The pixel composition. In JPEG compressed data a JPEG marker is used instead of this tag.');
  1530. case self::FILL_ORDER:
  1531. return('');
  1532. case self::DOCUMENT_NAME:
  1533. return('');
  1534. case self::IMAGE_DESCRIPTION:
  1535. return Pel::tra('A character string giving the title of the image. It may be a comment such as "1988 company picnic" or the like. Two-bytes character codes cannot be used. When a 2-bytes code is necessary, the Exif Private tag <UserComment> is to be used.');
  1536. case self::MAKE:
  1537. return Pel::tra('The manufacturer of the recording equipment. This is the manufacturer of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.');
  1538. case self::MODEL:
  1539. return Pel::tra('The model name or model number of the equipment. This is the model name or number of the DSC, scanner, video digitizer or other equipment that generated the image. When the field is left blank, it is treated as unknown.');
  1540. case self::STRIP_OFFSETS:
  1541. return Pel::tra('For each strip, the byte offset of that strip. It is recommended that this be selected so the number of strip bytes does not exceed 64 Kbytes. With JPEG compressed data this designation is not needed and is omitted. See also <RowsPerStrip> and <StripByteCounts>.');
  1542. case self::ORIENTATION:
  1543. return Pel::tra('The image orientation viewed in terms of rows and columns.');
  1544. case self::SAMPLES_PER_PIXEL:
  1545. return Pel::tra('The number of components per pixel. Since this standard applies to RGB and YCbCr images, the value set for this tag is 3. In JPEG compressed data a JPEG marker is used instead of this tag.');
  1546. case self::ROWS_PER_STRIP:
  1547. return Pel::tra('The number of rows per strip. This is the number of rows in the image of one strip when an image is divided into strips. With JPEG compressed data this designation is not needed and is omitted. See also <RowsPerStrip> and <StripByteCounts>.');
  1548. case self::STRIP_BYTE_COUNTS:
  1549. return Pel::tra('The total number of bytes in each strip. With JPEG compressed data this designation is not needed and is omitted.');
  1550. case self::X_RESOLUTION:
  1551. return Pel::tra('The number of pixels per <ResolutionUnit> in the <ImageWidth> direction. When the image resolution is unknown, 72 [dpi] is designated.');
  1552. case self::Y_RESOLUTION:
  1553. return Pel::tra('The number of pixels per <ResolutionUnit> in the <ImageLength> direction. The same value as <XResolution> is designated.');
  1554. case self::PLANAR_CONFIGURATION:
  1555. return Pel::tra('Indicates whether pixel components are recorded in a chunky or planar format. In JPEG compressed files a JPEG marker is used instead of this tag. If this field does not exist, the TIFF default of 1 (chunky) is assumed.');
  1556. case self::RESOLUTION_UNIT:
  1557. return Pel::tra('The unit for measuring <XResolution> and <YResolution>. The same unit is used for both <XResolution> and <YResolution>. If the image resolution is unknown, 2 (inches) is designated.');
  1558. case self::TRANSFER_FUNCTION:
  1559. return Pel::tra('A transfer function for the image, described in tabular style. Normally this tag is not necessary, since color space is specified in the color space information tag (<ColorSpace>).');
  1560. case self::SOFTWARE:
  1561. return Pel::tra('This tag records the name and version of the software or firmware of the camera or image input device used to generate the image. The detailed format is not specified, but it is recommended that the example shown below be followed. When the field is left blank, it is treated as unknown.');
  1562. case self::DATE_TIME:
  1563. return Pel::tra('The date and time of image creation. In this standard (EXIF-2.1) it is the date and time the file was changed.');
  1564. case self::ARTIST:
  1565. return Pel::tra('This tag records the name of the camera owner, photographer or image creator. The detailed format is not specified, but it is recommended that the information be written as in the example below for ease of Interoperability. When the field is left blank, it is treated as unknown.');
  1566. case self::WHITE_POINT:
  1567. return Pel::tra('The chromaticity of the white point of the image. Normally this tag is not necessary, since color space is specified in the colorspace information tag (<ColorSpace>).');
  1568. case self::PRIMARY_CHROMATICITIES:
  1569. return Pel::tra('The chromaticity of the three primary colors of the image. Normally this tag is not necessary, since colorspace is specified in the colorspace information tag (<ColorSpace>).');
  1570. case self::TRANSFER_RANGE:
  1571. return('');
  1572. case self::JPEG_PROC:
  1573. return('');
  1574. case self::JPEG_INTERCHANGE_FORMAT:
  1575. return Pel::tra('The offset to the start byte (SOI) of JPEG compressed thumbnail data. This is not used for primary image JPEG data.');
  1576. case self::JPEG_INTERCHANGE_FORMAT_LENGTH:
  1577. return Pel::tra('The number of bytes of JPEG compressed thumbnail data. This is not used for primary image JPEG data. JPEG thumbnails are not divided but are recorded as a continuous JPEG bitstream from SOI to EOI. Appn and COM markers should not be recorded. Compressed thumbnails must be recorded in no more than 64 Kbytes, including all other data to be recorded in APP1.');
  1578. case self::YCBCR_COEFFICIENTS:
  1579. return Pel::tra('The matrix coefficients for transformation from RGB to YCbCr image data. No default is given in TIFF; but here the value given in Appendix E, "Color Space Guidelines", is used as the default. The color space is declared in a color space information tag, with the default being the value that gives the optimal image characteristics Interoperability this condition.');
  1580. case self::YCBCR_SUB_SAMPLING:
  1581. return Pel::tra('The sampling ratio of chrominance components in relation to the luminance component. In JPEG compressed data a JPEG marker is used instead of this tag.');
  1582. case self::YCBCR_POSITIONING:
  1583. return Pel::tra('The position of chrominance components in relation to the luminance component. This field is designated only for JPEG compressed data or uncompressed YCbCr data. The TIFF default is 1 (centered); but when Y:Cb:Cr = 4:2:2 it is recommended in this standard that 2 (co-sited) be used to record data, in order to improve the image quality when viewed on TV systems. When this field does not exist, the reader shall assume the TIFF default. In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is recommended. If the reader does not have the capability of supporting both kinds of <YCbCrPositioning>, it shall follow the TIFF default regardless of the value in this field. It is preferable that readers be able to support both centered and co-sited positioning.');
  1584. case self::REFERENCE_BLACK_WHITE:
  1585. return Pel::tra('The reference black point value and reference white point value. No defaults are given in TIFF, but the values below are given as defaults here. The color space is declared in a color space information tag, with the default being the value that gives the optimal image characteristics Interoperability these conditions.');
  1586. case self::RELATED_IMAGE_FILE_FORMAT:
  1587. return('');
  1588. case self::RELATED_IMAGE_WIDTH:
  1589. return('');
  1590. case self::RELATED_IMAGE_LENGTH:
  1591. return('');
  1592. case self::CFA_REPEAT_PATTERN_DIM:
  1593. return('');
  1594. case self::CFA_PATTERN:
  1595. return Pel::tra('Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used. It does not apply to all sensing methods.');
  1596. case self::BATTERY_LEVEL:
  1597. return('');
  1598. case self::COPYRIGHT:
  1599. return Pel::tra('Copyright information. In this standard the tag is used to indicate both the photographer and editor copyrights. It is the copyright notice of the person or organization claiming rights to the image. The Interoperability copyright statement including date and rights should be written in this field; e.g., "Copyright, John Smith, 19xx. All rights reserved.". In this standard the field records both the photographer and editor copyrights, with each recorded in a separate part of the statement. When there is a clear distinction between the photographer and editor copyrights, these are to be written in the order of photographer followed by editor copyright, separated by NULL (in this case, since the statement also ends with a NULL, there are two NULL codes) (see example 1). When only the photographer is given, it is terminated by one NULL code (see example 2). When only the editor copyright is given, the photographer copyright part consists of one space followed by a terminating NULL code, then the editor copyright is given (see example 3). When the field is left blank, it is treated as unknown.');
  1600. case self::EXPOSURE_TIME:
  1601. return Pel::tra('Exposure time, given in seconds (sec).');
  1602. case self::FNUMBER:
  1603. return Pel::tra('The F number.');
  1604. case self::IPTC_NAA:
  1605. return('');
  1606. case self::EXIF_IFD_POINTER:
  1607. return Pel::tra('A pointer to the Exif IFD. Interoperability, Exif IFD has the same structure as that of the IFD specified in TIFF. ordinarily, however, it does not contain image data as in the case of TIFF.');
  1608. case self::INTER_COLOR_PROFILE:
  1609. return('');
  1610. case self::EXPOSURE_PROGRAM:
  1611. return Pel::tra('The class of the program used by the camera to set exposure when the picture is taken.');
  1612. case self::SPECTRAL_SENSITIVITY:
  1613. return Pel::tra('Indicates the spectral sensitivity of each channel of the camera used. The tag value is an ASCII string compatible with the standard developed by the ASTM Technical committee.');
  1614. case self::GPS_INFO_IFD_POINTER:
  1615. return Pel::tra('A pointer to the GPS Info IFD. The Interoperability structure of the GPS Info IFD, like that of Exif IFD, has no image data.');
  1616. // case self::GPS_VERSION_ID:
  1617. // return Pel::tra('Indicates the version of <GPSInfoIFD>. The version is given as 2.0.0.0. This tag is mandatory when <GPSInfo> tag is present. (Note: The <GPSVersionID tag is given in bytes, unlike the <ExifVersion> tag. When the version is 2.0.0.0, the tag value is 02000000.H).');
  1618. // case self::GPS_LATITUDE_REF:
  1619. // return ('Indicates whether the latitude is north or south latitude. The ASCII value \'N\' indicates north latitude, and \'S\' is south latitude.');
  1620. // case self::GPS_LATITUDE:
  1621. // return ('Indicates the latitude. The latitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively. When degrees, minutes and seconds are expressed, the format is dd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is dd/1,mmmm/100,0/1.');
  1622. // case self::GPS_LONGITUDE_REF:
  1623. // return ("Indicates whether the longitude is east or west longitude. ".
  1624. // 'ASCII \'E\' indicates east longitude, and \'W\' is west longitude.');
  1625. // case self::GPS_LONGITUDE:
  1626. // return ('Indicates the longitude. The longitude is expressed as three RATIONAL values giving the degrees, minutes, and seconds, respectively. When degrees, minutes and seconds are expressed, the format is ddd/1,mm/1,ss/1. When degrees and minutes are used and, for example, fractions of minutes are given up to two decimal places, the format is ddd/1,mmmm/100,0/1.');
  1627. case self::ISO_SPEED_RATINGS:
  1628. return Pel::tra('Indicates the ISO Speed and ISO Latitude of the camera or input device as specified in ISO 12232.');
  1629. case self::OECF:
  1630. return Pel::tra('Indicates the Opto-Electoric Conversion Function (OECF) specified in ISO 14524. <OECF> is the relationship between the camera optical input and the image values.');
  1631. case self::EXIF_VERSION:
  1632. return Pel::tra('The version of this standard supported. Nonexistence of this field is taken to mean non-conformance to the standard.');
  1633. case self::DATE_TIME_ORIGINAL:
  1634. return Pel::tra('The date and time when the original image data was generated. For a digital still camera the date and time the picture was taken are recorded.');
  1635. case self::DATE_TIME_DIGITIZED:
  1636. return Pel::tra('The date and time when the image was stored as digital data. ');
  1637. case self::COMPONENTS_CONFIGURATION:
  1638. return Pel::tra('Information specific to compressed data. The channels of each component are arranged in order from the 1st component to the 4th. For uncompressed data the data arrangement is given in the <PhotometricInterpretation> tag. However, since <PhotometricInterpretation> can only express the order of Y, Cb and Cr, this tag is provided for cases when compressed data uses components other than Y, Cb, and Cr and to enable support of other sequences.');
  1639. case self::COMPRESSED_BITS_PER_PIXEL:
  1640. return Pel::tra('Information specific to compressed data. The compression mode used for a compressed image is indicated in unit bits per pixel.');
  1641. case self::SHUTTER_SPEED_VALUE:
  1642. return Pel::tra('Shutter speed. The unit is the APEX (Additive System of Photographic Exposure) setting (see Appendix C).');
  1643. case self::APERTURE_VALUE:
  1644. return Pel::tra('The lens aperture. The unit is the APEX value.');
  1645. case self::BRIGHTNESS_VALUE:
  1646. return Pel::tra('The value of brightness. The unit is the APEX value. Ordinarily it is given in the range of -99.99 to 99.99.');
  1647. case self::EXPOSURE_BIAS_VALUE:
  1648. return Pel::tra('The exposure bias. The units is the APEX value. Ordinarily it is given in the range of -99.99 to 99.99.');
  1649. case self::MAX_APERTURE_VALUE:
  1650. return Pel::tra('The smallest F number of the lens. The unit is the APEX value. Ordinarily it is given in the range of 00.00 to 99.99, but it is not limited to this range.');
  1651. case self::SUBJECT_DISTANCE:
  1652. return Pel::tra('The distance to the subject, given in meters.');
  1653. case self::METERING_MODE:
  1654. return Pel::tra('The metering mode.');
  1655. case self::LIGHT_SOURCE:
  1656. return Pel::tra('The kind of light source.');
  1657. case self::FLASH:
  1658. return Pel::tra('This tag is recorded when an image is taken using a strobe light (flash).');
  1659. case self::FOCAL_LENGTH:
  1660. return Pel::tra('The actual focal length of the lens, in mm. Conversion is not made to the focal length of a 35 mm film camera.');
  1661. case self::MAKER_NOTE:
  1662. return Pel::tra('A tag for manufacturers of Exif writers to record any desired information. The contents are up to the manufacturer.');
  1663. case self::USER_COMMENT:
  1664. return Pel::tra('A tag for Exif users to write keywords or comments on the image besides those in <ImageDescription>, and without the character code limitations of the <ImageDescription> tag. The character code used in the <UserComment> tag is identified based on an ID code in a fixed 8-byte area at the start of the tag data area. The unused portion of the area is padded with NULL ("00.h"). ID codes are assigned by means of registration. The designation method and references for each character code are given in Table 6. The value of CountN is determined based on the 8 bytes in the character code area and the number of bytes in the user comment part. Since the TYPE is not ASCII, NULL termination is not necessary (see Fig. 9). The ID code for the <UserComment> area may be a Defined code such as JIS or ASCII, or may be Undefined. The Undefined name is UndefinedText, and the ID code is filled with 8 bytes of all "NULL" ("00.H"). An Exif reader that reads the <UserComment> tag must have a function for determining the ID code. This function is not required in Exif readers that do not use the <UserComment> tag (see Table 7). When a <UserComment> area is set aside, it is recommended that the ID code be ASCII and that the following user comment part be filled with blank characters [20.H].');
  1665. case self::SUB_SEC_TIME:
  1666. return Pel::tra('A tag used to record fractions of seconds for the <DateTime> tag.');
  1667. case self::SUB_SEC_TIME_ORIGINAL:
  1668. return Pel::tra('A tag used to record fractions of seconds for the <DateTimeOriginal> tag.');
  1669. case self::SUB_SEC_TIME_DIGITIZED:
  1670. return Pel::tra('A tag used to record fractions of seconds for the <DateTimeDigitized> tag.');
  1671. case self::FLASH_PIX_VERSION:
  1672. return Pel::tra('The FlashPix format version supported by a FPXR file.');
  1673. case self::COLOR_SPACE:
  1674. return Pel::tra('The color space information tag is always recorded as the color space specifier. Normally sRGB (=1) is used to define the color space based on the PC monitor conditions and environment. If a color space other than sRGB is used, Uncalibrated (=FFFF.H) is set. Image data recorded as Uncalibrated can be treated as sRGB when it is converted to FlashPix. On sRGB see Appendix E.');
  1675. case self::PIXEL_X_DIMENSION:
  1676. return Pel::tra('Information specific to compressed data. When a compressed file is recorded, the valid width of the meaningful image must be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. For details see section 2.8.1 and Appendix F.');
  1677. case self::PIXEL_Y_DIMENSION:
  1678. return Pel::tra('Information specific to compressed data. When a compressed file is recorded, the valid height of the meaningful image must be recorded in this tag, whether or not there is padding data or a restart marker. This tag should not exist in an uncompressed file. For details see section 2.8.1 and Appendix F. Since data padding is unnecessary in the vertical direction, the number of lines recorded in this valid image height tag will in fact be the same as that recorded in the SOF.');
  1679. case self::RELATED_SOUND_FILE:
  1680. return Pel::tra('This tag is used to record the name of an audio file related to the image data. The only relational information recorded here is the Exif audio file name and extension (an ASCII string consisting of 8 characters + \'.\' + 3 characters). The path is not recorded. Stipulations on audio are given in section 3.6.3. File naming conventions are given in section 3.7.1. When using this tag, audio files must be recorded in conformance to the Exif audio format. Writers are also allowed to store the data such as Audio within APP2 as FlashPix extension stream data. Audio files must be recorded in conformance to the Exif audio format. The mapping of Exif image files and audio files is done in any of the three ways shown in Table 8. If multiple files are mapped to one file as in [2] or [3] of this table, the above format is used to record just one audio file name. If there are multiple audio files, the first recorded file is given. In the case of [3] in Table 8, for example, for the Exif image file "DSC00001.JPG" only "SND00001.WAV" is given as the related Exif audio file. When there are three Exif audio files "SND00001.WAV", "SND00002.WAV" and "SND00003.WAV", the Exif image file name for each of them, "DSC00001.JPG", is indicated. By combining multiple relational information, a variety of playback possibilities can be supported. The method of using relational information is left to the implementation on the playback side. Since this information is an ASCII character string, it is terminated by NULL. When this tag is used to map audio files, the relation of the audio file to image data must also be indicated on the audio file end.');
  1681. case self::INTEROPERABILITY_IFD_POINTER:
  1682. return Pel::tra('Interoperability IFD is composed of tags which stores the information to ensure the Interoperability and pointed by the following tag located in Exif IFD. The Interoperability structure of Interoperability IFD is the same as TIFF defined IFD structure but does not contain the image data characteristically compared with normal TIFF IFD.');
  1683. case self::FLASH_ENERGY:
  1684. return Pel::tra('Indicates the strobe energy at the time the image is captured, as measured in Beam Candle Power Seconds (BCPS).');
  1685. case self::SPATIAL_FREQUENCY_RESPONSE:
  1686. return Pel::tra('This tag records the camera or input device spatial frequency table and SFR values in the direction of image width, image height, and diagonal direction, as specified in ISO 12233.');
  1687. case self::FOCAL_PLANE_X_RESOLUTION:
  1688. return Pel::tra('Indicates the number of pixels in the image width (X) direction per <FocalPlaneResolutionUnit> on the camera focal plane.');
  1689. case self::FOCAL_PLANE_Y_RESOLUTION:
  1690. return Pel::tra('Indicates the number of pixels in the image height (V) direction per <FocalPlaneResolutionUnit> on the camera focal plane.');
  1691. case self::FOCAL_PLANE_RESOLUTION_UNIT:
  1692. return Pel::tra('Indicates the unit for measuring <FocalPlaneXResolution> and <FocalPlaneYResolution>. This value is the same as the <ResolutionUnit>.');
  1693. case self::SUBJECT_LOCATION:
  1694. return Pel::tra('Indicates the location of the main subject in the scene. The value of this tag represents the pixel at the center of the main subject relative to the left edge, prior to rotation processing as per the <Rotation> tag. The first value indicates the X column number and second indicates the Y row number.');
  1695. case self::EXPOSURE_INDEX:
  1696. return Pel::tra('Indicates the exposure index selected on the camera or input device at the time the image is captured.');
  1697. case self::SENSING_METHOD:
  1698. return Pel::tra('Indicates the image sensor type on the camera or input device.');
  1699. case self::FILE_SOURCE:
  1700. return Pel::tra('Indicates the image source. If a DSC recorded the image, this tag value of this tag always be set to 3, indicating that the image was recorded on a DSC.');
  1701. case self::SCENE_TYPE:
  1702. return Pel::tra('Indicates the type of scene. If a DSC recorded the image, this tag value must always be set to 1, indicating that the image was directly photographed.');
  1703. case self::NEW_CFA_PATTERN:
  1704. return Pel::tra('Indicates the color filter array (CFA) geometric pattern of the image sensor when a one-chip color area sensor is used. It does not apply to all sensing methods.');
  1705. case self::SUBJECT_AREA:
  1706. return Pel::tra('This tag indicates the location and area of the main subject in the overall scene.');
  1707. case self::CUSTOM_RENDERED:
  1708. return Pel::tra('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.');
  1709. case self::EXPOSURE_MODE:
  1710. return Pel::tra('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.');
  1711. case self::WHITE_BALANCE:
  1712. return Pel::tra('This tag indicates the white balance mode set when the image was shot.');
  1713. case self::DIGITAL_ZOOM_RATIO:
  1714. return Pel::tra('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.');
  1715. case self::FOCAL_LENGTH_IN_35MM_FILM:
  1716. return Pel::tra('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.');
  1717. case self::SCENE_CAPTURE_TYPE:
  1718. return Pel::tra('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.');
  1719. case self::GAIN_CONTROL:
  1720. return Pel::tra('This tag indicates the degree of overall image gain adjustment.');
  1721. case self::CONTRAST:
  1722. return Pel::tra('This tag indicates the direction of contrast processing applied by the camera when the image was shot.');
  1723. case self::SATURATION:
  1724. return Pel::tra('This tag indicates the direction of saturation processing applied by the camera when the image was shot.');
  1725. case self::SHARPNESS:
  1726. return Pel::tra('This tag indicates the direction of sharpness processing applied by the camera when the image was shot.');
  1727. case self::DEVICE_SETTING_DESCRIPTION:
  1728. return Pel::tra('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.');
  1729. case self::SUBJECT_DISTANCE_RANGE:
  1730. return Pel::tra('This tag indicates the distance to the subject.');
  1731. case self::IMAGE_UNIQUE_ID:
  1732. return Pel::tra('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.');
  1733. default:
  1734. return Pel::fmt('Unknown Tag: 0x%04X', $tag);
  1735. }
  1736. }
  1737. }
  1738. ?>

SourceForge.net Logo Documentation generated on Fri, 18 Feb 2005 01:43:26 +0100 by phpDocumentor 1.3.0RC3