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

SourceForge.net Logo Documentation generated on Wed, 21 Jul 2004 19:13:24 +0200 by phpDocumentor 1.3.0RC3