NextGEN Gallery – WordPress Gallery Plugin - Version 3.21

Version Description

  • 01.19.2022
  • NEW: Introducing constant NGG_DISABLE_PHOTOCRATI_CACHE_TRACKER which tracks all NGG transients when using an external object cache.
  • NEW: Adding an option to separate generated images with dashes instead of underscores for better SEO.
  • Changed: Removed the "Custom styles" feature which was deprecated in December of 2020.
  • Fixed: PHP 8.1 warnings of deprecations.
Download this release

Release Info

Developer photocrati
Plugin Icon 128x128 NextGEN Gallery – WordPress Gallery Plugin
Version 3.21
Comparing to
See all releases

Code changes from version 3.18 to 3.21

Files changed (121) hide show
  1. changelog.txt +6 -0
  2. composer.lock +10 -9
  3. nggallery.php +15 -141
  4. non_pope/class.nextgen_style_manager.php +0 -302
  5. non_pope/class.photocrati_settings_manager.php +4 -0
  6. non_pope/class.photocrati_transient_manager.php +5 -2
  7. products/photocrati_nextgen/modules/ajax/module.ajax.php +0 -1
  8. products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php +0 -1
  9. products/photocrati_nextgen/modules/datamapper/package.module.datamapper.php +1 -1
  10. products/photocrati_nextgen/modules/marketing/module.marketing.php +36 -1
  11. products/photocrati_nextgen/modules/marketing/templates/admin-header-banner.php +43 -0
  12. products/photocrati_nextgen/modules/nextgen_admin/package.module.nextgen_admin.php +15 -9
  13. products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php +5 -4
  14. products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact/default-view.php +28 -13
  15. products/photocrati_nextgen/modules/nextgen_basic_gallery/package.module.nextgen_basic_gallery.php +1 -3
  16. products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php +0 -1
  17. products/photocrati_nextgen/modules/nextgen_basic_singlepic/package.module.nextgen_basic_singlepic.php +0 -1
  18. products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php +0 -1
  19. products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php +112 -33
  20. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/AUTHORS +53 -0
  21. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/COPYING +340 -0
  22. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/autoload.php +36 -0
  23. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/da.po +1182 -0
  24. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/de.po +1525 -0
  25. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/es.po +2494 -0
  26. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/fr.po +1562 -0
  27. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/ja.po +1190 -0
  28. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/nl.po +1181 -0
  29. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/pel.pot +1165 -0
  30. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/pl.po +3053 -0
  31. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/Pel.php +360 -0
  32. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelCanonMakerNotes.php +341 -0
  33. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelConvert.php +396 -0
  34. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelDataWindow.php +542 -0
  35. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelDataWindowOffsetException.php +35 -0
  36. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelDataWindowWindowException.php +43 -0
  37. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntry.php +251 -0
  38. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryAscii.php +125 -0
  39. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryByte.php +92 -0
  40. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryCopyright.php +171 -0
  41. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryException.php +88 -0
  42. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryLong.php +115 -0
  43. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryNumber.php +280 -0
  44. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryRational.php +174 -0
  45. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySByte.php +97 -0
  46. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySLong.php +97 -0
  47. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySRational.php +150 -0
  48. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySShort.php +806 -0
  49. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryShort.php +409 -0
  50. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryTime.php +318 -0
  51. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryUndefined.php +172 -0
  52. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryUserComment.php +140 -0
  53. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryVersion.php +166 -0
  54. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryWindowsString.php +162 -0
  55. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelException.php +61 -0
  56. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelExif.php +151 -0
  57. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelFormat.php +226 -0
  58. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelIfd.php +1568 -0
  59. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelIfdException.php +47 -0
  60. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelIllegalFormatException.php +51 -0
  61. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelInvalidArgumentException.php +46 -0
  62. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelInvalidDataException.php +46 -0
  63. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpeg.php +659 -0
  64. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegComment.php +119 -0
  65. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegContent.php +77 -0
  66. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegInvalidMarkerException.php +55 -0
  67. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegMarker.php +534 -0
  68. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelMakerNotes.php +79 -0
  69. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelMakerNotesMalformedException.php +51 -0
  70. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelOverflowException.php +67 -0
  71. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelTag.php +2591 -0
  72. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelTiff.php +310 -0
  73. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelUnexpectedFormatException.php +74 -0
  74. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelWrongComponentCountException.php +65 -0
  75. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/CHANGELOG.md +0 -562
  76. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/INSTALL.md +0 -95
  77. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/README.markdown +0 -109
  78. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/composer.json +0 -39
  79. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/phpcs.xml +0 -25
  80. products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/phpunit.xml +0 -21
  81. products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php +6 -5
  82. products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php +0 -12
  83. products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php +1 -92
  84. products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.css +0 -9
  85. products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.js +1 -31
  86. products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.css +1 -1
  87. products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.js +1 -1
  88. products/photocrati_nextgen/modules/nextgen_other_options/templates/misc_tab.php +3 -0
  89. products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php +0 -76
  90. products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php +5 -9
  91. products/photocrati_nextgen/modules/ngglegacy/admin/album.php +5 -2
  92. products/photocrati_nextgen/modules/ngglegacy/lib/gd.thumbnail.inc.php +6 -2
  93. products/photocrati_nextgen/modules/ngglegacy/lib/meta.php +10 -9
  94. products/photocrati_nextgen/modules/ngglegacy/lib/tags.php +5 -4
  95. products/photocrati_nextgen/modules/router/package.module.router.php +5 -3
  96. products/photocrati_nextgen/modules/widget/package.module.widget.php +1 -1
  97. readme.txt +8 -2
  98. vendor/autoload.php +1 -1
  99. vendor/composer/ClassLoader.php +1 -1
  100. vendor/composer/autoload_files.php +1 -1
  101. vendor/composer/autoload_real.php +14 -9
  102. vendor/composer/autoload_static.php +4 -4
  103. vendor/composer/installed.json +10 -9
  104. vendor/composer/installed.php +3 -3
  105. vendor/ezyang/htmlpurifier/README.md +1 -1
  106. vendor/ezyang/htmlpurifier/VERSION +1 -1
  107. vendor/ezyang/htmlpurifier/composer.json +0 -3
  108. vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php +3 -4
  109. vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php +1 -0
  110. vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php +1 -1
  111. vendor/ezyang/htmlpurifier/library/HTMLPurifier.php +3 -3
  112. vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php +2 -0
  113. vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php +16 -0
  114. vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php +1 -1
  115. vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php +2 -2
  116. vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php +2 -1
  117. vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php +1 -4
  118. vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php +3 -1
  119. vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php +3 -0
  120. vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.min.css +0 -1
  121. vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.min.js +0 -1
changelog.txt CHANGED
@@ -1,6 +1,12 @@
1
  NextGEN Gallery
2
  by Imagely
3
 
 
 
 
 
 
 
4
  = V3.18 - 12.08.2021
5
  * NEW: Added a constant "NGG_DISABLE_SHORTCODE_MANAGER" to disable content protection workarounds that can be a source of incompatibility itself.
6
  * NEW: Added notice to users that ctypes methods are required by NextGEN Gallery.
1
  NextGEN Gallery
2
  by Imagely
3
 
4
+ = V3.21 - 01.19.2022
5
+ * NEW: Introducing constant NGG_DISABLE_PHOTOCRATI_CACHE_TRACKER which tracks all NGG transients when using an external object cache.
6
+ * NEW: Adding an option to separate generated images with dashes instead of underscores for better SEO.
7
+ * Changed: Removed the "Custom styles" feature which was deprecated in December of 2020.
8
+ * Fixed: PHP 8.1 warnings of deprecations.
9
+
10
  = V3.18 - 12.08.2021
11
  * NEW: Added a constant "NGG_DISABLE_SHORTCODE_MANAGER" to disable content protection workarounds that can be a source of incompatibility itself.
12
  * NEW: Added notice to users that ctypes methods are required by NextGEN Gallery.
composer.lock CHANGED
@@ -8,16 +8,16 @@
8
  "packages": [
9
  {
10
  "name": "ezyang/htmlpurifier",
11
- "version": "v4.13.0",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/ezyang/htmlpurifier.git",
15
- "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75"
16
  },
17
  "dist": {
18
  "type": "zip",
19
- "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
20
- "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
21
  "shasum": "",
22
  "mirrors": [
23
  {
@@ -29,9 +29,6 @@
29
  "require": {
30
  "php": ">=5.2"
31
  },
32
- "require-dev": {
33
- "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
34
- },
35
  "type": "library",
36
  "autoload": {
37
  "psr-0": {
@@ -60,7 +57,11 @@
60
  "keywords": [
61
  "html"
62
  ],
63
- "time": "2020-06-29T00:56:53+00:00"
 
 
 
 
64
  },
65
  {
66
  "name": "imagely/pope-framework",
@@ -172,5 +173,5 @@
172
  "prefer-lowest": false,
173
  "platform": [],
174
  "platform-dev": [],
175
- "plugin-api-version": "2.1.0"
176
  }
8
  "packages": [
9
  {
10
  "name": "ezyang/htmlpurifier",
11
+ "version": "v4.14.0",
12
  "source": {
13
  "type": "git",
14
  "url": "https://github.com/ezyang/htmlpurifier.git",
15
+ "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75"
16
  },
17
  "dist": {
18
  "type": "zip",
19
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
20
+ "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
21
  "shasum": "",
22
  "mirrors": [
23
  {
29
  "require": {
30
  "php": ">=5.2"
31
  },
 
 
 
32
  "type": "library",
33
  "autoload": {
34
  "psr-0": {
57
  "keywords": [
58
  "html"
59
  ],
60
+ "support": {
61
+ "issues": "https://github.com/ezyang/htmlpurifier/issues",
62
+ "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0"
63
+ },
64
+ "time": "2021-12-25T01:21:49+00:00"
65
  },
66
  {
67
  "name": "imagely/pope-framework",
173
  "prefer-lowest": false,
174
  "platform": [],
175
  "platform-dev": [],
176
+ "plugin-api-version": "2.2.0"
177
  }
nggallery.php CHANGED
@@ -4,7 +4,7 @@ if(preg_match('#' . basename(__FILE__) . '#', $_SERVER['PHP_SELF'])) { die('You
4
  /**
5
  * Plugin Name: NextGEN Gallery
6
  * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 30 million downloads.
7
- * Version: 3.18
8
  * Author: Imagely
9
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
10
  * Author URI: https://www.imagely.com
@@ -98,7 +98,7 @@ class C_NextGEN_Bootstrap
98
  fastcgi_finish_request();
99
  }
100
  else {
101
- throw new E_Clean_Exit;
102
  }
103
  }
104
  elseif (!($exception instanceof E_Clean_Exit)) {
@@ -218,9 +218,6 @@ class C_NextGEN_Bootstrap
218
  include_once('non_pope/class.photocrati_resource_manager.php');
219
  C_Photocrati_Resource_Manager::init();
220
 
221
- // Load the style manager
222
- include_once('non_pope/class.nextgen_style_manager.php');
223
-
224
  // Load the shortcode manager
225
  include_once('non_pope/class.nextgen_shortcode_manager.php');
226
  C_NextGen_Shortcode_Manager::get_instance();
@@ -430,16 +427,10 @@ class C_NextGEN_Bootstrap
430
  // Handle activation redirect to overview page
431
  add_action('init', array($this, 'handle_activation_redirect'));
432
 
433
- // Register our test suite
434
- add_filter('simpletest_suites', array(&$this, 'add_testsuite'));
435
-
436
  // Ensure that settings manager is saved as an array
437
  add_filter('pre_update_option_' . $this->_settings_option_name, array($this, 'persist_settings'));
438
  add_filter('pre_update_site_option_' . $this->_settings_option_name, array($this, 'persist_settings'));
439
 
440
- // If the selected stylesheet is using an unsafe path, then notify the user
441
- add_action('all_admin_notices', array(&$this, 'display_stylesheet_notice'));
442
-
443
  // Delete displayed gallery transients periodically
444
  if (NGG_CRON_ENABLED) {
445
  add_filter('cron_schedules', array(&$this, 'add_ngg_schedule'));
@@ -564,26 +555,6 @@ class C_NextGEN_Bootstrap
564
  return $settings;
565
  }
566
 
567
- /**
568
- * Displays a notice to the user that the current stylesheet location is unsafe
569
- */
570
- function display_stylesheet_notice()
571
- {
572
- if (C_NextGen_Style_Manager::get_instance()->is_directory_unsafe()) {
573
- $styles = C_NextGen_Style_Manager::get_instance();
574
- $filename = $styles->get_selected_stylesheet();
575
- $abspath = $styles->find_selected_stylesheet_abspath();
576
- $newpath = $styles->new_dir;
577
-
578
- echo "<div class='updated error'>
579
- <h3>WARNING: NextGEN Gallery Stylesheet NOT Upgrade-safe</h3>
580
- <p>
581
- <strong>{$filename}</strong> is currently stored in <strong>{$abspath}</strong>, which isn't upgrade-safe. Please move the stylesheet to
582
- <strong>{$newpath}</strong> to ensure that your customizations persist after updates.
583
- </p></div>";
584
- }
585
- }
586
-
587
  /**
588
  * Updates all modules
589
  */
@@ -712,7 +683,7 @@ class C_NextGEN_Bootstrap
712
  define('NGG_PRODUCT_URL', path_join(str_replace("\\" , '/', NGG_PLUGIN_URL), 'products'));
713
  define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
714
  define('NGG_PLUGIN_STARTED_AT', microtime());
715
- define('NGG_PLUGIN_VERSION', '3.18');
716
 
717
  define(
718
  'NGG_SCRIPT_VERSION',
@@ -721,16 +692,6 @@ class C_NextGEN_Bootstrap
721
  : NGG_PLUGIN_VERSION
722
  );
723
 
724
- if (!defined('NGG_HIDE_STRICT_ERRORS')) {
725
- define('NGG_HIDE_STRICT_ERRORS', TRUE);
726
- }
727
-
728
- // Should we display E_STRICT errors?
729
- if (NGG_HIDE_STRICT_ERRORS) {
730
- $level = error_reporting();
731
- if ($level != 0) error_reporting($level & ~E_STRICT);
732
- }
733
-
734
  // Should we display NGG debugging information?
735
  if (!defined('NGG_DEBUG')) {
736
  define('NGG_DEBUG', FALSE);
@@ -802,42 +763,13 @@ class C_NextGEN_Bootstrap
802
  }, -10);
803
  }
804
 
805
- /**
806
- * Defines the NextGEN Test Suite
807
- * @param array $suites
808
- * @return array
809
- */
810
- function add_testsuite($suites=array())
811
- {
812
- $tests_dir = NGG_TESTS_DIR;
813
-
814
- if (file_exists($tests_dir)) {
815
-
816
- // Include mock objects
817
- // TODO: These mock objects should be moved to the appropriate
818
- // test folder
819
- require_once(path_join($tests_dir, 'mocks.php'));
820
-
821
- // Define the NextGEN Test Suite
822
- $suites['nextgen'] = array(
823
- // path_join($tests_dir, 'mvc'),
824
- path_join($tests_dir, 'datamapper'),
825
- path_join($tests_dir, 'nextgen_data'),
826
- path_join($tests_dir, 'gallery_display')
827
- );
828
- }
829
-
830
- return $suites;
831
- }
832
-
833
-
834
  /**
835
  * Returns the path to a file within the plugin root folder
836
  *
837
  * @param string $file_name
838
  * @return string
839
  */
840
- function file_path($file_name=NULL)
841
  {
842
  $path = dirname(__FILE__);
843
  if ($file_name != null)
@@ -852,88 +784,30 @@ class C_NextGEN_Bootstrap
852
  * @param string|null $dir (optional)
853
  * @return string
854
  */
855
- function directory_path($dir=NULL)
856
  {
857
  return $this->file_path($dir);
858
  }
859
 
860
  /**
861
- * Determines the location of the plugin - within a theme or plugin
862
- * @return string
863
- */
864
- function get_plugin_location()
865
- {
866
- return 'plugin';
867
- }
868
-
869
-
870
- /**
871
- * Gets the URI for a particular path
872
- * @param string $path
873
- * @param boolean $url_encode
874
  * @return string
875
  */
876
- function path_uri($path = null, $url_encode = false)
877
  {
878
- $location = $this->get_plugin_location();
879
- $uri = null;
880
 
881
- $path = str_replace(array('/', '\\'), '/', $path);
 
 
882
 
883
- if ($url_encode)
884
- {
885
- $path_list = explode('/', $path);
886
-
887
- foreach ($path_list as $index => $path_item)
888
- {
889
- $path_list[$index] = urlencode($path_item);
890
- }
891
-
892
- $path = implode('/', $path_list);
893
- }
894
-
895
- if ($location == 'theme')
896
- {
897
- $theme_uri = get_stylesheet_directory_uri();
898
-
899
- $uri = $theme_uri . 'nextgen-gallery';
900
-
901
- if ($path != null)
902
- {
903
- $uri .= '/' . $path;
904
- }
905
- }
906
- else
907
- {
908
- // XXX Note, paths could not match but STILL being contained in the theme (i.e. WordPress returns the wrong path for the theme directory, either with wrong formatting or wrong encoding)
909
- $base = basename(dirname(__FILE__));
910
-
911
- if ($base != 'nextgen-gallery')
912
- {
913
- // XXX this is needed when using symlinks, if the user renames the plugin folder everything will break though
914
- $base = 'nextgen-gallery';
915
- }
916
-
917
- if ($path != null)
918
- {
919
- $base .= '/' . $path;
920
- }
921
-
922
- $uri = plugins_url($base);
923
- }
924
 
925
  return $uri;
926
  }
927
-
928
- /**
929
- * Returns the URI for a particular file
930
- * @param string $file_name
931
- * @return string
932
- */
933
- function file_uri($file_name = NULL)
934
- {
935
- return $this->path($file_name);
936
- }
937
  }
938
 
939
  new C_NextGEN_Bootstrap();
4
  /**
5
  * Plugin Name: NextGEN Gallery
6
  * Description: The most popular gallery plugin for WordPress and one of the most popular plugins of all time with over 30 million downloads.
7
+ * Version: 3.21
8
  * Author: Imagely
9
  * Plugin URI: https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/
10
  * Author URI: https://www.imagely.com
98
  fastcgi_finish_request();
99
  }
100
  else {
101
+ exit();
102
  }
103
  }
104
  elseif (!($exception instanceof E_Clean_Exit)) {
218
  include_once('non_pope/class.photocrati_resource_manager.php');
219
  C_Photocrati_Resource_Manager::init();
220
 
 
 
 
221
  // Load the shortcode manager
222
  include_once('non_pope/class.nextgen_shortcode_manager.php');
223
  C_NextGen_Shortcode_Manager::get_instance();
427
  // Handle activation redirect to overview page
428
  add_action('init', array($this, 'handle_activation_redirect'));
429
 
 
 
 
430
  // Ensure that settings manager is saved as an array
431
  add_filter('pre_update_option_' . $this->_settings_option_name, array($this, 'persist_settings'));
432
  add_filter('pre_update_site_option_' . $this->_settings_option_name, array($this, 'persist_settings'));
433
 
 
 
 
434
  // Delete displayed gallery transients periodically
435
  if (NGG_CRON_ENABLED) {
436
  add_filter('cron_schedules', array(&$this, 'add_ngg_schedule'));
555
  return $settings;
556
  }
557
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
558
  /**
559
  * Updates all modules
560
  */
683
  define('NGG_PRODUCT_URL', path_join(str_replace("\\" , '/', NGG_PLUGIN_URL), 'products'));
684
  define('NGG_MODULE_URL', path_join(str_replace("\\", '/', NGG_PRODUCT_URL), 'photocrati_nextgen/modules'));
685
  define('NGG_PLUGIN_STARTED_AT', microtime());
686
+ define('NGG_PLUGIN_VERSION', '3.21');
687
 
688
  define(
689
  'NGG_SCRIPT_VERSION',
692
  : NGG_PLUGIN_VERSION
693
  );
694
 
 
 
 
 
 
 
 
 
 
 
695
  // Should we display NGG debugging information?
696
  if (!defined('NGG_DEBUG')) {
697
  define('NGG_DEBUG', FALSE);
763
  }, -10);
764
  }
765
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
766
  /**
767
  * Returns the path to a file within the plugin root folder
768
  *
769
  * @param string $file_name
770
  * @return string
771
  */
772
+ function file_path($file_name = NULL)
773
  {
774
  $path = dirname(__FILE__);
775
  if ($file_name != null)
784
  * @param string|null $dir (optional)
785
  * @return string
786
  */
787
+ function directory_path($dir = NULL)
788
  {
789
  return $this->file_path($dir);
790
  }
791
 
792
  /**
793
+ * Determine the path to the NGG directory.
794
+ *
795
+ * @TODO Remove this, it's silly.
 
 
 
 
 
 
 
 
 
 
796
  * @return string
797
  */
798
+ function path_uri()
799
  {
800
+ // Note: paths could not match but STILL being contained in the theme (i.e. WordPress returns the wrong path for the theme directory, either with wrong formatting or wrong encoding)
801
+ $base = basename(dirname(__FILE__));
802
 
803
+ // This is needed when using symlinks, if the user renames the plugin folder everything will break though
804
+ if ($base != 'nextgen-gallery')
805
+ $base = 'nextgen-gallery';
806
 
807
+ $uri = plugins_url($base);
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
808
 
809
  return $uri;
810
  }
 
 
 
 
 
 
 
 
 
 
811
  }
812
 
813
  new C_NextGEN_Bootstrap();
non_pope/class.nextgen_style_manager.php DELETED
@@ -1,302 +0,0 @@
1
- <?php
2
-
3
- class C_NextGen_Style_Manager
4
- {
5
- static $_instance = NULL;
6
- var $directories = array();
7
- var $unsafe_directories = array();
8
- var $default_dir = '';
9
- var $new_dir = '';
10
-
11
- function __construct()
12
- {
13
- $this->default_dir = implode(DIRECTORY_SEPARATOR, array(
14
- NGG_MODULE_DIR,
15
- 'ngglegacy',
16
- 'css'
17
- ));
18
-
19
- $this->new_dir = implode(DIRECTORY_SEPARATOR, array(
20
- rtrim(WP_CONTENT_DIR, "/\\"),
21
- 'ngg_styles'
22
- ));
23
-
24
- // The last place we look for a stylesheet is in ngglegacy
25
- $this->add_directory($this->default_dir);
26
-
27
- // This is where all stylesheets should be stored
28
- $this->add_directory($this->new_dir);
29
-
30
- // We also check wp-content/ngg/styles
31
- $this->add_directory(implode(DIRECTORY_SEPARATOR, array(
32
- WP_CONTENT_DIR, 'ngg', 'styles'
33
- )));
34
-
35
- // We check the parent theme directory. Needed for child themes
36
- $this->add_directory(rtrim(get_template_directory(), "/\\"), TRUE);
37
-
38
- // We also check parent_theme/nggallery
39
- $this->add_directory(implode(DIRECTORY_SEPARATOR, array(
40
- rtrim(get_template_directory(), "/\\"),
41
- 'nggallery'
42
- )), TRUE);
43
-
44
- // We also check parent_theme/ngg_styles
45
- $this->add_directory(implode(DIRECTORY_SEPARATOR, array(
46
- rtrim(get_template_directory(), "/\\"),
47
- 'ngg_styles'
48
- )), TRUE);
49
-
50
- // We check the root directory of the theme. Users shouldn't store here,
51
- // but they might
52
- $this->add_directory(rtrim(get_stylesheet_directory(), "/\\"), TRUE);
53
-
54
- // We also check the theme/nggallery directory
55
- $this->add_directory(implode(DIRECTORY_SEPARATOR, array(
56
- rtrim(get_stylesheet_directory(), "/\\"),
57
- 'nggallery'
58
- )), TRUE);
59
-
60
- // We also check the theme/ngg_styles directory
61
- $this->add_directory(implode(DIRECTORY_SEPARATOR, array(
62
- rtrim(get_stylesheet_directory(), "/\\"),
63
- 'ngg_styles'
64
- )), TRUE);
65
- }
66
-
67
- /**
68
- * Add a directory to search for stylesheets
69
- * @param $dir
70
- * @param bool $unsafe
71
- */
72
- function add_directory($dir, $unsafe=FALSE)
73
- {
74
- array_unshift($this->directories, $dir);
75
- if ($unsafe) {
76
- $this->unsafe_directories[] = $dir;
77
- }
78
- }
79
-
80
- /**
81
- * Determines if a directory is upgrade-safe or not
82
- * @param $dir
83
- * @return bool
84
- */
85
- function is_directory_unsafe($dir=FALSE)
86
- {
87
- if (!$dir) $dir = dirname($this->find_selected_stylesheet_abspath());
88
-
89
- return in_array($dir, $this->unsafe_directories);
90
- }
91
-
92
- /**
93
- * Determines if the directory is the default ngglegacy path
94
- * @param $dir
95
- * @return bool
96
- */
97
- function is_default_dir($dir)
98
- {
99
- return rtrim($dir, "/\\") == $this->default_dir;
100
- }
101
-
102
- function get_new_dir($filename)
103
- {
104
- return implode(DIRECTORY_SEPARATOR, array(
105
- rtrim($this->new_dir, "/\\"),
106
- $filename
107
- ));
108
- }
109
-
110
- /**
111
- * Gets the location where the selected stylesheet will be saved to
112
- * @param bool|string $selected
113
- * @return string
114
- */
115
- function get_selected_stylesheet_saved_abspath($selected=FALSE)
116
- {
117
- if (!$selected) $selected = $this->get_selected_stylesheet();
118
-
119
- $abspath = $this->find_selected_stylesheet_abspath($selected);
120
- if ($this->is_default_dir(dirname($abspath))) {
121
- $abspath = $this->get_new_dir(basename($abspath));
122
- }
123
-
124
- return $abspath;
125
- }
126
-
127
- function save($contents, $selected=FALSE)
128
- {
129
- $retval = FALSE;
130
-
131
- if (!$selected) $selected = $this->get_selected_stylesheet();
132
- $abspath = $this->get_selected_stylesheet_saved_abspath($selected);
133
-
134
- wp_mkdir_p(dirname($abspath));
135
- if (is_writable($abspath) OR (!@file_exists($abspath) && is_writable(dirname($abspath)))) {
136
- $retval = file_put_contents($abspath, $contents);
137
- }
138
- return $retval;
139
- }
140
-
141
- /**
142
- * Gets the selected stylesheet from the user
143
- * @return mixed
144
- */
145
- function get_selected_stylesheet()
146
- {
147
- $settings = C_NextGen_Settings::get_instance();
148
-
149
- // use the same css resource for all subsites when wpmuStyle=true
150
- if (!is_multisite() || (is_multisite() && $settings->get('wpmuStyle')))
151
- return $settings->get('CSSfile', 'nggallery.css');
152
- else
153
- return C_Nextgen_Global_Settings::get_instance()->get('wpmuCSSfile');
154
-
155
- }
156
-
157
- /**
158
- * Finds the location of the selected stylesheet
159
- */
160
- function find_selected_stylesheet_abspath($selected=FALSE)
161
- {
162
- if (!$selected) $selected = $this->get_selected_stylesheet();
163
-
164
- $retval = implode(DIRECTORY_SEPARATOR, array(
165
- rtrim($this->default_dir, "/\\"),
166
- $selected
167
- ));
168
-
169
- foreach ($this->directories as $dir) {
170
- $path = implode(DIRECTORY_SEPARATOR, array(
171
- rtrim($dir, "/\\"),
172
- $selected
173
- ));
174
-
175
- if (@file_exists($path)) {
176
- $retval = $path;
177
- break;
178
- }
179
- }
180
-
181
- $retval = str_replace('/', DIRECTORY_SEPARATOR, $retval);
182
-
183
- return $retval;
184
- }
185
-
186
- /**
187
- * Returns the url to the selected stylesheet
188
- * @return mixed
189
- */
190
- function get_selected_stylesheet_url($selected=FALSE)
191
- {
192
- if (!$selected)
193
- $selected = $this->get_selected_stylesheet();
194
-
195
- $abspath = $this->find_selected_stylesheet_abspath($selected);
196
-
197
- // default_dir is the only resource loaded from inside the plugin directory
198
- $type = 'content';
199
- $url = content_url();
200
- if (0 === strpos($abspath, $this->default_dir))
201
- {
202
- $type = 'plugins';
203
- $url = plugins_url();
204
- }
205
-
206
- // Credit to Sam Soysa for this line -- Windows servers have so many special needs.
207
- $abspath = str_replace('\\', '/', $abspath);
208
-
209
- $retval = str_replace(
210
- C_Fs::get_instance()->get_document_root($type),
211
- $url,
212
- $abspath
213
- );
214
-
215
- return rtrim(str_replace('\\', '/', $retval), "/");
216
- }
217
-
218
-
219
- function find_all_stylesheets($dir = FALSE)
220
- {
221
- $retval = array();
222
- if (!$dir)
223
- $dir = $this->directories;
224
-
225
- foreach (array_reverse($dir) as $dir) {
226
- $path = implode(DIRECTORY_SEPARATOR, array(
227
- rtrim($dir, "/\\"),
228
- '*.css'
229
- ));
230
- $files = glob($path);
231
- if (is_array($files)) foreach ($files as $abspath) {
232
- if (($meta = $this->get_stylesheet_metadata($abspath))) {
233
- $filename = $meta['filename'];
234
- $retval[$filename] = $meta;
235
- }
236
- }
237
- }
238
-
239
- return $retval;
240
- }
241
-
242
- /**
243
- * Gets the metadata for a particular stylesheet
244
- * @param $abspath
245
- * @return array
246
- */
247
- function get_stylesheet_metadata($abspath)
248
- {
249
- $retval = array();
250
- $contents = file_get_contents($abspath);
251
- $name = '';
252
- $desc = '';
253
- $version = '';
254
- $author = '';
255
-
256
- // Find the name of the stylesheet
257
- if (preg_match("/CSS Name:(.*)/i", $contents, $match)) {
258
- $name = trim($match[1]);
259
- }
260
-
261
- // Find the description of the stylesheet
262
- if (preg_match("/Description:(.*)/", $contents, $match)) {
263
- $desc = trim($match[1]);
264
- }
265
-
266
- // Find the author of the stylesheet
267
- if (preg_match("/Author:(.*)/", $contents, $match)) {
268
- $author = trim($match[1]);
269
- }
270
-
271
- // Find the version of the stylesheet
272
- if (preg_match("/Version:(.*)/", $contents, $match)) {
273
- $version = trim($match[1]);
274
- }
275
-
276
- if ($name) {
277
- $retval = array(
278
- 'filename' => basename($abspath),
279
- 'abspath' => $abspath,
280
- 'name' => $name,
281
- 'description' => $desc,
282
- 'author' => $author,
283
- 'version' => $version
284
- );
285
- }
286
-
287
- return $retval;
288
- }
289
-
290
- /**
291
- * Gets an instance of the class
292
- * @return C_NextGen_Style_Manager
293
- */
294
- static function get_instance()
295
- {
296
- if (is_null(self::$_instance)){
297
- $klass = get_class();
298
- self::$_instance = new $klass();
299
- }
300
- return self::$_instance;
301
- }
302
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
non_pope/class.photocrati_settings_manager.php CHANGED
@@ -162,21 +162,25 @@ if (!class_exists('C_Photocrati_Settings_Manager_Base'))
162
  return $this->get($key);
163
  }
164
 
 
165
  function offsetExists($key)
166
  {
167
  return $this->is_set($key);
168
  }
169
 
 
170
  function offsetGet($key)
171
  {
172
  return $this->get($key);
173
  }
174
 
 
175
  function offsetSet($key, $value)
176
  {
177
  return $this->set($key, $value);
178
  }
179
 
 
180
  function offsetUnset($key)
181
  {
182
  return $this->delete($key);
162
  return $this->get($key);
163
  }
164
 
165
+ #[\ReturnTypeWillChange]
166
  function offsetExists($key)
167
  {
168
  return $this->is_set($key);
169
  }
170
 
171
+ #[\ReturnTypeWillChange]
172
  function offsetGet($key)
173
  {
174
  return $this->get($key);
175
  }
176
 
177
+ #[\ReturnTypeWillChange]
178
  function offsetSet($key, $value)
179
  {
180
  return $this->set($key, $value);
181
  }
182
 
183
+ #[\ReturnTypeWillChange]
184
  function offsetUnset($key)
185
  {
186
  return $this->delete($key);
non_pope/class.photocrati_transient_manager.php CHANGED
@@ -22,8 +22,11 @@ class C_Photocrati_Transient_Manager
22
  global $_wp_using_ext_object_cache;
23
 
24
  $this->_groups = get_option('ngg_transient_groups', array('__counter' => 1));
25
- if ($_wp_using_ext_object_cache) $this->_tracker = get_option('photocrati_cache_tracker', array());
26
- register_shutdown_function(array(&$this, '_update_tracker'));
 
 
 
27
  }
28
 
29
  function delete_tracked($group=NULL)
22
  global $_wp_using_ext_object_cache;
23
 
24
  $this->_groups = get_option('ngg_transient_groups', array('__counter' => 1));
25
+ if ($_wp_using_ext_object_cache)
26
+ $this->_tracker = get_option('photocrati_cache_tracker', array());
27
+
28
+ if (!defined('NGG_DISABLE_PHOTOCRATI_CACHE_TRACKER') || !NGG_DISABLE_PHOTOCRATI_CACHE_TRACKER)
29
+ register_shutdown_function(array(&$this, '_update_tracker'));
30
  }
31
 
32
  function delete_tracked($group=NULL)
products/photocrati_nextgen/modules/ajax/module.ajax.php CHANGED
@@ -56,7 +56,6 @@ class M_Ajax extends C_Base_Module
56
  if (isset($_REQUEST[NGG_AJAX_SLUG])) {
57
  $controller = C_Ajax_Controller::get_instance();
58
  $controller->index_action();
59
- // E_Clean_Exit may cause a warning to be appended to our response, spoiling any JSON sent
60
  exit;
61
  }
62
  }
56
  if (isset($_REQUEST[NGG_AJAX_SLUG])) {
57
  $controller = C_Ajax_Controller::get_instance();
58
  $controller->index_action();
 
59
  exit;
60
  }
61
  }
products/photocrati_nextgen/modules/attach_to_post/module.attach_to_post.php CHANGED
@@ -264,7 +264,6 @@ class M_Attach_To_Post extends C_Base_Module
264
 
265
  /**
266
  * Route the IGW requests using wp-admin
267
- * @throws E_Clean_Exit
268
  */
269
  function route_insert_gallery_window()
270
  {
264
 
265
  /**
266
  * Route the IGW requests using wp-admin
 
267
  */
268
  function route_insert_gallery_window()
269
  {
products/photocrati_nextgen/modules/datamapper/package.module.datamapper.php CHANGED
@@ -270,7 +270,7 @@ class C_DataMapper_Driver_Base extends C_Component
270
  * @param string $operator
271
  * @return ExtensibleObject
272
  */
273
- function _where($conditions = array(), $operator)
274
  {
275
  $where_clauses = array();
276
  // If conditions is not an array, make it one
270
  * @param string $operator
271
  * @return ExtensibleObject
272
  */
273
+ function _where($conditions, $operator)
274
  {
275
  $where_clauses = array();
276
  // If conditions is not an array, make it one
products/photocrati_nextgen/modules/marketing/module.marketing.php CHANGED
@@ -112,6 +112,8 @@ class M_Marketing extends C_Base_Module
112
 
113
  $forms->add_form(NGG_OTHER_OPTIONS_SLUG, 'marketing_image_protection');
114
  });
 
 
115
  }
116
 
117
  function _register_utilities()
@@ -174,7 +176,40 @@ class M_Marketing extends C_Base_Module
174
 
175
  function initialize()
176
  {
177
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
178
  }
179
 
180
  /**
112
 
113
  $forms->add_form(NGG_OTHER_OPTIONS_SLUG, 'marketing_image_protection');
114
  });
115
+
116
+ add_action('in_admin_header', [$this, 'admin_header']);
117
  }
118
 
119
  function _register_utilities()
176
 
177
  function initialize()
178
  {
179
+ }
180
+
181
+ public function admin_header()
182
+ {
183
+ if (self::is_plus_or_pro_enabled())
184
+ return;
185
+
186
+ if (empty($_REQUEST['page']))
187
+ return;
188
+
189
+ // The following detects if we are viewing a NextGEN admin page.
190
+ $is_modern_page = FALSE;
191
+ $keys = ['ngg', 'nggallery', 'nextgen-gallery'];
192
+ foreach ($keys as $key) {
193
+ $search = strpos($_REQUEST['page'], $key) !== FALSE;
194
+ if ($search)
195
+ $is_modern_page = TRUE;
196
+ }
197
+
198
+ if (!M_NextGen_Admin::is_ngg_legacy_page() && !$is_modern_page)
199
+ return;
200
+
201
+ $url = self::get_utm_link('https://www.imagely.com/wordpress-gallery-plugin/nextgen-pro/', 'topbar', 'getnextgenpro');
202
+
203
+ $message = sprintf(
204
+ __('You are using NextGEN Gallery. To unlock more features, consider <a href="%s" target="_blank">upgrading to NextGEN Pro</a>.', 'nggallery'),
205
+ $url
206
+ );
207
+
208
+ $view = new C_MVC_View('photocrati-marketing#admin-header-banner', [
209
+ 'message' => $message
210
+ ]);
211
+
212
+ print $view->render(TRUE);
213
  }
214
 
215
  /**
products/photocrati_nextgen/modules/marketing/templates/admin-header-banner.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * @var string $message
4
+ */
5
+ // The following CSS *should* be placed in a shared CSS file, but that will require making several more updates
6
+ // to ensure it loads on "new" and legacy pages; it's just far easier to embed it here.
7
+ ?>
8
+ <style>
9
+ #ngg-admin-marketing-header-banner {
10
+ border: none;
11
+ background: #9fbb1a;
12
+ color: white;
13
+ margin-left: -20px;
14
+ display: flex;
15
+ align-content: center;
16
+ justify-content: center;
17
+ }
18
+
19
+ #ngg-admin-marketing-header-banner p {
20
+ font-size: 1.2em;
21
+ margin: 10px 20px 10px 20px;
22
+ }
23
+
24
+ #ngg-admin-marketing-header-banner a {
25
+ font-weight: bold;
26
+ color: white;
27
+ }
28
+
29
+ @media only screen and (max-width: 740px) {
30
+ #ngg-admin-marketing-header-banner {
31
+ margin-left: -10px;
32
+ }
33
+ }
34
+
35
+ @media only screen and (max-width: 600px) {
36
+ #ngg-admin-marketing-header-banner {
37
+ padding-top: 50px;
38
+ }
39
+ }
40
+ </style>
41
+ <div id="ngg-admin-marketing-header-banner">
42
+ <p><?php print $message; ?></p>
43
+ </div>
products/photocrati_nextgen/modules/nextgen_admin/package.module.nextgen_admin.php CHANGED
@@ -350,12 +350,7 @@ class C_Admin_Notification_Manager
350
  }
351
  ob_end_clean();
352
  echo json_encode($retval);
353
- // E_Clean_Exit causes warnings to be appended to XHR responses, potentially breaking the client JS
354
- if (!defined('NGG_DISABLE_SHUTDOWN_EXCEPTION_HANDLER') || !NGG_DISABLE_SHUTDOWN_EXCEPTION_HANDLER) {
355
- throw new E_Clean_Exit();
356
- } else {
357
- exit;
358
- }
359
  }
360
  }
361
  function render_notice($name)
@@ -652,9 +647,19 @@ class Mixin_Form_Instance_Methods extends Mixin
652
  */
653
  class Mixin_Form_Field_Generators extends Mixin
654
  {
655
- function _render_select_field($display_type, $name, $label, $options = array(), $value, $text = '', $hidden = FALSE)
 
 
 
 
 
 
 
 
 
 
656
  {
657
- return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_select', array('display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'options' => $options, 'value' => $value, 'text' => $text, 'hidden' => $hidden), True);
658
  }
659
  function _render_radio_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE)
660
  {
@@ -1127,7 +1132,8 @@ class Mixin_NextGen_Admin_Page_Instance_Methods extends Mixin
1127
  */
1128
  function _get_action()
1129
  {
1130
- $retval = preg_quote($this->object->param('action'), '/');
 
1131
  $retval = strtolower(preg_replace("/[^\\w]/", '_', $retval));
1132
  return preg_replace("/_{2,}/", "_", $retval) . '_action';
1133
  }
350
  }
351
  ob_end_clean();
352
  echo json_encode($retval);
353
+ exit;
 
 
 
 
 
354
  }
355
  }
356
  function render_notice($name)
647
  */
648
  class Mixin_Form_Field_Generators extends Mixin
649
  {
650
+ /**
651
+ * @param stdClass|C_Display_Type $display_type
652
+ * @param string $name
653
+ * @param string $label
654
+ * @param array $options
655
+ * @param int|string $value
656
+ * @param string $text
657
+ * @param bool $hidden
658
+ * @return string
659
+ */
660
+ function _render_select_field($display_type, $name, $label, $options, $value, $text = '', $hidden = FALSE)
661
  {
662
+ return $this->object->render_partial('photocrati-nextgen_admin#field_generator/nextgen_settings_field_select', ['display_type_name' => $display_type->name, 'name' => $name, 'label' => $label, 'options' => $options, 'value' => $value, 'text' => $text, 'hidden' => $hidden], TRUE);
663
  }
664
  function _render_radio_field($display_type, $name, $label, $value, $text = '', $hidden = FALSE)
665
  {
1132
  */
1133
  function _get_action()
1134
  {
1135
+ $action = $this->object->param('action') ?: '';
1136
+ $retval = preg_quote($action, '/');
1137
  $retval = strtolower(preg_replace("/[^\\w]/", '_', $retval));
1138
  return preg_replace("/_{2,}/", "_", $retval) . '_action';
1139
  }
products/photocrati_nextgen/modules/nextgen_basic_album/package.module.nextgen_basic_album.php CHANGED
@@ -102,7 +102,7 @@ class A_NextGen_Album_Breadcrumbs extends Mixin
102
  }
103
  return $found;
104
  }
105
- function generate_breadcrumb($gallery_id = NULL, $entities)
106
  {
107
  $found = array();
108
  $router = C_Router::get_instance();
@@ -506,7 +506,7 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
506
  $entities = $displayed_gallery->get_included_entities($display_settings['galleries_per_page'], $offset);
507
  // If there are entities to be displayed
508
  if ($entities) {
509
- $pagination_result = $this->object->create_pagination($current_page, $displayed_gallery->get_entity_count(), $display_settings['galleries_per_page'], urldecode($this->object->param('ajax_pagination_referrer')));
510
  $display_settings['entities'] = $entities;
511
  $display_settings['pagination'] = $pagination_result['output'];
512
  $display_settings['displayed_gallery'] = $displayed_gallery;
@@ -638,9 +638,11 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
638
  if ($gallery->previewpic && $gallery->previewpic > 0) {
639
  if ($image = $image_mapper->find(intval($gallery->previewpic))) {
640
  $gallery->previewpic_image = $image;
641
- $gallery->previewpic_fullsized_url = $storage->get_image_url($image, 'full');
642
  $gallery->previewurl = $storage->get_image_url($image, $image_gen->get_size_name($image_gen_params), TRUE);
643
  $gallery->previewname = $gallery->name;
 
 
644
  }
645
  }
646
  // Get the page link. If the entity is an album, then the url will
@@ -725,7 +727,6 @@ class A_NextGen_Basic_Album_Controller extends Mixin_NextGen_Basic_Pagination
725
  if (!empty($ds['enable_breadcrumbs']) && $ds['enable_breadcrumbs'] || !empty($ds['original_settings']['enable_breadcrumbs']) && $ds['original_settings']['enable_breadcrumbs']) {
726
  wp_enqueue_style('nextgen_basic_album_breadcrumbs_style', $this->object->get_static_url('photocrati-nextgen_basic_album#breadcrumbs.css'), array(), NGG_SCRIPT_VERSION);
727
  }
728
- $this->enqueue_ngg_styles();
729
  }
730
  }
731
  /**
102
  }
103
  return $found;
104
  }
105
+ function generate_breadcrumb($gallery_id, $entities)
106
  {
107
  $found = array();
108
  $router = C_Router::get_instance();
506
  $entities = $displayed_gallery->get_included_entities($display_settings['galleries_per_page'], $offset);
507
  // If there are entities to be displayed
508
  if ($entities) {
509
+ $pagination_result = $this->object->create_pagination($current_page, $displayed_gallery->get_entity_count(), $display_settings['galleries_per_page'], urldecode($this->object->param('ajax_pagination_referrer') ?: ''));
510
  $display_settings['entities'] = $entities;
511
  $display_settings['pagination'] = $pagination_result['output'];
512
  $display_settings['displayed_gallery'] = $displayed_gallery;
638
  if ($gallery->previewpic && $gallery->previewpic > 0) {
639
  if ($image = $image_mapper->find(intval($gallery->previewpic))) {
640
  $gallery->previewpic_image = $image;
641
+ $gallery->previewpic_fullsized_url = $storage->get_image_url($image);
642
  $gallery->previewurl = $storage->get_image_url($image, $image_gen->get_size_name($image_gen_params), TRUE);
643
  $gallery->previewname = $gallery->name;
644
+ } else {
645
+ $gallery->no_previewpic = TRUE;
646
  }
647
  }
648
  // Get the page link. If the entity is an album, then the url will
727
  if (!empty($ds['enable_breadcrumbs']) && $ds['enable_breadcrumbs'] || !empty($ds['original_settings']['enable_breadcrumbs']) && $ds['original_settings']['enable_breadcrumbs']) {
728
  wp_enqueue_style('nextgen_basic_album_breadcrumbs_style', $this->object->get_static_url('photocrati-nextgen_basic_album#breadcrumbs.css'), array(), NGG_SCRIPT_VERSION);
729
  }
 
730
  }
731
  }
732
  /**
products/photocrati_nextgen/modules/nextgen_basic_album/templates/compact/default-view.php CHANGED
@@ -1,16 +1,29 @@
 
 
 
 
 
 
 
 
1
  <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?>
2
  <div class="ngg-albumoverview default-view">
3
  <?php
4
  foreach ($galleries as $gallery) {
5
- if ($open_gallery_in_lightbox && $gallery->entity_type == 'gallery') {
 
6
  $anchor = $gallery->displayed_gallery->effect_code . "
7
- href='" . nextgen_esc_url($gallery->pagelink) . "'
8
- data-src='" . esc_attr($gallery->previewpic_fullsized_url) . "'
9
- data-fullsize='" . esc_attr($gallery->previewpic_fullsized_url) . "'
10
- data-thumbnail='" . esc_attr($gallery->previewurl) . "'
11
- data-title='" . esc_attr($gallery->previewpic_image->alttext) . "'
12
- data-description='" . esc_attr(stripslashes($gallery->previewpic_image->description)) . "'
13
- data-image-id='" . esc_attr($gallery->previewpic) . "'";
 
 
 
 
14
  } else {
15
  $anchor = "title='" . esc_attr($gallery->title) . "'
16
  href='" . nextgen_esc_url($gallery->pagelink) . "'";
@@ -20,11 +33,13 @@
20
  <div class="ngg-album-compactbox">
21
  <div class="ngg-album-link">
22
  <?php $this->start_element('nextgen_gallery.album_gallery', 'item', $gallery); ?>
23
- <a <?php echo $anchor; ?>>
24
- <img class="Thumb"
25
- alt="<?php echo esc_attr($gallery->title); ?>"
26
- src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/>
27
- </a>
 
 
28
  <?php $this->end_element(); ?>
29
  </div>
30
  </div>
1
+ <?php
2
+ /**
3
+ * @var C_Displayed_Gallery $displayed_gallery
4
+ * @var array $galleries
5
+ * @var bool $open_gallery_in_lightbox
6
+ * @var string $pagination
7
+ */
8
+ ?>
9
  <?php $this->start_element('nextgen_gallery.gallery_container', 'container', $displayed_gallery); ?>
10
  <div class="ngg-albumoverview default-view">
11
  <?php
12
  foreach ($galleries as $gallery) {
13
+ if ($open_gallery_in_lightbox && $gallery->entity_type == 'gallery')
14
+ {
15
  $anchor = $gallery->displayed_gallery->effect_code . "
16
+ href='" . nextgen_esc_url($gallery->pagelink) . "'";
17
+
18
+ if (!isset($gallery->no_previewpic))
19
+ {
20
+ $anchor .= "data-src='" . esc_attr($gallery->previewpic_fullsized_url) . "'
21
+ data-fullsize='" . esc_attr($gallery->previewpic_fullsized_url) . "'
22
+ data-thumbnail='" . esc_attr($gallery->previewurl) . "'
23
+ data-title='" . esc_attr($gallery->previewpic_image->alttext) . "'
24
+ data-description='" . esc_attr(stripslashes($gallery->previewpic_image->description)) . "'
25
+ data-image-id='" . esc_attr($gallery->previewpic) . "'";
26
+ }
27
  } else {
28
  $anchor = "title='" . esc_attr($gallery->title) . "'
29
  href='" . nextgen_esc_url($gallery->pagelink) . "'";
33
  <div class="ngg-album-compactbox">
34
  <div class="ngg-album-link">
35
  <?php $this->start_element('nextgen_gallery.album_gallery', 'item', $gallery); ?>
36
+ <?php if (!isset($gallery->no_previewpic)) { ?>
37
+ <a <?php echo $anchor; ?>>
38
+ <img class="Thumb"
39
+ alt="<?php echo esc_attr($gallery->title); ?>"
40
+ src="<?php echo nextgen_esc_url($gallery->previewurl); ?>"/>
41
+ </a>
42
+ <?php } ?>
43
  <?php $this->end_element(); ?>
44
  </div>
45
  </div>
products/photocrati_nextgen/modules/nextgen_basic_gallery/package.module.nextgen_basic_gallery.php CHANGED
@@ -298,7 +298,6 @@ class A_NextGen_Basic_Slideshow_Controller extends Mixin
298
  wp_enqueue_style('ngg_slick_slideshow_style', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/slick/slick.css'), array(), NGG_SCRIPT_VERSION);
299
  wp_enqueue_style('ngg_slick_slideshow_theme', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/slick/slick-theme.css'), array(), NGG_SCRIPT_VERSION);
300
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
301
- $this->enqueue_ngg_styles();
302
  }
303
  /**
304
  * Provides the url of the JavaScript library required for
@@ -550,7 +549,7 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
550
  if ($images) {
551
  // Create pagination
552
  if ($display_settings['images_per_page'] && !$display_settings['disable_pagination']) {
553
- $pagination_result = $this->object->create_pagination($current_page, $total, $display_settings['images_per_page'], urldecode($this->object->param('ajax_pagination_referrer')));
554
  $this->object->remove_param('ajax_pagination_referrer');
555
  $pagination_prev = $pagination_result['prev'];
556
  $pagination_next = $pagination_result['next'];
@@ -648,7 +647,6 @@ class A_NextGen_Basic_Thumbnails_Controller extends Mixin
648
  wp_enqueue_script('nextgen-basic-thumbnails-ajax-pagination', $this->object->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/ajax_pagination.js'), array(), NGG_SCRIPT_VERSION);
649
  }
650
  wp_enqueue_style('nextgen_pagination_style', $this->get_static_url('photocrati-nextgen_pagination#style.css'), array(), NGG_SCRIPT_VERSION);
651
- $this->enqueue_ngg_styles();
652
  }
653
  /**
654
  * Provides the url of the JavaScript library required for
298
  wp_enqueue_style('ngg_slick_slideshow_style', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/slick/slick.css'), array(), NGG_SCRIPT_VERSION);
299
  wp_enqueue_style('ngg_slick_slideshow_theme', $this->get_static_url('photocrati-nextgen_basic_gallery#slideshow/slick/slick-theme.css'), array(), NGG_SCRIPT_VERSION);
300
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
 
301
  }
302
  /**
303
  * Provides the url of the JavaScript library required for
549
  if ($images) {
550
  // Create pagination
551
  if ($display_settings['images_per_page'] && !$display_settings['disable_pagination']) {
552
+ $pagination_result = $this->object->create_pagination($current_page, $total, $display_settings['images_per_page'], urldecode($this->object->param('ajax_pagination_referrer') ?: ''));
553
  $this->object->remove_param('ajax_pagination_referrer');
554
  $pagination_prev = $pagination_result['prev'];
555
  $pagination_next = $pagination_result['next'];
647
  wp_enqueue_script('nextgen-basic-thumbnails-ajax-pagination', $this->object->get_static_url('photocrati-nextgen_basic_gallery#thumbnails/ajax_pagination.js'), array(), NGG_SCRIPT_VERSION);
648
  }
649
  wp_enqueue_style('nextgen_pagination_style', $this->get_static_url('photocrati-nextgen_pagination#style.css'), array(), NGG_SCRIPT_VERSION);
 
650
  }
651
  /**
652
  * Provides the url of the JavaScript library required for
products/photocrati_nextgen/modules/nextgen_basic_imagebrowser/package.module.nextgen_basic_imagebrowser.php CHANGED
@@ -149,7 +149,6 @@ class A_NextGen_Basic_ImageBrowser_Controller extends Mixin
149
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
150
  wp_enqueue_style('nextgen_basic_imagebrowser_style', $this->get_static_url('photocrati-nextgen_basic_imagebrowser#style.css'), array(), NGG_SCRIPT_VERSION);
151
  wp_enqueue_script('nextgen_basic_imagebrowser_script', $this->object->get_static_url(NGG_BASIC_IMAGEBROWSER . '#imagebrowser.js'), array('ngg_common'), NGG_SCRIPT_VERSION, TRUE);
152
- $this->enqueue_ngg_styles();
153
  }
154
  }
155
  /**
149
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
150
  wp_enqueue_style('nextgen_basic_imagebrowser_style', $this->get_static_url('photocrati-nextgen_basic_imagebrowser#style.css'), array(), NGG_SCRIPT_VERSION);
151
  wp_enqueue_script('nextgen_basic_imagebrowser_script', $this->object->get_static_url(NGG_BASIC_IMAGEBROWSER . '#imagebrowser.js'), array('ngg_common'), NGG_SCRIPT_VERSION, TRUE);
 
152
  }
153
  }
154
  /**
products/photocrati_nextgen/modules/nextgen_basic_singlepic/package.module.nextgen_basic_singlepic.php CHANGED
@@ -154,7 +154,6 @@ class A_NextGen_Basic_Singlepic_Controller extends Mixin
154
  {
155
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
156
  wp_enqueue_style('nextgen_basic_singlepic_style', $this->get_static_url('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic.css'), array(), NGG_SCRIPT_VERSION);
157
- $this->enqueue_ngg_styles();
158
  }
159
  }
160
  /**
154
  {
155
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
156
  wp_enqueue_style('nextgen_basic_singlepic_style', $this->get_static_url('photocrati-nextgen_basic_singlepic#nextgen_basic_singlepic.css'), array(), NGG_SCRIPT_VERSION);
 
157
  }
158
  }
159
  /**
products/photocrati_nextgen/modules/nextgen_basic_tagcloud/package.module.nextgen_basic_tagcloud.php CHANGED
@@ -92,7 +92,6 @@ class A_NextGen_Basic_Tagcloud_Controller extends Mixin
92
  {
93
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
94
  wp_enqueue_style('photocrati-nextgen_basic_tagcloud-style', $this->get_static_url('photocrati-nextgen_basic_tagcloud#nextgen_basic_tagcloud.css'), array(), NGG_SCRIPT_VERSION);
95
- $this->enqueue_ngg_styles();
96
  }
97
  }
98
  /**
92
  {
93
  $this->call_parent('enqueue_frontend_resources', $displayed_gallery);
94
  wp_enqueue_style('photocrati-nextgen_basic_tagcloud-style', $this->get_static_url('photocrati-nextgen_basic_tagcloud#nextgen_basic_tagcloud.css'), array(), NGG_SCRIPT_VERSION);
 
95
  }
96
  }
97
  /**
products/photocrati_nextgen/modules/nextgen_data/package.module.nextgen_data.php CHANGED
@@ -481,14 +481,10 @@ class Mixin_Dynamic_Thumbnails_Manager extends Mixin
481
  $size_prefix = $prefix_list['size'];
482
  $flags_prefix = $prefix_list['flags'];
483
  $max_value_length = $prefix_list['max_value_length'];
484
- $size_name = null;
485
- $id_name = null;
486
- $params = array();
487
  if (!$is_only_size_name) {
488
- $extension = M_I18n::mb_pathinfo($name, PATHINFO_EXTENSION);
489
- if ($extension != null) {
490
- $extension = '.' . $extension;
491
- }
492
  $name = M_I18n::mb_basename($name);
493
  }
494
  $size_index = strrpos($name, $size_prefix);
@@ -616,7 +612,12 @@ class C_Dynamic_Thumbnails_Manager extends C_Component
616
  return self::$_instances[$context];
617
  }
618
  }
619
- require_once 'pel-0.9.9/autoload.php';
 
 
 
 
 
620
  use lsolesen\pel\PelDataWindow;
621
  use lsolesen\pel\PelJpeg;
622
  use lsolesen\pel\PelTiff;
@@ -740,6 +741,50 @@ class C_Exif_Writer
740
  return FALSE;
741
  }
742
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
743
  /**
744
  * @param string $filename
745
  * @param array $data
@@ -769,7 +814,7 @@ class C_Exif_Writer
769
  // This can cause errors if incorrectly pointed at a non-JPEG file
770
  try {
771
  // Loop through each JPEG segment in search of region 13
772
- while ((hexdec(substr($new_file_contents, 0, 2)) & 0xfff0) === 0xffe0) {
773
  $segment_length = hexdec(substr($new_file_contents, 2, 2)) & 0xffff;
774
  $segment_number = hexdec(substr($new_file_contents, 1, 1)) & 0xf;
775
  // Not a segment we're interested in
@@ -1431,7 +1476,7 @@ class C_Gallery_Storage extends C_Component
1431
  $watermark = isset($params['watermark']) ? $params['watermark'] : NULL;
1432
  $reflection = isset($params['reflection']) ? $params['reflection'] : NULL;
1433
  $rotation = isset($params['rotation']) ? $params['rotation'] : NULL;
1434
- $flip = isset($params['flip']) ? $params['flip'] : NULL;
1435
  $destpath = NULL;
1436
  $thumbnail = NULL;
1437
  $result = $this->object->calculate_image_clone_result($image_path, $clone_path, $params);
@@ -1547,9 +1592,6 @@ class C_Gallery_Storage extends C_Component
1547
  }
1548
  if ($rotation && in_array(abs($rotation), array(90, 180, 270))) {
1549
  $thumbnail->rotateImageAngle($rotation);
1550
- $remove_orientation_exif = TRUE;
1551
- } else {
1552
- $remove_orientation_exif = FALSE;
1553
  }
1554
  $flip = strtolower($flip);
1555
  if ($flip && in_array($flip, array('h', 'v', 'hv'))) {
@@ -1560,8 +1602,8 @@ class C_Gallery_Storage extends C_Component
1560
  if ($reflection) {
1561
  $thumbnail->createReflection(40, 40, 50, FALSE, '#a4a4a4');
1562
  }
 
1563
  if ($clone_format != null && isset($format_list[$clone_format])) {
1564
- // Force format
1565
  $thumbnail->format = strtoupper($format_list[$clone_format]);
1566
  }
1567
  $thumbnail = apply_filters('ngg_before_save_thumbnail', $thumbnail);
@@ -2071,13 +2113,11 @@ class C_Gallery_Storage extends C_Component
2071
  function _get_computed_image_abspath($image, $size = 'full', $check_existance = FALSE)
2072
  {
2073
  $retval = NULL;
2074
- $fs = C_Fs::get_instance();
2075
  // If we have the id, get the actual image entity
2076
  if (is_numeric($image)) {
2077
  $image = $this->object->_image_mapper->find($image);
2078
  }
2079
- // Ensure we have the image entity - user could have passed in an
2080
- // incorrect id
2081
  if (is_object($image)) {
2082
  if ($gallery_path = $this->object->get_gallery_abspath($image->galleryid)) {
2083
  $folder = $prefix = $size;
@@ -2116,8 +2156,37 @@ class C_Gallery_Storage extends C_Component
2116
  $image_path = path_join($this->object->get_cache_abspath($image->galleryid), $dynthumbs->get_image_name($image, $params));
2117
  // Filename is not found in meta, nor dynamic
2118
  } else {
 
 
 
 
 
2119
  $image_path = path_join($gallery_path, $folder);
2120
- $image_path = path_join($image_path, "{$prefix}_{$image->filename}");
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2121
  }
2122
  }
2123
  $retval = $image_path;
@@ -2527,7 +2596,8 @@ class C_Gallery_Storage extends C_Component
2527
  if (is_numeric($image)) {
2528
  $image = $image_mapper->find($image);
2529
  }
2530
- if ($image_abspath = $this->object->get_image_abspath($image)) {
 
2531
  // Import the image; this will copy the main file
2532
  $new_image_id = $this->object->import_image_file($dst_gallery, $image_abspath, $image->filename);
2533
  if ($new_image_id) {
@@ -2616,6 +2686,11 @@ class C_Gallery_Storage extends C_Component
2616
  $this->object->_delete_gallery_directory($abspath);
2617
  }
2618
  }
 
 
 
 
 
2619
  function delete_image($image, $size = FALSE)
2620
  {
2621
  $retval = FALSE;
@@ -2721,7 +2796,7 @@ class C_Gallery_Storage extends C_Component
2721
  $i = 1;
2722
  while (file_exists($new_file_path)) {
2723
  $i++;
2724
- $new_file_path = $path . DIRECTORY_SEPARATOR . $i . '_' . $image->filename;
2725
  }
2726
  if (@copy($image_abspath, $new_file_path)) {
2727
  $upload_id = wp_insert_attachment(['guid' => $new_file_path, 'post_mime_type' => $new_file_mime, 'post_title' => preg_replace('/\\.[^.]+$/', '', $image->alttext), 'post_content' => '', 'post_status' => 'inherit'], $new_file_path);
@@ -3021,12 +3096,13 @@ class C_Gallery_Storage extends C_Component
3021
  }
3022
  /**
3023
  * Uploads base64 file to a gallery
 
3024
  * @param int|stdClass|C_Gallery $gallery
3025
- * @param $data base64-encoded string of data representing the image
3026
  * @param string|false (optional) $filename specifies the name of the file
3027
  * @param int|false $image_id (optional)
3028
  * @param bool $override (optional)
3029
- * @return C_Image
3030
  */
3031
  function upload_base64_image($gallery, $data, $filename = FALSE, $image_id = FALSE, $override = FALSE, $move = FALSE)
3032
  {
@@ -3409,8 +3485,9 @@ class Mixin_Gallery_Image_Mapper extends Mixin
3409
  // If not set already, we'll add an exclude property. This is used
3410
  // by NextGEN Gallery itself, as well as the Attach to Post module
3411
  $this->object->_set_default_value($entity, 'exclude', 0);
3412
- // Ensure that the object has a description attribute
3413
  $this->object->_set_default_value($entity, 'description', '');
 
3414
  // If not set already, set a default sortorder
3415
  $this->object->_set_default_value($entity, 'sortorder', 0);
3416
  // The imagedate must be set
@@ -4399,7 +4476,6 @@ class C_NextGen_Metadata extends C_Component
4399
  */
4400
  function get_date_time()
4401
  {
4402
- $date = time();
4403
  // Try getting the created_timestamp field
4404
  $date = $this->exif_date2ts($this->get_META('created_timestamp'));
4405
  if (!$date) {
@@ -4739,7 +4815,7 @@ class C_NggLegacy_Thumbnail
4739
  $channels = 3;
4740
  break;
4741
  case 'WEBP':
4742
- $CHANNEL = $imageInfo['bits'];
4743
  break;
4744
  }
4745
  }
@@ -5306,8 +5382,11 @@ class C_NggLegacy_Thumbnail
5306
  * @param int $wmSize
5307
  * @param int $wmOpaque
5308
  */
5309
- function watermarkCreateText($color = '000000', $wmFont, $wmSize = 10, $wmOpaque = 90)
5310
  {
 
 
 
5311
  // set font path
5312
  $wmFontPath = NGGALLERY_ABSPATH . "fonts/" . $wmFont;
5313
  if (!is_readable($wmFontPath)) {
@@ -5341,16 +5420,16 @@ class C_NggLegacy_Thumbnail
5341
  $lines[] = trim($line);
5342
  // use this string to determine our largest possible line height
5343
  $line_dimensions = $this->ImageTTFBBoxDimensions($wmSize, 0, $this->correct_gd_unc_path($wmFontPath), 'MXQJALYmxqjabdfghjklpqry019`@$^&*(,!132');
5344
- $line_height = $line_dimensions['height'] * 1.05;
5345
  // Create an image to apply our text to
5346
- $this->workingImage = ImageCreateTrueColor($watermark_image_width, count($lines) * $line_height);
5347
  ImageSaveAlpha($this->workingImage, true);
5348
  ImageAlphaBlending($this->workingImage, false);
5349
  $bgText = imagecolorallocatealpha($this->workingImage, 255, 255, 255, 127);
5350
  imagefill($this->workingImage, 0, 0, $bgText);
5351
- $wmTransp = 127 - $wmOpaque * 1.27;
5352
  $rgb = $this->hex2rgb($color, false);
5353
- $TextColor = imagecolorallocatealpha($this->workingImage, $rgb[0], $rgb[1], $rgb[2], $wmTransp);
5354
  // Put text on the image, line-by-line
5355
  $y_pos = $wmSize;
5356
  foreach ($lines as $line) {
@@ -5480,9 +5559,9 @@ class C_NggLegacy_Thumbnail
5480
  function imagecopymerge_alpha($destination_image, $source_image, $destination_x, $destination_y, $source_x, $source_y, $source_w, $source_h, $pct)
5481
  {
5482
  $cut = imagecreatetruecolor($source_w, $source_h);
5483
- imagecopy($cut, $destination_image, 0, 0, $destination_x, $destination_y, $source_w, $source_h);
5484
  imagecopy($cut, $source_image, 0, 0, $source_x, $source_y, $source_w, $source_h);
5485
- imagecopymerge($destination_image, $cut, $destination_x, $destination_y, 0, 0, $source_w, $source_h, $pct);
5486
  }
5487
  /**
5488
  * Modfied imagecopyresampled function to save transparent images
@@ -5827,7 +5906,7 @@ class Mixin_GalleryStorage_Base_Upload extends Mixin
5827
  if (preg_match("#_backup\$#", $file_abspath)) {
5828
  $files_to_import[] = $file_abspath;
5829
  continue;
5830
- } elseif (in_array($file_abspath . "_backup", $files) || strpos("thumbs_", $file_abspath) !== FALSE) {
5831
  continue;
5832
  }
5833
  $files_to_import[] = $file_abspath;
481
  $size_prefix = $prefix_list['size'];
482
  $flags_prefix = $prefix_list['flags'];
483
  $max_value_length = $prefix_list['max_value_length'];
484
+ $size_name = '';
485
+ $id_name = '';
486
+ $params = [];
487
  if (!$is_only_size_name) {
 
 
 
 
488
  $name = M_I18n::mb_basename($name);
489
  }
490
  $size_index = strrpos($name, $size_prefix);
612
  return self::$_instances[$context];
613
  }
614
  }
615
+ // 0.9.10 is compatible with PHP 8.0 but requires 7.2.0 as its minimum.
616
+ if (version_compare(phpversion(), '7.2.0', '>=')) {
617
+ require_once 'pel-0.9.10/autoload.php';
618
+ } else {
619
+ require_once 'pel-0.9.9/autoload.php';
620
+ }
621
  use lsolesen\pel\PelDataWindow;
622
  use lsolesen\pel\PelJpeg;
623
  use lsolesen\pel\PelTiff;
741
  return FALSE;
742
  }
743
  }
744
+ // In case bcmath isn't enabled we use these simple wrappers.
745
+ static function bcadd($one, $two, $scale = NULL)
746
+ {
747
+ if (!function_exists('bcadd')) {
748
+ return floatval($one) + floatval($two);
749
+ } else {
750
+ return bcadd($one, $two, $scale);
751
+ }
752
+ }
753
+ static function bcmul($one, $two, $scale = NULL)
754
+ {
755
+ if (!function_exists('bcmul')) {
756
+ return floatval($one) * floatval($two);
757
+ } else {
758
+ return bcmul($one, $two, $scale);
759
+ }
760
+ }
761
+ static function bcpow($one, $two, $scale = NULL)
762
+ {
763
+ if (!function_exists('bcpow')) {
764
+ return floatval($one) ** floatval($two);
765
+ } else {
766
+ return bcpow($one, $two, $scale);
767
+ }
768
+ }
769
+ /**
770
+ * Use bcmath as a replacement to hexdec() to handle numbers than PHP_INT_MAX. Also validates the $hex parameter using ctypes.
771
+ *
772
+ * @param string $hex
773
+ * @return float|int|string|null
774
+ */
775
+ public static function bchexdec($hex)
776
+ {
777
+ // Ensure $hex is actually a valid hex number and won't generate deprecated conversion warnings on PHP 7.4+
778
+ if (!ctype_xdigit($hex)) {
779
+ return NULL;
780
+ }
781
+ $decimal = 0;
782
+ $length = strlen($hex);
783
+ for ($i = 1; $i <= $length; $i++) {
784
+ $decimal = self::bcadd($decimal, self::bcmul(strval(hexdec($hex[$i - 1])), self::bcpow('16', strval($length - $i))));
785
+ }
786
+ return $decimal;
787
+ }
788
  /**
789
  * @param string $filename
790
  * @param array $data
814
  // This can cause errors if incorrectly pointed at a non-JPEG file
815
  try {
816
  // Loop through each JPEG segment in search of region 13
817
+ while ((self::bchexdec(substr($new_file_contents, 0, 2)) & 0xfff0) === 0xffe0) {
818
  $segment_length = hexdec(substr($new_file_contents, 2, 2)) & 0xffff;
819
  $segment_number = hexdec(substr($new_file_contents, 1, 1)) & 0xf;
820
  // Not a segment we're interested in
1476
  $watermark = isset($params['watermark']) ? $params['watermark'] : NULL;
1477
  $reflection = isset($params['reflection']) ? $params['reflection'] : NULL;
1478
  $rotation = isset($params['rotation']) ? $params['rotation'] : NULL;
1479
+ $flip = isset($params['flip']) ? $params['flip'] : '';
1480
  $destpath = NULL;
1481
  $thumbnail = NULL;
1482
  $result = $this->object->calculate_image_clone_result($image_path, $clone_path, $params);
1592
  }
1593
  if ($rotation && in_array(abs($rotation), array(90, 180, 270))) {
1594
  $thumbnail->rotateImageAngle($rotation);
 
 
 
1595
  }
1596
  $flip = strtolower($flip);
1597
  if ($flip && in_array($flip, array('h', 'v', 'hv'))) {
1602
  if ($reflection) {
1603
  $thumbnail->createReflection(40, 40, 50, FALSE, '#a4a4a4');
1604
  }
1605
+ // Force format
1606
  if ($clone_format != null && isset($format_list[$clone_format])) {
 
1607
  $thumbnail->format = strtoupper($format_list[$clone_format]);
1608
  }
1609
  $thumbnail = apply_filters('ngg_before_save_thumbnail', $thumbnail);
2113
  function _get_computed_image_abspath($image, $size = 'full', $check_existance = FALSE)
2114
  {
2115
  $retval = NULL;
 
2116
  // If we have the id, get the actual image entity
2117
  if (is_numeric($image)) {
2118
  $image = $this->object->_image_mapper->find($image);
2119
  }
2120
+ // Ensure we have the image entity - user could have passed in an incorrect id
 
2121
  if (is_object($image)) {
2122
  if ($gallery_path = $this->object->get_gallery_abspath($image->galleryid)) {
2123
  $folder = $prefix = $size;
2156
  $image_path = path_join($this->object->get_cache_abspath($image->galleryid), $dynthumbs->get_image_name($image, $params));
2157
  // Filename is not found in meta, nor dynamic
2158
  } else {
2159
+ $settings = C_NextGen_Settings::get_instance();
2160
+ // This next bit is annoying but necessary for legacy reasons. NextGEN until 3.19 stored thumbnails
2161
+ // with a filename of "thumbs_(whatever.jpg)" which Google indexes as "thumbswhatever.jpg" which is
2162
+ // not good for SEO. From 3.19 on the default setting is "thumbs-" but we must account for legacy
2163
+ // sites.
2164
  $image_path = path_join($gallery_path, $folder);
2165
+ $new_thumb_path = path_join($image_path, "{$prefix}-{$image->filename}");
2166
+ $old_thumb_path = path_join($image_path, "{$prefix}_{$image->filename}");
2167
+ if ($settings->get('dynamic_image_filename_separator_use_dash', FALSE)) {
2168
+ // Check for thumbs- first
2169
+ if (file_exists($new_thumb_path)) {
2170
+ $image_path = $new_thumb_path;
2171
+ } elseif (file_exists($old_thumb_path)) {
2172
+ // Check for thumbs_ as a fallback
2173
+ $image_path = $old_thumb_path;
2174
+ } else {
2175
+ // The thumbnail file does not exist, default to thumbs-
2176
+ $image_path = $new_thumb_path;
2177
+ }
2178
+ } else {
2179
+ // Reversed: the option is disabled so check for thumbs_
2180
+ if (file_exists($old_thumb_path)) {
2181
+ $image_path = $old_thumb_path;
2182
+ } elseif (file_exists($new_thumb_path)) {
2183
+ // In case the user has switched back and forth, check for thumbs-
2184
+ $image_path = $new_thumb_path;
2185
+ } else {
2186
+ // Default to thumbs_ per the site setting
2187
+ $image_path = $old_thumb_path;
2188
+ }
2189
+ }
2190
  }
2191
  }
2192
  $retval = $image_path;
2596
  if (is_numeric($image)) {
2597
  $image = $image_mapper->find($image);
2598
  }
2599
+ $image_abspath = $this->object->get_image_abspath($image, 'backup') ?: $this->object->get_image_abspath($image);
2600
+ if ($image_abspath) {
2601
  // Import the image; this will copy the main file
2602
  $new_image_id = $this->object->import_image_file($dst_gallery, $image_abspath, $image->filename);
2603
  if ($new_image_id) {
2686
  $this->object->_delete_gallery_directory($abspath);
2687
  }
2688
  }
2689
+ /**
2690
+ * @param int|C_Image $image
2691
+ * @param string|FALSE $size
2692
+ * @return bool
2693
+ */
2694
  function delete_image($image, $size = FALSE)
2695
  {
2696
  $retval = FALSE;
2796
  $i = 1;
2797
  while (file_exists($new_file_path)) {
2798
  $i++;
2799
+ $new_file_path = $path . DIRECTORY_SEPARATOR . $i . '-' . $image->filename;
2800
  }
2801
  if (@copy($image_abspath, $new_file_path)) {
2802
  $upload_id = wp_insert_attachment(['guid' => $new_file_path, 'post_mime_type' => $new_file_mime, 'post_title' => preg_replace('/\\.[^.]+$/', '', $image->alttext), 'post_content' => '', 'post_status' => 'inherit'], $new_file_path);
3096
  }
3097
  /**
3098
  * Uploads base64 file to a gallery
3099
+ *
3100
  * @param int|stdClass|C_Gallery $gallery
3101
+ * @param string $data base64-encoded string of data representing the image
3102
  * @param string|false (optional) $filename specifies the name of the file
3103
  * @param int|false $image_id (optional)
3104
  * @param bool $override (optional)
3105
+ * @return bool|int
3106
  */
3107
  function upload_base64_image($gallery, $data, $filename = FALSE, $image_id = FALSE, $override = FALSE, $move = FALSE)
3108
  {
3485
  // If not set already, we'll add an exclude property. This is used
3486
  // by NextGEN Gallery itself, as well as the Attach to Post module
3487
  $this->object->_set_default_value($entity, 'exclude', 0);
3488
+ // Ensure that the object has description and alttext attributes
3489
  $this->object->_set_default_value($entity, 'description', '');
3490
+ $this->object->_set_default_value($entity, 'alttext', '');
3491
  // If not set already, set a default sortorder
3492
  $this->object->_set_default_value($entity, 'sortorder', 0);
3493
  // The imagedate must be set
4476
  */
4477
  function get_date_time()
4478
  {
 
4479
  // Try getting the created_timestamp field
4480
  $date = $this->exif_date2ts($this->get_META('created_timestamp'));
4481
  if (!$date) {
4815
  $channels = 3;
4816
  break;
4817
  case 'WEBP':
4818
+ $channels = $imageInfo['bits'];
4819
  break;
4820
  }
4821
  }
5382
  * @param int $wmSize
5383
  * @param int $wmOpaque
5384
  */
5385
+ function watermarkCreateText($color, $wmFont, $wmSize = 10, $wmOpaque = 90)
5386
  {
5387
+ if (!$color) {
5388
+ $color = '000000';
5389
+ }
5390
  // set font path
5391
  $wmFontPath = NGGALLERY_ABSPATH . "fonts/" . $wmFont;
5392
  if (!is_readable($wmFontPath)) {
5420
  $lines[] = trim($line);
5421
  // use this string to determine our largest possible line height
5422
  $line_dimensions = $this->ImageTTFBBoxDimensions($wmSize, 0, $this->correct_gd_unc_path($wmFontPath), 'MXQJALYmxqjabdfghjklpqry019`@$^&*(,!132');
5423
+ $line_height = (float) $line_dimensions['height'] * 1.05;
5424
  // Create an image to apply our text to
5425
+ $this->workingImage = ImageCreateTrueColor($watermark_image_width, (int) (count($lines) * $line_height));
5426
  ImageSaveAlpha($this->workingImage, true);
5427
  ImageAlphaBlending($this->workingImage, false);
5428
  $bgText = imagecolorallocatealpha($this->workingImage, 255, 255, 255, 127);
5429
  imagefill($this->workingImage, 0, 0, $bgText);
5430
+ $wmTransp = 127 - (int) $wmOpaque * 1.27;
5431
  $rgb = $this->hex2rgb($color, false);
5432
+ $TextColor = imagecolorallocatealpha($this->workingImage, (int) $rgb[0], (int) $rgb[1], (int) $rgb[2], (int) $wmTransp);
5433
  // Put text on the image, line-by-line
5434
  $y_pos = $wmSize;
5435
  foreach ($lines as $line) {
5559
  function imagecopymerge_alpha($destination_image, $source_image, $destination_x, $destination_y, $source_x, $source_y, $source_w, $source_h, $pct)
5560
  {
5561
  $cut = imagecreatetruecolor($source_w, $source_h);
5562
+ imagecopy($cut, $destination_image, 0, 0, (int) $destination_x, (int) $destination_y, (int) $source_w, (int) $source_h);
5563
  imagecopy($cut, $source_image, 0, 0, $source_x, $source_y, $source_w, $source_h);
5564
+ imagecopymerge($destination_image, $cut, (int) $destination_x, (int) $destination_y, 0, 0, (int) $source_w, (int) $source_h, (int) $pct);
5565
  }
5566
  /**
5567
  * Modfied imagecopyresampled function to save transparent images
5906
  if (preg_match("#_backup\$#", $file_abspath)) {
5907
  $files_to_import[] = $file_abspath;
5908
  continue;
5909
+ } elseif (in_array([$file_abspath . "_backup", 'thumbs_' . $file_abspath, 'thumbs-' . $file_abspath], $files)) {
5910
  continue;
5911
  }
5912
  $files_to_import[] = $file_abspath;
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/AUTHORS ADDED
@@ -0,0 +1,53 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ AUTHORS file for PEL: PHP Exif Library. A library with support for
2
+ reading and writing Exif headers in JPEG and TIFF images using PHP.
3
+
4
+ Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
5
+ Copyright (c) 2008, 2009 Lars Olesen
6
+ Copyright (c) 2015 Johannes Weberhofer
7
+ Licensed under the GNU GPL, see COPYING for details.
8
+
9
+
10
+ Credits
11
+ *******
12
+
13
+ PEL is written by Martin Geisler <mgeisler@users.sourceforge.net> and
14
+ is now maintained by Lars Olesen <lars@intraface.dk>
15
+ and <jweberhofer@weberhofer.at>
16
+
17
+ The source started out as a port of the nice, clean C code found in
18
+ libexif. Most of the translations included with PEL also originates
19
+ from the libexif project, see below for details.
20
+
21
+
22
+ Test Image Contributors
23
+ ***********************
24
+
25
+ Bernhard Bittel: Nikon E950 and E5000 test images.
26
+
27
+ Stéphanie Bittel: Canon IXUS II test image.
28
+
29
+ Lars Geisler: Nikon Coolscan IV ED test image.
30
+
31
+ Mikkel Krøigård: Canon PowerShot S60 test image.
32
+
33
+ Paul Mitchum: Pentax *ist DS and Olympus C-5050z test images.
34
+
35
+ Lisbeth Nygaard Pedersen: Leica D-LUX test image.
36
+
37
+ Thomas B. Pedersen: Olympus C-50z and C-765z test images.
38
+
39
+
40
+ Translators
41
+ ***********
42
+
43
+ Danish: Martin Geisler.
44
+
45
+ French: Arnaud Launay (for libexif) and David Lesieur.
46
+
47
+ German: Hans Ulrich Niedermann, Lutz Möller (for libexif).
48
+
49
+ Japanese: Tadashi Jokagi.
50
+
51
+ Polish: Jakub Bogusz (for libexif).
52
+
53
+ Spanish: Fabian Mandelbaum (for libexif).
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/COPYING ADDED
@@ -0,0 +1,340 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ GNU GENERAL PUBLIC LICENSE
2
+ Version 2, June 1991
3
+
4
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
5
+ 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
6
+ Everyone is permitted to copy and distribute verbatim copies
7
+ of this license document, but changing it is not allowed.
8
+
9
+ Preamble
10
+
11
+ The licenses for most software are designed to take away your
12
+ freedom to share and change it. By contrast, the GNU General Public
13
+ License is intended to guarantee your freedom to share and change free
14
+ software--to make sure the software is free for all its users. This
15
+ General Public License applies to most of the Free Software
16
+ Foundation's software and to any other program whose authors commit to
17
+ using it. (Some other Free Software Foundation software is covered by
18
+ the GNU Library General Public License instead.) You can apply it to
19
+ your programs, too.
20
+
21
+ When we speak of free software, we are referring to freedom, not
22
+ price. Our General Public Licenses are designed to make sure that you
23
+ have the freedom to distribute copies of free software (and charge for
24
+ this service if you wish), that you receive source code or can get it
25
+ if you want it, that you can change the software or use pieces of it
26
+ in new free programs; and that you know you can do these things.
27
+
28
+ To protect your rights, we need to make restrictions that forbid
29
+ anyone to deny you these rights or to ask you to surrender the rights.
30
+ These restrictions translate to certain responsibilities for you if you
31
+ distribute copies of the software, or if you modify it.
32
+
33
+ For example, if you distribute copies of such a program, whether
34
+ gratis or for a fee, you must give the recipients all the rights that
35
+ you have. You must make sure that they, too, receive or can get the
36
+ source code. And you must show them these terms so they know their
37
+ rights.
38
+
39
+ We protect your rights with two steps: (1) copyright the software, and
40
+ (2) offer you this license which gives you legal permission to copy,
41
+ distribute and/or modify the software.
42
+
43
+ Also, for each author's protection and ours, we want to make certain
44
+ that everyone understands that there is no warranty for this free
45
+ software. If the software is modified by someone else and passed on, we
46
+ want its recipients to know that what they have is not the original, so
47
+ that any problems introduced by others will not reflect on the original
48
+ authors' reputations.
49
+
50
+ Finally, any free program is threatened constantly by software
51
+ patents. We wish to avoid the danger that redistributors of a free
52
+ program will individually obtain patent licenses, in effect making the
53
+ program proprietary. To prevent this, we have made it clear that any
54
+ patent must be licensed for everyone's free use or not licensed at all.
55
+
56
+ The precise terms and conditions for copying, distribution and
57
+ modification follow.
58
+
59
+ GNU GENERAL PUBLIC LICENSE
60
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
61
+
62
+ 0. This License applies to any program or other work which contains
63
+ a notice placed by the copyright holder saying it may be distributed
64
+ under the terms of this General Public License. The "Program", below,
65
+ refers to any such program or work, and a "work based on the Program"
66
+ means either the Program or any derivative work under copyright law:
67
+ that is to say, a work containing the Program or a portion of it,
68
+ either verbatim or with modifications and/or translated into another
69
+ language. (Hereinafter, translation is included without limitation in
70
+ the term "modification".) Each licensee is addressed as "you".
71
+
72
+ Activities other than copying, distribution and modification are not
73
+ covered by this License; they are outside its scope. The act of
74
+ running the Program is not restricted, and the output from the Program
75
+ is covered only if its contents constitute a work based on the
76
+ Program (independent of having been made by running the Program).
77
+ Whether that is true depends on what the Program does.
78
+
79
+ 1. You may copy and distribute verbatim copies of the Program's
80
+ source code as you receive it, in any medium, provided that you
81
+ conspicuously and appropriately publish on each copy an appropriate
82
+ copyright notice and disclaimer of warranty; keep intact all the
83
+ notices that refer to this License and to the absence of any warranty;
84
+ and give any other recipients of the Program a copy of this License
85
+ along with the Program.
86
+
87
+ You may charge a fee for the physical act of transferring a copy, and
88
+ you may at your option offer warranty protection in exchange for a fee.
89
+
90
+ 2. You may modify your copy or copies of the Program or any portion
91
+ of it, thus forming a work based on the Program, and copy and
92
+ distribute such modifications or work under the terms of Section 1
93
+ above, provided that you also meet all of these conditions:
94
+
95
+ a) You must cause the modified files to carry prominent notices
96
+ stating that you changed the files and the date of any change.
97
+
98
+ b) You must cause any work that you distribute or publish, that in
99
+ whole or in part contains or is derived from the Program or any
100
+ part thereof, to be licensed as a whole at no charge to all third
101
+ parties under the terms of this License.
102
+
103
+ c) If the modified program normally reads commands interactively
104
+ when run, you must cause it, when started running for such
105
+ interactive use in the most ordinary way, to print or display an
106
+ announcement including an appropriate copyright notice and a
107
+ notice that there is no warranty (or else, saying that you provide
108
+ a warranty) and that users may redistribute the program under
109
+ these conditions, and telling the user how to view a copy of this
110
+ License. (Exception: if the Program itself is interactive but
111
+ does not normally print such an announcement, your work based on
112
+ the Program is not required to print an announcement.)
113
+
114
+ These requirements apply to the modified work as a whole. If
115
+ identifiable sections of that work are not derived from the Program,
116
+ and can be reasonably considered independent and separate works in
117
+ themselves, then this License, and its terms, do not apply to those
118
+ sections when you distribute them as separate works. But when you
119
+ distribute the same sections as part of a whole which is a work based
120
+ on the Program, the distribution of the whole must be on the terms of
121
+ this License, whose permissions for other licensees extend to the
122
+ entire whole, and thus to each and every part regardless of who wrote it.
123
+
124
+ Thus, it is not the intent of this section to claim rights or contest
125
+ your rights to work written entirely by you; rather, the intent is to
126
+ exercise the right to control the distribution of derivative or
127
+ collective works based on the Program.
128
+
129
+ In addition, mere aggregation of another work not based on the Program
130
+ with the Program (or with a work based on the Program) on a volume of
131
+ a storage or distribution medium does not bring the other work under
132
+ the scope of this License.
133
+
134
+ 3. You may copy and distribute the Program (or a work based on it,
135
+ under Section 2) in object code or executable form under the terms of
136
+ Sections 1 and 2 above provided that you also do one of the following:
137
+
138
+ a) Accompany it with the complete corresponding machine-readable
139
+ source code, which must be distributed under the terms of Sections
140
+ 1 and 2 above on a medium customarily used for software interchange; or,
141
+
142
+ b) Accompany it with a written offer, valid for at least three
143
+ years, to give any third party, for a charge no more than your
144
+ cost of physically performing source distribution, a complete
145
+ machine-readable copy of the corresponding source code, to be
146
+ distributed under the terms of Sections 1 and 2 above on a medium
147
+ customarily used for software interchange; or,
148
+
149
+ c) Accompany it with the information you received as to the offer
150
+ to distribute corresponding source code. (This alternative is
151
+ allowed only for noncommercial distribution and only if you
152
+ received the program in object code or executable form with such
153
+ an offer, in accord with Subsection b above.)
154
+
155
+ The source code for a work means the preferred form of the work for
156
+ making modifications to it. For an executable work, complete source
157
+ code means all the source code for all modules it contains, plus any
158
+ associated interface definition files, plus the scripts used to
159
+ control compilation and installation of the executable. However, as a
160
+ special exception, the source code distributed need not include
161
+ anything that is normally distributed (in either source or binary
162
+ form) with the major components (compiler, kernel, and so on) of the
163
+ operating system on which the executable runs, unless that component
164
+ itself accompanies the executable.
165
+
166
+ If distribution of executable or object code is made by offering
167
+ access to copy from a designated place, then offering equivalent
168
+ access to copy the source code from the same place counts as
169
+ distribution of the source code, even though third parties are not
170
+ compelled to copy the source along with the object code.
171
+
172
+ 4. You may not copy, modify, sublicense, or distribute the Program
173
+ except as expressly provided under this License. Any attempt
174
+ otherwise to copy, modify, sublicense or distribute the Program is
175
+ void, and will automatically terminate your rights under this License.
176
+ However, parties who have received copies, or rights, from you under
177
+ this License will not have their licenses terminated so long as such
178
+ parties remain in full compliance.
179
+
180
+ 5. You are not required to accept this License, since you have not
181
+ signed it. However, nothing else grants you permission to modify or
182
+ distribute the Program or its derivative works. These actions are
183
+ prohibited by law if you do not accept this License. Therefore, by
184
+ modifying or distributing the Program (or any work based on the
185
+ Program), you indicate your acceptance of this License to do so, and
186
+ all its terms and conditions for copying, distributing or modifying
187
+ the Program or works based on it.
188
+
189
+ 6. Each time you redistribute the Program (or any work based on the
190
+ Program), the recipient automatically receives a license from the
191
+ original licensor to copy, distribute or modify the Program subject to
192
+ these terms and conditions. You may not impose any further
193
+ restrictions on the recipients' exercise of the rights granted herein.
194
+ You are not responsible for enforcing compliance by third parties to
195
+ this License.
196
+
197
+ 7. If, as a consequence of a court judgment or allegation of patent
198
+ infringement or for any other reason (not limited to patent issues),
199
+ conditions are imposed on you (whether by court order, agreement or
200
+ otherwise) that contradict the conditions of this License, they do not
201
+ excuse you from the conditions of this License. If you cannot
202
+ distribute so as to satisfy simultaneously your obligations under this
203
+ License and any other pertinent obligations, then as a consequence you
204
+ may not distribute the Program at all. For example, if a patent
205
+ license would not permit royalty-free redistribution of the Program by
206
+ all those who receive copies directly or indirectly through you, then
207
+ the only way you could satisfy both it and this License would be to
208
+ refrain entirely from distribution of the Program.
209
+
210
+ If any portion of this section is held invalid or unenforceable under
211
+ any particular circumstance, the balance of the section is intended to
212
+ apply and the section as a whole is intended to apply in other
213
+ circumstances.
214
+
215
+ It is not the purpose of this section to induce you to infringe any
216
+ patents or other property right claims or to contest validity of any
217
+ such claims; this section has the sole purpose of protecting the
218
+ integrity of the free software distribution system, which is
219
+ implemented by public license practices. Many people have made
220
+ generous contributions to the wide range of software distributed
221
+ through that system in reliance on consistent application of that
222
+ system; it is up to the author/donor to decide if he or she is willing
223
+ to distribute software through any other system and a licensee cannot
224
+ impose that choice.
225
+
226
+ This section is intended to make thoroughly clear what is believed to
227
+ be a consequence of the rest of this License.
228
+
229
+ 8. If the distribution and/or use of the Program is restricted in
230
+ certain countries either by patents or by copyrighted interfaces, the
231
+ original copyright holder who places the Program under this License
232
+ may add an explicit geographical distribution limitation excluding
233
+ those countries, so that distribution is permitted only in or among
234
+ countries not thus excluded. In such case, this License incorporates
235
+ the limitation as if written in the body of this License.
236
+
237
+ 9. The Free Software Foundation may publish revised and/or new versions
238
+ of the General Public License from time to time. Such new versions will
239
+ be similar in spirit to the present version, but may differ in detail to
240
+ address new problems or concerns.
241
+
242
+ Each version is given a distinguishing version number. If the Program
243
+ specifies a version number of this License which applies to it and "any
244
+ later version", you have the option of following the terms and conditions
245
+ either of that version or of any later version published by the Free
246
+ Software Foundation. If the Program does not specify a version number of
247
+ this License, you may choose any version ever published by the Free Software
248
+ Foundation.
249
+
250
+ 10. If you wish to incorporate parts of the Program into other free
251
+ programs whose distribution conditions are different, write to the author
252
+ to ask for permission. For software which is copyrighted by the Free
253
+ Software Foundation, write to the Free Software Foundation; we sometimes
254
+ make exceptions for this. Our decision will be guided by the two goals
255
+ of preserving the free status of all derivatives of our free software and
256
+ of promoting the sharing and reuse of software generally.
257
+
258
+ NO WARRANTY
259
+
260
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
261
+ FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
262
+ OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
263
+ PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
264
+ OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
265
+ MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
266
+ TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
267
+ PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
268
+ REPAIR OR CORRECTION.
269
+
270
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
271
+ WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
272
+ REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
273
+ INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
274
+ OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
275
+ TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
276
+ YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
277
+ PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
278
+ POSSIBILITY OF SUCH DAMAGES.
279
+
280
+ END OF TERMS AND CONDITIONS
281
+
282
+ How to Apply These Terms to Your New Programs
283
+
284
+ If you develop a new program, and you want it to be of the greatest
285
+ possible use to the public, the best way to achieve this is to make it
286
+ free software which everyone can redistribute and change under these terms.
287
+
288
+ To do so, attach the following notices to the program. It is safest
289
+ to attach them to the start of each source file to most effectively
290
+ convey the exclusion of warranty; and each file should have at least
291
+ the "copyright" line and a pointer to where the full notice is found.
292
+
293
+ <one line to give the program's name and a brief idea of what it does.>
294
+ Copyright (C) <year> <name of author>
295
+
296
+ This program is free software; you can redistribute it and/or modify
297
+ it under the terms of the GNU General Public License as published by
298
+ the Free Software Foundation; either version 2 of the License, or
299
+ (at your option) any later version.
300
+
301
+ This program is distributed in the hope that it will be useful,
302
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
303
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
304
+ GNU General Public License for more details.
305
+
306
+ You should have received a copy of the GNU General Public License
307
+ along with this program; if not, write to the Free Software
308
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
309
+
310
+
311
+ Also add information on how to contact you by electronic and paper mail.
312
+
313
+ If the program is interactive, make it output a short notice like this
314
+ when it starts in an interactive mode:
315
+
316
+ Gnomovision version 69, Copyright (C) year name of author
317
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
318
+ This is free software, and you are welcome to redistribute it
319
+ under certain conditions; type `show c' for details.
320
+
321
+ The hypothetical commands `show w' and `show c' should show the appropriate
322
+ parts of the General Public License. Of course, the commands you use may
323
+ be called something other than `show w' and `show c'; they could even be
324
+ mouse-clicks or menu items--whatever suits your program.
325
+
326
+ You should also get your employer (if you work as a programmer) or your
327
+ school, if any, to sign a "copyright disclaimer" for the program, if
328
+ necessary. Here is a sample; alter the names:
329
+
330
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
331
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
332
+
333
+ <signature of Ty Coon>, 1 April 1989
334
+ Ty Coon, President of Vice
335
+
336
+ This General Public License does not permit incorporating your program into
337
+ proprietary programs. If your program is a subroutine library, you may
338
+ consider it more useful to permit linking proprietary applications with the
339
+ library. If this is what you want to do, use the GNU Library General
340
+ Public License instead of this License.
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/autoload.php ADDED
@@ -0,0 +1,36 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * PEL: PHP Exif Library.
4
+ * A library with support for reading and
5
+ * writing all Exif headers in JPEG and TIFF images using PHP.
6
+ *
7
+ * Copyright (C) 2015, Johannes Weberhofer.
8
+ *
9
+ * This program is free software; you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation; either version 2 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program in the file COPYING; if not, write to the
21
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
22
+ * Boston, MA 02110-1301 USA
23
+ */
24
+
25
+ /**
26
+ * Register autoloader for pel
27
+ */
28
+ spl_autoload_register(function ($class) {
29
+ if (substr_compare($class, 'lsolesen\\pel\\', 0, 13) === 0) {
30
+ $classname = str_replace('lsolesen\\pel\\', '', $class);
31
+ $load = realpath(__DIR__ . DIRECTORY_SEPARATOR . 'src' . DIRECTORY_SEPARATOR . $classname . '.php');
32
+ if ($load !== false) {
33
+ include_once realpath($load);
34
+ }
35
+ }
36
+ });
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/da.po ADDED
@@ -0,0 +1,1182 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Danish translation for the PHP Exif Library (PEL).
2
+ # Copyright (C) 2004, 2005, 2006 Martin Geisler
3
+ # This file is distributed under the term of the GPL.
4
+ # Martin Geisler <mgeisler@mgeisler.net>, 2004.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PEL\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2006-11-19 21:26+0100\n"
11
+ "PO-Revision-Date: 2006-11-19 21:27+0100\n"
12
+ "Last-Translator: Martin Geisler <mgeisler@mgeisler.net>\n"
13
+ "Language-Team: Danish\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
18
+
19
+ #: PelDataWindow.php:517
20
+ #, php-format
21
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
22
+ msgstr "DataWindow: %d bytes i [%d, %d] af %d bytes"
23
+
24
+ #: PelEntryAscii.php:465
25
+ msgid "(Photographer)"
26
+ msgstr "(Fotograf)"
27
+
28
+ #: PelEntryAscii.php:466
29
+ msgid "(Editor)"
30
+ msgstr "(Redaktør)"
31
+
32
+ #: PelEntry.php:369
33
+ #, php-format
34
+ msgid " Tag: 0x%04X (%s)\n"
35
+ msgstr " Tag: 0x%04X (%s)\n"
36
+
37
+ #: PelEntry.php:371
38
+ #, php-format
39
+ msgid " Format : %d (%s)\n"
40
+ msgstr " Format : %d (%s)\n"
41
+
42
+ #: PelEntry.php:373
43
+ #, php-format
44
+ msgid " Components: %d\n"
45
+ msgstr " Komponenter: %d\n"
46
+
47
+ #: PelEntry.php:376
48
+ #, php-format
49
+ msgid " Value : %s\n"
50
+ msgstr " Værdi : %s\n"
51
+
52
+ #: PelEntry.php:377
53
+ #, php-format
54
+ msgid " Text : %s\n"
55
+ msgstr " Tekst : %s\n"
56
+
57
+ #: PelEntryRational.php:136 PelEntryRational.php:141
58
+ #, php-format
59
+ msgid "f/%.01f"
60
+ msgstr "f/%.01f"
61
+
62
+ #: PelEntryRational.php:146
63
+ #, php-format
64
+ msgid "%.1f mm"
65
+ msgstr "%.1f mm"
66
+
67
+ #: PelEntryRational.php:151
68
+ #, php-format
69
+ msgid "%.1f m"
70
+ msgstr "%.1f m"
71
+
72
+ #: PelEntryRational.php:157
73
+ #, php-format
74
+ msgid "1/%d sec."
75
+ msgstr "1/%d sek."
76
+
77
+ #: PelEntryRational.php:159
78
+ #, php-format
79
+ msgid "%d sec."
80
+ msgstr "%d sek."
81
+
82
+ #: PelEntryRational.php:267
83
+ #, php-format
84
+ msgid "%.0f/%.0f sec. (APEX: %d)"
85
+ msgstr "%.0f/%.0f sek. (APEX: %d)"
86
+
87
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
88
+ msgid "Unknown"
89
+ msgstr "Ukendt"
90
+
91
+ #: PelEntryShort.php:144
92
+ msgid "Average"
93
+ msgstr "Gennemsnit"
94
+
95
+ #: PelEntryShort.php:146
96
+ msgid "Center-Weighted Average"
97
+ msgstr "Centervægtet gennemsnit"
98
+
99
+ #: PelEntryShort.php:148
100
+ msgid "Spot"
101
+ msgstr "Punkt"
102
+
103
+ #: PelEntryShort.php:150
104
+ msgid "Multi Spot"
105
+ msgstr "Mange punktet"
106
+
107
+ #: PelEntryShort.php:152
108
+ msgid "Pattern"
109
+ msgstr "Mønster"
110
+
111
+ #: PelEntryShort.php:154
112
+ msgid "Partial"
113
+ msgstr "Delvis"
114
+
115
+ #: PelEntryShort.php:156 PelEntryShort.php:247
116
+ msgid "Other"
117
+ msgstr "Anden"
118
+
119
+ #: PelEntryShort.php:165
120
+ msgid "Uncompressed"
121
+ msgstr "Ukomprimeret"
122
+
123
+ #: PelEntryShort.php:167
124
+ msgid "JPEG compression"
125
+ msgstr "JPEG kompression"
126
+
127
+ #: PelEntryShort.php:177
128
+ msgid "chunky format"
129
+ msgstr "klumpet format"
130
+
131
+ #: PelEntryShort.php:179
132
+ msgid "planar format"
133
+ msgstr "plant format"
134
+
135
+ #: PelEntryShort.php:188 PelEntryShort.php:268
136
+ msgid "Not defined"
137
+ msgstr "Ikke defineret"
138
+
139
+ #: PelEntryShort.php:190
140
+ msgid "One-chip color area sensor"
141
+ msgstr "En chip, farve-område sensor"
142
+
143
+ #: PelEntryShort.php:192
144
+ msgid "Two-chip color area sensor"
145
+ msgstr "To chips, farve-område sensor"
146
+
147
+ #: PelEntryShort.php:194
148
+ msgid "Three-chip color area sensor"
149
+ msgstr "Tre chips, farve-område sensor"
150
+
151
+ #: PelEntryShort.php:196
152
+ msgid "Color sequential area sensor"
153
+ msgstr "Farvesekventiel områdesensor"
154
+
155
+ #: PelEntryShort.php:198
156
+ msgid "Trilinear sensor"
157
+ msgstr "Trilinær sensor"
158
+
159
+ #: PelEntryShort.php:200
160
+ msgid "Color sequential linear sensor"
161
+ msgstr "Farvesekventiel lineær sensor"
162
+
163
+ #: PelEntryShort.php:211
164
+ msgid "Daylight"
165
+ msgstr "Dagslys"
166
+
167
+ #: PelEntryShort.php:213
168
+ msgid "Fluorescent"
169
+ msgstr "Fluorescerende"
170
+
171
+ #: PelEntryShort.php:215
172
+ msgid "Tungsten (incandescent light)"
173
+ msgstr "Tungsten (glødelampe)"
174
+
175
+ #: PelEntryShort.php:217 PelTag.php:1808
176
+ msgid "Flash"
177
+ msgstr "Blitz"
178
+
179
+ #: PelEntryShort.php:219
180
+ msgid "Fine weather"
181
+ msgstr "Fint vejr"
182
+
183
+ #: PelEntryShort.php:221
184
+ msgid "Cloudy weather"
185
+ msgstr "Overskyet vejr"
186
+
187
+ #: PelEntryShort.php:223
188
+ msgid "Shade"
189
+ msgstr "Skygge"
190
+
191
+ #: PelEntryShort.php:225
192
+ msgid "Daylight fluorescent"
193
+ msgstr "Dagslys, fluorescerende"
194
+
195
+ #: PelEntryShort.php:227
196
+ msgid "Day white fluorescent"
197
+ msgstr "Dagslys, hvidt fluorescerende"
198
+
199
+ #: PelEntryShort.php:229
200
+ msgid "Cool white fluorescent"
201
+ msgstr "Koldt hvidt fluorescerende"
202
+
203
+ #: PelEntryShort.php:231
204
+ msgid "White fluorescent"
205
+ msgstr "Hvidt fluorescerende"
206
+
207
+ #: PelEntryShort.php:233
208
+ msgid "Standard light A"
209
+ msgstr "Standard lys A"
210
+
211
+ #: PelEntryShort.php:235
212
+ msgid "Standard light B"
213
+ msgstr "Standard lys B"
214
+
215
+ #: PelEntryShort.php:237
216
+ msgid "Standard light C"
217
+ msgstr "Standard lys A"
218
+
219
+ #: PelEntryShort.php:239
220
+ msgid "D55"
221
+ msgstr "D55"
222
+
223
+ #: PelEntryShort.php:241
224
+ msgid "D65"
225
+ msgstr "D65"
226
+
227
+ #: PelEntryShort.php:243
228
+ msgid "D75"
229
+ msgstr "D75"
230
+
231
+ #: PelEntryShort.php:245
232
+ msgid "ISO studio tungsten"
233
+ msgstr "ISO studie tungsten"
234
+
235
+ #: PelEntryShort.php:257
236
+ msgid "Inch"
237
+ msgstr "Tommer"
238
+
239
+ #: PelEntryShort.php:259
240
+ msgid "Centimeter"
241
+ msgstr "Centimeter"
242
+
243
+ #: PelEntryShort.php:270
244
+ msgid "Manual"
245
+ msgstr "Manuel"
246
+
247
+ #: PelEntryShort.php:272
248
+ msgid "Normal program"
249
+ msgstr "Normalt program"
250
+
251
+ #: PelEntryShort.php:274
252
+ msgid "Aperture priority"
253
+ msgstr "Prioriteret blændetal"
254
+
255
+ #: PelEntryShort.php:276
256
+ msgid "Shutter priority"
257
+ msgstr "Prioriteret lukketid"
258
+
259
+ #: PelEntryShort.php:278
260
+ msgid "Creative program (biased toward depth of field)"
261
+ msgstr "Kreativt program (med henblik på fokusdybde)"
262
+
263
+ #: PelEntryShort.php:280
264
+ msgid "Action program (biased toward fast shutter speed)"
265
+ msgstr "Aktivt program (med henblik på lille lukketid)"
266
+
267
+ #: PelEntryShort.php:282
268
+ msgid "Portrait mode (for closeup photos with the background out of focus"
269
+ msgstr "Højformat indstilling (til nærbilleder med baggrunden ude af fokus)"
270
+
271
+ #: PelEntryShort.php:284
272
+ msgid "Landscape mode (for landscape photos with the background in focus"
273
+ msgstr "Bredformat indstilling (til landskabsbilleder med baggrunden i fokus)"
274
+
275
+ #: PelEntryShort.php:293
276
+ msgid "top - left"
277
+ msgstr "øverst - venstre"
278
+
279
+ #: PelEntryShort.php:295
280
+ msgid "top - right"
281
+ msgstr "øverst - højre"
282
+
283
+ #: PelEntryShort.php:297
284
+ msgid "bottom - right"
285
+ msgstr "nederst - højre"
286
+
287
+ #: PelEntryShort.php:299
288
+ msgid "bottom - left"
289
+ msgstr "nederst - venstre"
290
+
291
+ #: PelEntryShort.php:301
292
+ msgid "left - top"
293
+ msgstr "venstre - øverst"
294
+
295
+ #: PelEntryShort.php:303
296
+ msgid "right - top"
297
+ msgstr "højre - øverst"
298
+
299
+ #: PelEntryShort.php:305
300
+ msgid "right - bottom"
301
+ msgstr "højre - nederst"
302
+
303
+ #: PelEntryShort.php:307
304
+ msgid "left - bottom"
305
+ msgstr "venstre - nederst"
306
+
307
+ #: PelEntryShort.php:316
308
+ msgid "centered"
309
+ msgstr "centreret"
310
+
311
+ #: PelEntryShort.php:318
312
+ msgid "co-sited"
313
+ msgstr ""
314
+
315
+ #: PelEntryShort.php:351
316
+ msgid "Uncalibrated"
317
+ msgstr "Ukalibreret"
318
+
319
+ #: PelEntryShort.php:360
320
+ msgid "Flash did not fire."
321
+ msgstr "Blitzen blev ikke brugt."
322
+
323
+ #: PelEntryShort.php:362
324
+ msgid "Flash fired."
325
+ msgstr "Blitzen blev brugt."
326
+
327
+ #: PelEntryShort.php:364
328
+ msgid "Strobe return light not detected."
329
+ msgstr "Stroboskoplys blev ikke detekteret."
330
+
331
+ #: PelEntryShort.php:366
332
+ msgid "Strobe return light detected."
333
+ msgstr "Stroboskoplys blev detekteret."
334
+
335
+ #: PelEntryShort.php:368
336
+ msgid "Flash fired, compulsory flash mode."
337
+ msgstr "Blitzen affyret, tvungen blitz indstilling."
338
+
339
+ #: PelEntryShort.php:370
340
+ msgid "Flash fired, compulsory flash mode, return light not detected."
341
+ msgstr "Blitzen affyret, tvungen blitz indstilling, returlys ikke detekteret."
342
+
343
+ #: PelEntryShort.php:372
344
+ msgid "Flash fired, compulsory flash mode, return light detected."
345
+ msgstr "Blitzen affyret, tvungen blitz indstilling, returlys detekteret."
346
+
347
+ #: PelEntryShort.php:374
348
+ msgid "Flash did not fire, compulsory flash mode."
349
+ msgstr "Blitzen blev ikke affyret, tvungen blitz indstilling."
350
+
351
+ #: PelEntryShort.php:376
352
+ msgid "Flash did not fire, auto mode."
353
+ msgstr "Blitzen blev ikke affyret, automatisk indstilling."
354
+
355
+ #: PelEntryShort.php:378
356
+ msgid "Flash fired, auto mode."
357
+ msgstr "Blitzen affyret, automatisk indstilling."
358
+
359
+ #: PelEntryShort.php:380
360
+ msgid "Flash fired, auto mode, return light not detected."
361
+ msgstr "Blitzen affyret, automatisk indstilling, returlys ikke detekteret."
362
+
363
+ #: PelEntryShort.php:382
364
+ msgid "Flash fired, auto mode, return light detected."
365
+ msgstr "Blitzen affyret, automatisk indstilling, returlys detekteret."
366
+
367
+ #: PelEntryShort.php:384
368
+ msgid "No flash function."
369
+ msgstr "Ingen blitzfuntion."
370
+
371
+ #: PelEntryShort.php:386
372
+ msgid "Flash fired, red-eye reduction mode."
373
+ msgstr "Blitzen affyret, indstilling for reduktion af røde øjne."
374
+
375
+ #: PelEntryShort.php:388
376
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
377
+ msgstr ""
378
+ "Blitzen affyret, indstilling for reduktion af røde øjne, returlys ikke "
379
+ "detekteret."
380
+
381
+ #: PelEntryShort.php:390
382
+ msgid "Flash fired, red-eye reduction mode, return light detected."
383
+ msgstr ""
384
+ "Blitz affyret, indstilling for reduktion af røde øjne, returlys detekteret."
385
+
386
+ #: PelEntryShort.php:392
387
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
388
+ msgstr ""
389
+ "Blitz affyret, tvungen blitz indstilling, indstilling for reduktion af røde "
390
+ "øjne."
391
+
392
+ #: PelEntryShort.php:394
393
+ msgid ""
394
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
395
+ "detected."
396
+ msgstr ""
397
+ "Blitz affyret, tvungen blitz indstilling, indstilling for reduktion af røde "
398
+ "øjne, returlys ikke detekteret."
399
+
400
+ #: PelEntryShort.php:396
401
+ msgid ""
402
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
403
+ "detected."
404
+ msgstr ""
405
+ "Blitz affyret, tvungen blitz indstilling, indstilling for reduktion af røde "
406
+ "øjne, returlys detekteret."
407
+
408
+ #: PelEntryShort.php:398
409
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
410
+ msgstr ""
411
+ "Blitzen blev ikke affyret, automatisk indstilling, indstilling for reduktion "
412
+ "af røde øjne."
413
+
414
+ #: PelEntryShort.php:400
415
+ msgid "Flash fired, auto mode, red-eye reduction mode."
416
+ msgstr ""
417
+ "Blitzen blev affyret, automatisk indstilling, indstilling for reduktion af "
418
+ "røde øjne."
419
+
420
+ #: PelEntryShort.php:402
421
+ msgid ""
422
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
423
+ msgstr ""
424
+ "Blitzen blev affyret, automatisk indstilling, returlys ikke detekteret, "
425
+ "indstilling for reduktion af røde øjne."
426
+
427
+ #: PelEntryShort.php:404
428
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
429
+ msgstr ""
430
+ "Blitzen blev affyret, automatisk indstilling, returlys detekteret, "
431
+ "indstilling for reduktion af røde øjne."
432
+
433
+ #: PelEntryShort.php:413
434
+ msgid "Normal process"
435
+ msgstr "Normal proces"
436
+
437
+ #: PelEntryShort.php:415
438
+ msgid "Custom process"
439
+ msgstr "Specialproces"
440
+
441
+ #: PelEntryShort.php:424
442
+ msgid "Auto exposure"
443
+ msgstr "Automatisk belysning"
444
+
445
+ #: PelEntryShort.php:426
446
+ msgid "Manual exposure"
447
+ msgstr "Manuel belysning"
448
+
449
+ #: PelEntryShort.php:428
450
+ msgid "Auto bracket"
451
+ msgstr ""
452
+
453
+ #: PelEntryShort.php:437
454
+ msgid "Auto white balance"
455
+ msgstr "Automatisk hvidbalance"
456
+
457
+ #: PelEntryShort.php:439
458
+ msgid "Manual white balance"
459
+ msgstr "Manuel hvidbalance"
460
+
461
+ #: PelEntryShort.php:448
462
+ msgid "Standard"
463
+ msgstr "Standard"
464
+
465
+ #: PelEntryShort.php:450
466
+ msgid "Landscape"
467
+ msgstr "Bredformat"
468
+
469
+ #: PelEntryShort.php:452
470
+ msgid "Portrait"
471
+ msgstr "Højformat"
472
+
473
+ #: PelEntryShort.php:454
474
+ msgid "Night scene"
475
+ msgstr "Natscene"
476
+
477
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
478
+ msgid "Normal"
479
+ msgstr "Normal"
480
+
481
+ #: PelEntryShort.php:465
482
+ msgid "Low gain up"
483
+ msgstr ""
484
+
485
+ #: PelEntryShort.php:467
486
+ msgid "High gain up"
487
+ msgstr ""
488
+
489
+ #: PelEntryShort.php:469
490
+ msgid "Low gain down"
491
+ msgstr ""
492
+
493
+ #: PelEntryShort.php:471
494
+ msgid "High gain down"
495
+ msgstr ""
496
+
497
+ #: PelEntryShort.php:482
498
+ msgid "Low saturation"
499
+ msgstr "Svag farvemætning"
500
+
501
+ #: PelEntryShort.php:484
502
+ msgid "High saturation"
503
+ msgstr "Stærk farvemætning"
504
+
505
+ #: PelEntryShort.php:496
506
+ msgid "Soft"
507
+ msgstr "Blød"
508
+
509
+ #: PelEntryShort.php:498
510
+ msgid "Hard"
511
+ msgstr "Hård"
512
+
513
+ #: PelEntryShort.php:509
514
+ msgid "Macro"
515
+ msgstr "Makro"
516
+
517
+ #: PelEntryShort.php:511
518
+ msgid "Close view"
519
+ msgstr "Lille afstand"
520
+
521
+ #: PelEntryShort.php:513
522
+ msgid "Distant view"
523
+ msgstr "Stor afstand"
524
+
525
+ #: PelEntryShort.php:521
526
+ #, php-format
527
+ msgid "(x,y) = (%d,%d)"
528
+ msgstr "(x,y) = (%d,%d)"
529
+
530
+ #: PelEntryShort.php:523
531
+ #, php-format
532
+ msgid "Within distance %d of (x,y) = (%d,%d)"
533
+ msgstr "Indenfor en afstand %d af (x,y) = (%d,%d)"
534
+
535
+ #: PelEntryShort.php:526
536
+ #, php-format
537
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
538
+ msgstr "Indenfor rektanglet (bredde %d, højre %d) omkring (x,y) = (%d,%d)"
539
+
540
+ #: PelEntryShort.php:531
541
+ #, php-format
542
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
543
+ msgstr "Uventet antal komponenter (%d, forventede 2, 3 eller 4)."
544
+
545
+ #: PelEntryUndefined.php:390
546
+ #, php-format
547
+ msgid "Exif %s"
548
+ msgstr "Exif %s"
549
+
550
+ #: PelEntryUndefined.php:392
551
+ #, php-format
552
+ msgid "Exif Version %s"
553
+ msgstr "Exif version %s"
554
+
555
+ #: PelEntryUndefined.php:396
556
+ #, php-format
557
+ msgid "FlashPix %s"
558
+ msgstr "FlashPix %s"
559
+
560
+ #: PelEntryUndefined.php:398
561
+ #, php-format
562
+ msgid "FlashPix Version %s"
563
+ msgstr "FlashPix version %s"
564
+
565
+ #: PelEntryUndefined.php:402
566
+ #, php-format
567
+ msgid "Interoperability %s"
568
+ msgstr "Interoperability %s"
569
+
570
+ #: PelEntryUndefined.php:404
571
+ #, php-format
572
+ msgid "Interoperability Version %s"
573
+ msgstr "Interoperability version %s"
574
+
575
+ #: PelEntryUndefined.php:410
576
+ #, php-format
577
+ msgid "Version %s"
578
+ msgstr "Version %s"
579
+
580
+ #: PelExif.php:169
581
+ msgid "Dumping Exif data...\n"
582
+ msgstr "Dumper Exif data...\n"
583
+
584
+ #: PelFormat.php:192 PelFormat.php:220
585
+ #, php-format
586
+ msgid "Unknown format: 0x%X"
587
+ msgstr "Ukendt format: 0x%X"
588
+
589
+ #: PelIfd.php:1180
590
+ #, php-format
591
+ msgid "Dumping IFD %s with %d entries...\n"
592
+ msgstr "Dumper IFD %s med %d indgange...\n"
593
+
594
+ #: PelIfd.php:1186
595
+ #, php-format
596
+ msgid "Dumping %d sub IFDs...\n"
597
+ msgstr "Dumper %d under-IFD'er...\n"
598
+
599
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
600
+ #, php-format
601
+ msgid "Unknown marker: 0x%02X"
602
+ msgstr "Ukendt markering: 0x%02X"
603
+
604
+ #: PelJpegMarker.php:302
605
+ msgid "Encoding (baseline)"
606
+ msgstr "Kodning (baseline)"
607
+
608
+ #: PelJpegMarker.php:304
609
+ msgid "Encoding (extended sequential)"
610
+ msgstr "Kodning (udvided sekventiel)"
611
+
612
+ #: PelJpegMarker.php:306
613
+ msgid "Encoding (progressive)"
614
+ msgstr "Kodning (baseline)"
615
+
616
+ #: PelJpegMarker.php:308
617
+ msgid "Encoding (lossless)"
618
+ msgstr "Kodning (baseline)"
619
+
620
+ #: PelJpegMarker.php:310
621
+ msgid "Encoding (differential sequential)"
622
+ msgstr "Kodning (differential sekventiel)"
623
+
624
+ #: PelJpegMarker.php:312
625
+ msgid "Encoding (differential progressive)"
626
+ msgstr "Kodning (differential progressiv)"
627
+
628
+ #: PelJpegMarker.php:314
629
+ msgid "Encoding (differential lossless)"
630
+ msgstr "Kodning (differential tabsfri)"
631
+
632
+ #: PelJpegMarker.php:316
633
+ msgid "Encoding (extended sequential, arithmetic)"
634
+ msgstr "Kodning (udvided sekventiel, aritmetisk)"
635
+
636
+ #: PelJpegMarker.php:318
637
+ msgid "Encoding (progressive, arithmetic)"
638
+ msgstr "Kodning (progressiv, aritmetisk)"
639
+
640
+ #: PelJpegMarker.php:320
641
+ msgid "Encoding (lossless, arithmetic)"
642
+ msgstr "Kodning (tabsfri, aritmetisk)"
643
+
644
+ #: PelJpegMarker.php:322
645
+ msgid "Encoding (differential sequential, arithmetic)"
646
+ msgstr "Kodning (differential sekventiel, aritmetisk)"
647
+
648
+ #: PelJpegMarker.php:324
649
+ msgid "Encoding (differential progressive, arithmetic)"
650
+ msgstr "Kodning (differential progressiv, aritmetisk)"
651
+
652
+ #: PelJpegMarker.php:326
653
+ msgid "Encoding (differential lossless, arithmetic)"
654
+ msgstr "Kodning (differential tabsfri, aritmetisk)"
655
+
656
+ #: PelJpegMarker.php:328
657
+ msgid "Start of image"
658
+ msgstr "Start af billede"
659
+
660
+ #: PelJpegMarker.php:330
661
+ msgid "End of image"
662
+ msgstr "Slutning af billede"
663
+
664
+ #: PelJpegMarker.php:332
665
+ msgid "Start of scan"
666
+ msgstr "Start af skan"
667
+
668
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
669
+ msgid "Comment"
670
+ msgstr "Kommentar"
671
+
672
+ #: PelJpegMarker.php:336
673
+ msgid "Define Huffman table"
674
+ msgstr "Definér Huffman tabel"
675
+
676
+ #: PelJpegMarker.php:338
677
+ msgid "Extension"
678
+ msgstr "Udvidelse"
679
+
680
+ #: PelJpegMarker.php:340
681
+ msgid "Define arithmetic coding conditioning"
682
+ msgstr ""
683
+
684
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
685
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
686
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
687
+ #, php-format
688
+ msgid "Restart %d"
689
+ msgstr "Genstart %d"
690
+
691
+ #: PelJpegMarker.php:358
692
+ msgid "Define quantization table"
693
+ msgstr "Definér kvantitationstabel"
694
+
695
+ #: PelJpegMarker.php:360
696
+ msgid "Define number of lines"
697
+ msgstr "Definér antal linier"
698
+
699
+ #: PelJpegMarker.php:362
700
+ msgid "Define restart interval"
701
+ msgstr "Definér genstart interval"
702
+
703
+ #: PelJpegMarker.php:364
704
+ msgid "Define hierarchical progression"
705
+ msgstr "Definér hierarkisk progression"
706
+
707
+ #: PelJpegMarker.php:366
708
+ msgid "Expand reference component"
709
+ msgstr ""
710
+
711
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
712
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
713
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
714
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
715
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
716
+ #: PelJpegMarker.php:398
717
+ #, php-format
718
+ msgid "Application segment %d"
719
+ msgstr "Applikationssegment %d"
720
+
721
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
722
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
723
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
724
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
725
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
726
+ #, php-format
727
+ msgid "Extension %d"
728
+ msgstr "Udvidelse %d"
729
+
730
+ #: PelJpeg.php:543
731
+ msgid "Dumping JPEG data...\n"
732
+ msgstr "Dumper JPEG data...\n"
733
+
734
+ #: PelJpeg.php:547
735
+ #, php-format
736
+ msgid "Section %d (marker 0x%02X - %s):\n"
737
+ msgstr "Sektion %d (markering 0x%02X - %s):\n"
738
+
739
+ #: PelJpeg.php:549
740
+ #, php-format
741
+ msgid " Description: %s\n"
742
+ msgstr " Beskrivelse: %s\n"
743
+
744
+ #: PelJpeg.php:557
745
+ msgid " Content : Exif data\n"
746
+ msgstr " Indhold : Exif data\n"
747
+
748
+ #: PelJpeg.php:560
749
+ #, php-format
750
+ msgid " Content : %s\n"
751
+ msgstr " Indhold : %s\n"
752
+
753
+ #: PelJpeg.php:562
754
+ msgid " Content : Unknown\n"
755
+ msgstr " Indhold : Ukendt\n"
756
+
757
+ #: PelTag.php:1649
758
+ #, php-format
759
+ msgid "Unknown: 0x%04X"
760
+ msgstr "Ukendt: 0x%04X"
761
+
762
+ #: PelTag.php:1678
763
+ msgid "Interoperability Index"
764
+ msgstr "Interoperability indeks"
765
+
766
+ #: PelTag.php:1680
767
+ msgid "Interoperability Version"
768
+ msgstr "Interoperability version"
769
+
770
+ #: PelTag.php:1682
771
+ msgid "Image Width"
772
+ msgstr "Billedbredde"
773
+
774
+ #: PelTag.php:1684
775
+ msgid "Image Length"
776
+ msgstr "Billedlængde"
777
+
778
+ #: PelTag.php:1686
779
+ msgid "Bits per Sample"
780
+ msgstr "Bits pr. prøve"
781
+
782
+ #: PelTag.php:1688
783
+ msgid "Compression"
784
+ msgstr "Kompression"
785
+
786
+ #: PelTag.php:1690
787
+ msgid "Photometric Interpretation"
788
+ msgstr "Farvefortolkning"
789
+
790
+ #: PelTag.php:1692
791
+ msgid "Fill Order"
792
+ msgstr ""
793
+
794
+ #: PelTag.php:1694
795
+ msgid "Document Name"
796
+ msgstr "Dokumentnavn"
797
+
798
+ #: PelTag.php:1696
799
+ msgid "Image Description"
800
+ msgstr "Billedbeskrivelse"
801
+
802
+ #: PelTag.php:1698
803
+ msgid "Manufacturer"
804
+ msgstr "Fremstiller"
805
+
806
+ #: PelTag.php:1700
807
+ msgid "Model"
808
+ msgstr "Model"
809
+
810
+ #: PelTag.php:1702
811
+ msgid "Strip Offsets"
812
+ msgstr ""
813
+
814
+ #: PelTag.php:1704
815
+ msgid "Orientation"
816
+ msgstr "Orientering"
817
+
818
+ #: PelTag.php:1706
819
+ msgid "Samples per Pixel"
820
+ msgstr "Prøver pr. pixel"
821
+
822
+ #: PelTag.php:1708
823
+ msgid "Rows per Strip"
824
+ msgstr "Rækker pr. stribe"
825
+
826
+ #: PelTag.php:1710
827
+ msgid "Strip Byte Count"
828
+ msgstr ""
829
+
830
+ #: PelTag.php:1712
831
+ msgid "x-Resolution"
832
+ msgstr "x-opløsning"
833
+
834
+ #: PelTag.php:1714
835
+ msgid "y-Resolution"
836
+ msgstr "y-opløsning"
837
+
838
+ #: PelTag.php:1716
839
+ msgid "Planar Configuration"
840
+ msgstr "Plankonfiguration"
841
+
842
+ #: PelTag.php:1718
843
+ msgid "Resolution Unit"
844
+ msgstr "Enhed for opløsning"
845
+
846
+ #: PelTag.php:1720
847
+ msgid "Transfer Function"
848
+ msgstr "Overførselsfunktion"
849
+
850
+ #: PelTag.php:1722
851
+ msgid "Software"
852
+ msgstr "Software"
853
+
854
+ #: PelTag.php:1724
855
+ msgid "Date and Time"
856
+ msgstr "Dato og tid"
857
+
858
+ #: PelTag.php:1726
859
+ msgid "Artist"
860
+ msgstr "Kunstner"
861
+
862
+ #: PelTag.php:1728
863
+ msgid "White Point"
864
+ msgstr "Hvidpunkt"
865
+
866
+ #: PelTag.php:1730
867
+ msgid "Primary Chromaticities"
868
+ msgstr ""
869
+
870
+ #: PelTag.php:1732
871
+ msgid "Transfer Range"
872
+ msgstr "Overførselsområde"
873
+
874
+ #: PelTag.php:1734
875
+ msgid "JPEG Process"
876
+ msgstr "JPEG proces"
877
+
878
+ #: PelTag.php:1736
879
+ msgid "JPEG Interchange Format"
880
+ msgstr "JPEG Interchange Format"
881
+
882
+ #: PelTag.php:1738
883
+ msgid "JPEG Interchange Format Length"
884
+ msgstr "JPEG Interchange Format Length"
885
+
886
+ #: PelTag.php:1740
887
+ msgid "YCbCr Coefficients"
888
+ msgstr "YCbCr koefficienter"
889
+
890
+ #: PelTag.php:1742
891
+ msgid "YCbCr Sub-Sampling"
892
+ msgstr "YCbCr del-prøvning"
893
+
894
+ #: PelTag.php:1744
895
+ msgid "YCbCr Positioning"
896
+ msgstr "YCbCr placering"
897
+
898
+ #: PelTag.php:1746
899
+ msgid "Reference Black/White"
900
+ msgstr "Reference sort/hvid"
901
+
902
+ #: PelTag.php:1748
903
+ msgid "Related Image File Format"
904
+ msgstr "Filformat for relateret billed"
905
+
906
+ #: PelTag.php:1750
907
+ msgid "Related Image Width"
908
+ msgstr "Bredde af relateret billed"
909
+
910
+ #: PelTag.php:1752
911
+ msgid "Related Image Length"
912
+ msgstr "Længde af relateret billed"
913
+
914
+ #: PelTag.php:1754
915
+ msgid "CFA Repeat Pattern Dim"
916
+ msgstr ""
917
+
918
+ #: PelTag.php:1756
919
+ msgid "CFA Pattern"
920
+ msgstr "CFA mønster"
921
+
922
+ #: PelTag.php:1758
923
+ msgid "Battery Level"
924
+ msgstr "Batteri niveau"
925
+
926
+ #: PelTag.php:1760
927
+ msgid "Copyright"
928
+ msgstr "Ophavsret"
929
+
930
+ #: PelTag.php:1762
931
+ msgid "Exposure Time"
932
+ msgstr "Belysningstid"
933
+
934
+ #: PelTag.php:1764
935
+ msgid "FNumber"
936
+ msgstr "Blændetal"
937
+
938
+ #: PelTag.php:1766
939
+ msgid "IPTC/NAA"
940
+ msgstr "IPTC/NAA"
941
+
942
+ #: PelTag.php:1768
943
+ msgid "Exif IFD Pointer"
944
+ msgstr "Exif IFD Pointer"
945
+
946
+ #: PelTag.php:1770
947
+ msgid "Inter Color Profile"
948
+ msgstr "Inter farveprofil"
949
+
950
+ #: PelTag.php:1772
951
+ msgid "Exposure Program"
952
+ msgstr "Belysnings program"
953
+
954
+ #: PelTag.php:1774
955
+ msgid "Spectral Sensitivity"
956
+ msgstr "Spektral sensitivitet"
957
+
958
+ #: PelTag.php:1776
959
+ msgid "GPS Info IFD Pointer"
960
+ msgstr "GPS Info IFD Pointer"
961
+
962
+ #: PelTag.php:1778
963
+ msgid "ISO Speed Ratings"
964
+ msgstr "ISO hastighed"
965
+
966
+ #: PelTag.php:1780
967
+ msgid "OECF"
968
+ msgstr "OECF"
969
+
970
+ #: PelTag.php:1782
971
+ msgid "Exif Version"
972
+ msgstr "Exif version"
973
+
974
+ #: PelTag.php:1784
975
+ msgid "Date and Time (original)"
976
+ msgstr "Dato og tid (original)"
977
+
978
+ #: PelTag.php:1786
979
+ msgid "Date and Time (digitized)"
980
+ msgstr "Dato og tid (digitaliseret)"
981
+
982
+ #: PelTag.php:1788
983
+ msgid "Components Configuration"
984
+ msgstr "Komponent konfiguration"
985
+
986
+ #: PelTag.php:1790
987
+ msgid "Compressed Bits per Pixel"
988
+ msgstr "Komprimeret antal bits pr. pixel"
989
+
990
+ #: PelTag.php:1792
991
+ msgid "Shutter speed"
992
+ msgstr "Lukketid"
993
+
994
+ #: PelTag.php:1794
995
+ msgid "Aperture"
996
+ msgstr "Blænde"
997
+
998
+ #: PelTag.php:1796
999
+ msgid "Brightness"
1000
+ msgstr "Lysstyrke"
1001
+
1002
+ #: PelTag.php:1798
1003
+ msgid "Exposure Bias"
1004
+ msgstr "Belysningsbias"
1005
+
1006
+ #: PelTag.php:1800
1007
+ msgid "Max Aperture Value"
1008
+ msgstr "Maksimal blændetal"
1009
+
1010
+ #: PelTag.php:1802
1011
+ msgid "Subject Distance"
1012
+ msgstr "Motivafstand"
1013
+
1014
+ #: PelTag.php:1804
1015
+ msgid "Metering Mode"
1016
+ msgstr "Målemetode"
1017
+
1018
+ #: PelTag.php:1806
1019
+ msgid "Light Source"
1020
+ msgstr "Lyskilde"
1021
+
1022
+ #: PelTag.php:1810
1023
+ msgid "Focal Length"
1024
+ msgstr "Fokuslængde"
1025
+
1026
+ #: PelTag.php:1812
1027
+ msgid "Maker Note"
1028
+ msgstr "Fremstillernote"
1029
+
1030
+ #: PelTag.php:1814
1031
+ msgid "User Comment"
1032
+ msgstr "Brugerkommentar"
1033
+
1034
+ #: PelTag.php:1816
1035
+ msgid "SubSec Time"
1036
+ msgstr "Delsek tid"
1037
+
1038
+ #: PelTag.php:1818
1039
+ msgid "SubSec Time Original"
1040
+ msgstr "SubSek tid (original)"
1041
+
1042
+ #: PelTag.php:1820
1043
+ msgid "SubSec Time Digitized"
1044
+ msgstr "SubSek tid (digitaliseret)"
1045
+
1046
+ #: PelTag.php:1832
1047
+ msgid "FlashPix Version"
1048
+ msgstr "FlashPix version"
1049
+
1050
+ #: PelTag.php:1834
1051
+ msgid "Color Space"
1052
+ msgstr "Farverum"
1053
+
1054
+ #: PelTag.php:1836
1055
+ msgid "Pixel x-Dimension"
1056
+ msgstr "Pixel x-dimension"
1057
+
1058
+ #: PelTag.php:1838
1059
+ msgid "Pixel y-Dimension"
1060
+ msgstr "Pixel y-dimension"
1061
+
1062
+ #: PelTag.php:1840
1063
+ msgid "Related Sound File"
1064
+ msgstr "Relateret lydfil"
1065
+
1066
+ #: PelTag.php:1842
1067
+ msgid "Interoperability IFD Pointer"
1068
+ msgstr "Interoperability IFD Pointer"
1069
+
1070
+ #: PelTag.php:1844
1071
+ msgid "Flash Energy"
1072
+ msgstr "Blitzenergi"
1073
+
1074
+ #: PelTag.php:1846
1075
+ msgid "Spatial Frequency Response"
1076
+ msgstr ""
1077
+
1078
+ #: PelTag.php:1848
1079
+ msgid "Focal Plane x-Resolution"
1080
+ msgstr "x-opløsning i fokusplan"
1081
+
1082
+ #: PelTag.php:1850
1083
+ msgid "Focal Plane y-Resolution"
1084
+ msgstr "y-opløsning i fokusplan"
1085
+
1086
+ #: PelTag.php:1852
1087
+ msgid "Focal Plane Resolution Unit"
1088
+ msgstr "Enhed for opløsning i fokusplan"
1089
+
1090
+ #: PelTag.php:1854
1091
+ msgid "Subject Location"
1092
+ msgstr "Placering af motiv"
1093
+
1094
+ #: PelTag.php:1856
1095
+ msgid "Exposure index"
1096
+ msgstr "Belysningsindeks"
1097
+
1098
+ #: PelTag.php:1858
1099
+ msgid "Sensing Method"
1100
+ msgstr "Sansningsmetode"
1101
+
1102
+ #: PelTag.php:1860
1103
+ msgid "File Source"
1104
+ msgstr "Fil kilde"
1105
+
1106
+ #: PelTag.php:1862
1107
+ msgid "Scene Type"
1108
+ msgstr "Scenetype"
1109
+
1110
+ #: PelTag.php:1864
1111
+ msgid "Subject Area"
1112
+ msgstr "Motivområde"
1113
+
1114
+ #: PelTag.php:1866
1115
+ msgid "Custom Rendered"
1116
+ msgstr "Specialfremstillet"
1117
+
1118
+ #: PelTag.php:1868
1119
+ msgid "Exposure Mode"
1120
+ msgstr "Belysnings indstilling"
1121
+
1122
+ #: PelTag.php:1870
1123
+ msgid "White Balance"
1124
+ msgstr "Hvidbalance"
1125
+
1126
+ #: PelTag.php:1872
1127
+ msgid "Digital Zoom Ratio"
1128
+ msgstr "Digital zoomforhold"
1129
+
1130
+ #: PelTag.php:1874
1131
+ msgid "Focal Length In 35mm Film"
1132
+ msgstr "Fokuslængde på 35mm film"
1133
+
1134
+ #: PelTag.php:1876
1135
+ msgid "Scene Capture Type"
1136
+ msgstr "Type af scene"
1137
+
1138
+ #: PelTag.php:1878
1139
+ msgid "Gain Control"
1140
+ msgstr ""
1141
+
1142
+ #: PelTag.php:1880
1143
+ msgid "Contrast"
1144
+ msgstr "Kontrast"
1145
+
1146
+ #: PelTag.php:1882
1147
+ msgid "Saturation"
1148
+ msgstr "Farvemætning"
1149
+
1150
+ #: PelTag.php:1884
1151
+ msgid "Sharpness"
1152
+ msgstr "Skarphed"
1153
+
1154
+ #: PelTag.php:1886
1155
+ msgid "Device Setting Description"
1156
+ msgstr "Beskrivelse af apparatindstillinger"
1157
+
1158
+ #: PelTag.php:1888
1159
+ msgid "Subject Distance Range"
1160
+ msgstr "Afstanden til motivet"
1161
+
1162
+ #: PelTag.php:1890
1163
+ msgid "Image Unique ID"
1164
+ msgstr "Unikt ID for billed"
1165
+
1166
+ #: PelTag.php:1892
1167
+ msgid "Gamma"
1168
+ msgstr "Gamma"
1169
+
1170
+ #: PelTag.php:1894
1171
+ msgid "Print IM"
1172
+ msgstr ""
1173
+
1174
+ #: PelTag.php:1964
1175
+ #, php-format
1176
+ msgid "Unknown Tag: 0x%04X"
1177
+ msgstr "Ukendt tag: 0x%04X"
1178
+
1179
+ #: PelTiff.php:255
1180
+ #, php-format
1181
+ msgid "Dumping TIFF data...\n"
1182
+ msgstr "Dumper TIFF data...\n"
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/de.po ADDED
@@ -0,0 +1,1525 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # German translation for the PHP Exif Library (PEL).
2
+ # Originally from libexif.
3
+ # Copyright (C) 2004, 2005, 2006 Martin Geisler
4
+ # This file is distributed under the term of the GPL.
5
+ # Lutz Müller <lutz@users.sourceforge.net>, 2002.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PEL\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2006-11-19 20:48+0100\n"
12
+ "PO-Revision-Date: 2005-10-03 13:39+0200\n"
13
+ "Last-Translator: Hans Ulrich Niedermann <gp@n-dimensional.de>\n"
14
+ "Language-Team: Deutsch\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
19
+
20
+ #: PelDataWindow.php:517
21
+ #, php-format
22
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
23
+ msgstr ""
24
+
25
+ #: PelEntryAscii.php:465
26
+ msgid "(Photographer)"
27
+ msgstr ""
28
+
29
+ #: PelEntryAscii.php:466
30
+ msgid "(Editor)"
31
+ msgstr ""
32
+
33
+ #: PelEntry.php:369
34
+ #, php-format
35
+ msgid " Tag: 0x%04X (%s)\n"
36
+ msgstr "Unbekannt 0x%04X (%s)\n"
37
+
38
+ #: PelEntry.php:371
39
+ #, php-format
40
+ msgid " Format : %d (%s)\n"
41
+ msgstr ""
42
+
43
+ #: PelEntry.php:373
44
+ #, php-format
45
+ msgid " Components: %d\n"
46
+ msgstr ""
47
+
48
+ #: PelEntry.php:376
49
+ #, php-format
50
+ msgid " Value : %s\n"
51
+ msgstr ""
52
+
53
+ #: PelEntry.php:377
54
+ #, php-format
55
+ msgid " Text : %s\n"
56
+ msgstr ""
57
+
58
+ #: PelEntryRational.php:136 PelEntryRational.php:141
59
+ #, php-format
60
+ msgid "f/%.01f"
61
+ msgstr ""
62
+
63
+ #: PelEntryRational.php:146
64
+ #, php-format
65
+ msgid "%.1f mm"
66
+ msgstr ""
67
+
68
+ #: PelEntryRational.php:151
69
+ #, php-format
70
+ msgid "%.1f m"
71
+ msgstr ""
72
+
73
+ #: PelEntryRational.php:157
74
+ #, php-format
75
+ msgid "1/%d sec."
76
+ msgstr ""
77
+
78
+ #: PelEntryRational.php:159
79
+ #, php-format
80
+ msgid "%d sec."
81
+ msgstr ""
82
+
83
+ #: PelEntryRational.php:267
84
+ #, php-format
85
+ msgid "%.0f/%.0f sec. (APEX: %d)"
86
+ msgstr ""
87
+
88
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
89
+ msgid "Unknown"
90
+ msgstr "Unbekannt"
91
+
92
+ #: PelEntryShort.php:144
93
+ msgid "Average"
94
+ msgstr "Durchschnitt"
95
+
96
+ #: PelEntryShort.php:146
97
+ #, fuzzy
98
+ msgid "Center-Weighted Average"
99
+ msgstr "zentriert"
100
+
101
+ #: PelEntryShort.php:148
102
+ #, fuzzy
103
+ msgid "Spot"
104
+ msgstr "Weich"
105
+
106
+ #: PelEntryShort.php:150
107
+ msgid "Multi Spot"
108
+ msgstr ""
109
+
110
+ #: PelEntryShort.php:152
111
+ msgid "Pattern"
112
+ msgstr "Muster"
113
+
114
+ #: PelEntryShort.php:154
115
+ msgid "Partial"
116
+ msgstr "Partiell"
117
+
118
+ #: PelEntryShort.php:156 PelEntryShort.php:247
119
+ msgid "Other"
120
+ msgstr "Andere"
121
+
122
+ #: PelEntryShort.php:165
123
+ msgid "Uncompressed"
124
+ msgstr "Unkomprimiert"
125
+
126
+ #: PelEntryShort.php:167
127
+ msgid "JPEG compression"
128
+ msgstr "JPEG Kompression"
129
+
130
+ #: PelEntryShort.php:177
131
+ msgid "chunky format"
132
+ msgstr ""
133
+
134
+ #: PelEntryShort.php:179
135
+ msgid "planar format"
136
+ msgstr ""
137
+
138
+ #: PelEntryShort.php:188 PelEntryShort.php:268
139
+ msgid "Not defined"
140
+ msgstr "Undefiniert"
141
+
142
+ #: PelEntryShort.php:190
143
+ msgid "One-chip color area sensor"
144
+ msgstr ""
145
+
146
+ #: PelEntryShort.php:192
147
+ msgid "Two-chip color area sensor"
148
+ msgstr ""
149
+
150
+ #: PelEntryShort.php:194
151
+ msgid "Three-chip color area sensor"
152
+ msgstr ""
153
+
154
+ #: PelEntryShort.php:196
155
+ msgid "Color sequential area sensor"
156
+ msgstr ""
157
+
158
+ #: PelEntryShort.php:198
159
+ msgid "Trilinear sensor"
160
+ msgstr ""
161
+
162
+ #: PelEntryShort.php:200
163
+ msgid "Color sequential linear sensor"
164
+ msgstr ""
165
+
166
+ #: PelEntryShort.php:211
167
+ msgid "Daylight"
168
+ msgstr "Tageslicht"
169
+
170
+ #: PelEntryShort.php:213
171
+ #, fuzzy
172
+ msgid "Fluorescent"
173
+ msgstr "Dateiquelle"
174
+
175
+ #: PelEntryShort.php:215
176
+ msgid "Tungsten (incandescent light)"
177
+ msgstr ""
178
+
179
+ #: PelEntryShort.php:217 PelTag.php:1808
180
+ msgid "Flash"
181
+ msgstr "Blitz"
182
+
183
+ #: PelEntryShort.php:219
184
+ msgid "Fine weather"
185
+ msgstr "Gutes Wetter"
186
+
187
+ #: PelEntryShort.php:221
188
+ msgid "Cloudy weather"
189
+ msgstr "Wolkiges Wetter"
190
+
191
+ #: PelEntryShort.php:223
192
+ msgid "Shade"
193
+ msgstr ""
194
+
195
+ #: PelEntryShort.php:225
196
+ msgid "Daylight fluorescent"
197
+ msgstr ""
198
+
199
+ #: PelEntryShort.php:227
200
+ msgid "Day white fluorescent"
201
+ msgstr ""
202
+
203
+ #: PelEntryShort.php:229
204
+ msgid "Cool white fluorescent"
205
+ msgstr ""
206
+
207
+ #: PelEntryShort.php:231
208
+ #, fuzzy
209
+ msgid "White fluorescent"
210
+ msgstr "Dateiquelle"
211
+
212
+ #: PelEntryShort.php:233
213
+ #, fuzzy
214
+ msgid "Standard light A"
215
+ msgstr "Standard"
216
+
217
+ #: PelEntryShort.php:235
218
+ #, fuzzy
219
+ msgid "Standard light B"
220
+ msgstr "Standard"
221
+
222
+ #: PelEntryShort.php:237
223
+ #, fuzzy
224
+ msgid "Standard light C"
225
+ msgstr "Standard"
226
+
227
+ #: PelEntryShort.php:239
228
+ msgid "D55"
229
+ msgstr ""
230
+
231
+ #: PelEntryShort.php:241
232
+ msgid "D65"
233
+ msgstr ""
234
+
235
+ #: PelEntryShort.php:243
236
+ msgid "D75"
237
+ msgstr ""
238
+
239
+ #: PelEntryShort.php:245
240
+ msgid "ISO studio tungsten"
241
+ msgstr ""
242
+
243
+ #: PelEntryShort.php:257
244
+ msgid "Inch"
245
+ msgstr ""
246
+
247
+ #: PelEntryShort.php:259
248
+ msgid "Centimeter"
249
+ msgstr "Zentimeter"
250
+
251
+ #: PelEntryShort.php:270
252
+ msgid "Manual"
253
+ msgstr "Manuell"
254
+
255
+ #: PelEntryShort.php:272
256
+ msgid "Normal program"
257
+ msgstr "Normalprogramm"
258
+
259
+ #: PelEntryShort.php:274
260
+ msgid "Aperture priority"
261
+ msgstr ""
262
+
263
+ #: PelEntryShort.php:276
264
+ msgid "Shutter priority"
265
+ msgstr ""
266
+
267
+ #: PelEntryShort.php:278
268
+ msgid "Creative program (biased toward depth of field)"
269
+ msgstr ""
270
+
271
+ #: PelEntryShort.php:280
272
+ msgid "Action program (biased toward fast shutter speed)"
273
+ msgstr ""
274
+
275
+ #: PelEntryShort.php:282
276
+ msgid "Portrait mode (for closeup photos with the background out of focus"
277
+ msgstr ""
278
+
279
+ #: PelEntryShort.php:284
280
+ msgid "Landscape mode (for landscape photos with the background in focus"
281
+ msgstr ""
282
+
283
+ #: PelEntryShort.php:293
284
+ msgid "top - left"
285
+ msgstr "oben - links"
286
+
287
+ #: PelEntryShort.php:295
288
+ msgid "top - right"
289
+ msgstr "oben - rechts"
290
+
291
+ #: PelEntryShort.php:297
292
+ msgid "bottom - right"
293
+ msgstr "unten - rechts"
294
+
295
+ #: PelEntryShort.php:299
296
+ msgid "bottom - left"
297
+ msgstr "unten - links"
298
+
299
+ #: PelEntryShort.php:301
300
+ msgid "left - top"
301
+ msgstr "links - oben"
302
+
303
+ #: PelEntryShort.php:303
304
+ msgid "right - top"
305
+ msgstr "rechts - oben"
306
+
307
+ #: PelEntryShort.php:305
308
+ msgid "right - bottom"
309
+ msgstr "rechts - unten"
310
+
311
+ #: PelEntryShort.php:307
312
+ msgid "left - bottom"
313
+ msgstr "links - unten"
314
+
315
+ #: PelEntryShort.php:316
316
+ msgid "centered"
317
+ msgstr "zentriert"
318
+
319
+ #: PelEntryShort.php:318
320
+ msgid "co-sited"
321
+ msgstr ""
322
+
323
+ #: PelEntryShort.php:351
324
+ msgid "Uncalibrated"
325
+ msgstr "Unkalibriert"
326
+
327
+ #: PelEntryShort.php:360
328
+ msgid "Flash did not fire."
329
+ msgstr "Blitz löste nicht aus."
330
+
331
+ #: PelEntryShort.php:362
332
+ msgid "Flash fired."
333
+ msgstr "Blitz löste aus."
334
+
335
+ #: PelEntryShort.php:364
336
+ msgid "Strobe return light not detected."
337
+ msgstr "Blitzlicht nicht erkannt."
338
+
339
+ #: PelEntryShort.php:366
340
+ msgid "Strobe return light detected."
341
+ msgstr "Blitzlicht erkannt."
342
+
343
+ #: PelEntryShort.php:368
344
+ #, fuzzy
345
+ msgid "Flash fired, compulsory flash mode."
346
+ msgstr "Blitz löste nicht aus."
347
+
348
+ #: PelEntryShort.php:370
349
+ #, fuzzy
350
+ msgid "Flash fired, compulsory flash mode, return light not detected."
351
+ msgstr "Blitzlicht nicht erkannt."
352
+
353
+ #: PelEntryShort.php:372
354
+ msgid "Flash fired, compulsory flash mode, return light detected."
355
+ msgstr ""
356
+
357
+ #: PelEntryShort.php:374
358
+ #, fuzzy
359
+ msgid "Flash did not fire, compulsory flash mode."
360
+ msgstr "Blitz löste nicht aus."
361
+
362
+ #: PelEntryShort.php:376
363
+ #, fuzzy
364
+ msgid "Flash did not fire, auto mode."
365
+ msgstr "Blitz löste nicht aus."
366
+
367
+ #: PelEntryShort.php:378
368
+ #, fuzzy
369
+ msgid "Flash fired, auto mode."
370
+ msgstr "Blitz löste aus."
371
+
372
+ #: PelEntryShort.php:380
373
+ #, fuzzy
374
+ msgid "Flash fired, auto mode, return light not detected."
375
+ msgstr "Blitzlicht nicht erkannt."
376
+
377
+ #: PelEntryShort.php:382
378
+ #, fuzzy
379
+ msgid "Flash fired, auto mode, return light detected."
380
+ msgstr "Blitzlicht erkannt."
381
+
382
+ #: PelEntryShort.php:384
383
+ msgid "No flash function."
384
+ msgstr "Keine Blitzlichtfunktion."
385
+
386
+ #: PelEntryShort.php:386
387
+ msgid "Flash fired, red-eye reduction mode."
388
+ msgstr ""
389
+
390
+ #: PelEntryShort.php:388
391
+ #, fuzzy
392
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
393
+ msgstr "Blitzlicht nicht erkannt."
394
+
395
+ #: PelEntryShort.php:390
396
+ msgid "Flash fired, red-eye reduction mode, return light detected."
397
+ msgstr ""
398
+
399
+ #: PelEntryShort.php:392
400
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
401
+ msgstr ""
402
+
403
+ #: PelEntryShort.php:394
404
+ msgid ""
405
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
406
+ "detected."
407
+ msgstr ""
408
+
409
+ #: PelEntryShort.php:396
410
+ msgid ""
411
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
412
+ "detected."
413
+ msgstr ""
414
+
415
+ #: PelEntryShort.php:398
416
+ #, fuzzy
417
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
418
+ msgstr "Blitz löste nicht aus."
419
+
420
+ #: PelEntryShort.php:400
421
+ msgid "Flash fired, auto mode, red-eye reduction mode."
422
+ msgstr ""
423
+
424
+ #: PelEntryShort.php:402
425
+ msgid ""
426
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
427
+ msgstr ""
428
+
429
+ #: PelEntryShort.php:404
430
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
431
+ msgstr ""
432
+
433
+ #: PelEntryShort.php:413
434
+ msgid "Normal process"
435
+ msgstr "Normalprogramm"
436
+
437
+ #: PelEntryShort.php:415
438
+ #, fuzzy
439
+ msgid "Custom process"
440
+ msgstr "Kompression"
441
+
442
+ #: PelEntryShort.php:424
443
+ msgid "Auto exposure"
444
+ msgstr "Automatische Belichtungzeit"
445
+
446
+ #: PelEntryShort.php:426
447
+ msgid "Manual exposure"
448
+ msgstr "Manuelle Belichtungszeit"
449
+
450
+ #: PelEntryShort.php:428
451
+ msgid "Auto bracket"
452
+ msgstr ""
453
+
454
+ #: PelEntryShort.php:437
455
+ msgid "Auto white balance"
456
+ msgstr ""
457
+
458
+ #: PelEntryShort.php:439
459
+ msgid "Manual white balance"
460
+ msgstr ""
461
+
462
+ #: PelEntryShort.php:448
463
+ msgid "Standard"
464
+ msgstr "Standard"
465
+
466
+ #: PelEntryShort.php:450
467
+ msgid "Landscape"
468
+ msgstr "Landschaft"
469
+
470
+ #: PelEntryShort.php:452
471
+ msgid "Portrait"
472
+ msgstr "Portrait"
473
+
474
+ #: PelEntryShort.php:454
475
+ #, fuzzy
476
+ msgid "Night scene"
477
+ msgstr "Lichtquelle"
478
+
479
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
480
+ msgid "Normal"
481
+ msgstr "Normal"
482
+
483
+ #: PelEntryShort.php:465
484
+ msgid "Low gain up"
485
+ msgstr ""
486
+
487
+ #: PelEntryShort.php:467
488
+ msgid "High gain up"
489
+ msgstr ""
490
+
491
+ #: PelEntryShort.php:469
492
+ msgid "Low gain down"
493
+ msgstr ""
494
+
495
+ #: PelEntryShort.php:471
496
+ msgid "High gain down"
497
+ msgstr "Hohe Sättigung"
498
+
499
+ #: PelEntryShort.php:482
500
+ msgid "Low saturation"
501
+ msgstr "Geringe Sättigung"
502
+
503
+ #: PelEntryShort.php:484
504
+ msgid "High saturation"
505
+ msgstr "Hohe Sättigung"
506
+
507
+ #: PelEntryShort.php:496
508
+ msgid "Soft"
509
+ msgstr "Weich"
510
+
511
+ #: PelEntryShort.php:498
512
+ msgid "Hard"
513
+ msgstr "Hart"
514
+
515
+ #: PelEntryShort.php:509
516
+ msgid "Macro"
517
+ msgstr "Macro"
518
+
519
+ #: PelEntryShort.php:511
520
+ msgid "Close view"
521
+ msgstr "Geringe Entfernung"
522
+
523
+ #: PelEntryShort.php:513
524
+ msgid "Distant view"
525
+ msgstr "Hohe Entfernung"
526
+
527
+ #: PelEntryShort.php:521
528
+ #, php-format
529
+ msgid "(x,y) = (%d,%d)"
530
+ msgstr ""
531
+
532
+ #: PelEntryShort.php:523
533
+ #, php-format
534
+ msgid "Within distance %d of (x,y) = (%d,%d)"
535
+ msgstr "Innerhalb einer Entfernung %d von (x,y) = (%d,%d)"
536
+
537
+ #: PelEntryShort.php:526
538
+ #, php-format
539
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
540
+ msgstr "Innerhalb eines Rechtecks (Breite %d, Höhe %d) um (x,y) = (%d,%d)"
541
+
542
+ #: PelEntryShort.php:531
543
+ #, php-format
544
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
545
+ msgstr "Unerwartete Nummer von Komponenten (%d, erwartete 2, 3 oder 4)."
546
+
547
+ #: PelEntryUndefined.php:390
548
+ #, php-format
549
+ msgid "Exif %s"
550
+ msgstr "Exif %s"
551
+
552
+ #: PelEntryUndefined.php:392
553
+ #, php-format
554
+ msgid "Exif Version %s"
555
+ msgstr "Exif Version %s"
556
+
557
+ #: PelEntryUndefined.php:396
558
+ #, php-format
559
+ msgid "FlashPix %s"
560
+ msgstr "FlashPix %s"
561
+
562
+ #: PelEntryUndefined.php:398
563
+ #, php-format
564
+ msgid "FlashPix Version %s"
565
+ msgstr "FlashPix Version %s"
566
+
567
+ #: PelEntryUndefined.php:402
568
+ #, php-format
569
+ msgid "Interoperability %s"
570
+ msgstr ""
571
+
572
+ #: PelEntryUndefined.php:404
573
+ #, php-format
574
+ msgid "Interoperability Version %s"
575
+ msgstr ""
576
+
577
+ #: PelEntryUndefined.php:410
578
+ #, php-format
579
+ msgid "Version %s"
580
+ msgstr "Version %s"
581
+
582
+ #: PelExif.php:169
583
+ msgid "Dumping Exif data...\n"
584
+ msgstr ""
585
+
586
+ #: PelFormat.php:192 PelFormat.php:220
587
+ #, fuzzy, php-format
588
+ msgid "Unknown format: 0x%X"
589
+ msgstr "Unbekannt 0x%04X"
590
+
591
+ #: PelIfd.php:1180
592
+ #, php-format
593
+ msgid "Dumping IFD %s with %d entries...\n"
594
+ msgstr ""
595
+
596
+ #: PelIfd.php:1186
597
+ #, php-format
598
+ msgid "Dumping %d sub IFDs...\n"
599
+ msgstr ""
600
+
601
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
602
+ #, php-format
603
+ msgid "Unknown marker: 0x%02X"
604
+ msgstr ""
605
+
606
+ #: PelJpegMarker.php:302
607
+ msgid "Encoding (baseline)"
608
+ msgstr ""
609
+
610
+ #: PelJpegMarker.php:304
611
+ msgid "Encoding (extended sequential)"
612
+ msgstr ""
613
+
614
+ #: PelJpegMarker.php:306
615
+ msgid "Encoding (progressive)"
616
+ msgstr ""
617
+
618
+ #: PelJpegMarker.php:308
619
+ msgid "Encoding (lossless)"
620
+ msgstr ""
621
+
622
+ #: PelJpegMarker.php:310
623
+ msgid "Encoding (differential sequential)"
624
+ msgstr ""
625
+
626
+ #: PelJpegMarker.php:312
627
+ msgid "Encoding (differential progressive)"
628
+ msgstr ""
629
+
630
+ #: PelJpegMarker.php:314
631
+ msgid "Encoding (differential lossless)"
632
+ msgstr ""
633
+
634
+ #: PelJpegMarker.php:316
635
+ msgid "Encoding (extended sequential, arithmetic)"
636
+ msgstr ""
637
+
638
+ #: PelJpegMarker.php:318
639
+ msgid "Encoding (progressive, arithmetic)"
640
+ msgstr ""
641
+
642
+ #: PelJpegMarker.php:320
643
+ msgid "Encoding (lossless, arithmetic)"
644
+ msgstr ""
645
+
646
+ #: PelJpegMarker.php:322
647
+ msgid "Encoding (differential sequential, arithmetic)"
648
+ msgstr ""
649
+
650
+ #: PelJpegMarker.php:324
651
+ msgid "Encoding (differential progressive, arithmetic)"
652
+ msgstr ""
653
+
654
+ #: PelJpegMarker.php:326
655
+ msgid "Encoding (differential lossless, arithmetic)"
656
+ msgstr ""
657
+
658
+ #: PelJpegMarker.php:328
659
+ msgid "Start of image"
660
+ msgstr ""
661
+
662
+ #: PelJpegMarker.php:330
663
+ msgid "End of image"
664
+ msgstr ""
665
+
666
+ #: PelJpegMarker.php:332
667
+ msgid "Start of scan"
668
+ msgstr ""
669
+
670
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
671
+ msgid "Comment"
672
+ msgstr "Anmerkung des Nutzers"
673
+
674
+ #: PelJpegMarker.php:336
675
+ msgid "Define Huffman table"
676
+ msgstr ""
677
+
678
+ #: PelJpegMarker.php:338
679
+ #, fuzzy
680
+ msgid "Extension"
681
+ msgstr "Exif Version"
682
+
683
+ #: PelJpegMarker.php:340
684
+ msgid "Define arithmetic coding conditioning"
685
+ msgstr ""
686
+
687
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
688
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
689
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
690
+ #, php-format
691
+ msgid "Restart %d"
692
+ msgstr ""
693
+
694
+ #: PelJpegMarker.php:358
695
+ msgid "Define quantization table"
696
+ msgstr ""
697
+
698
+ #: PelJpegMarker.php:360
699
+ msgid "Define number of lines"
700
+ msgstr ""
701
+
702
+ #: PelJpegMarker.php:362
703
+ msgid "Define restart interval"
704
+ msgstr ""
705
+
706
+ #: PelJpegMarker.php:364
707
+ msgid "Define hierarchical progression"
708
+ msgstr ""
709
+
710
+ #: PelJpegMarker.php:366
711
+ msgid "Expand reference component"
712
+ msgstr ""
713
+
714
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
715
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
716
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
717
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
718
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
719
+ #: PelJpegMarker.php:398
720
+ #, php-format
721
+ msgid "Application segment %d"
722
+ msgstr ""
723
+
724
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
725
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
726
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
727
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
728
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
729
+ #, fuzzy, php-format
730
+ msgid "Extension %d"
731
+ msgstr "Exif Version"
732
+
733
+ #: PelJpeg.php:543
734
+ msgid "Dumping JPEG data...\n"
735
+ msgstr ""
736
+
737
+ #: PelJpeg.php:547
738
+ #, php-format
739
+ msgid "Section %d (marker 0x%02X - %s):\n"
740
+ msgstr ""
741
+
742
+ #: PelJpeg.php:549
743
+ #, php-format
744
+ msgid " Description: %s\n"
745
+ msgstr "Beschreibung: %s\n"
746
+
747
+ #: PelJpeg.php:557
748
+ msgid " Content : Exif data\n"
749
+ msgstr ""
750
+
751
+ #: PelJpeg.php:560
752
+ #, fuzzy, php-format
753
+ msgid " Content : %s\n"
754
+ msgstr "Kontrast"
755
+
756
+ #: PelJpeg.php:562
757
+ msgid " Content : Unknown\n"
758
+ msgstr ""
759
+
760
+ #: PelTag.php:1649
761
+ #, php-format
762
+ msgid "Unknown: 0x%04X"
763
+ msgstr "Unbekannt 0x%04X"
764
+
765
+ #: PelTag.php:1678
766
+ msgid "Interoperability Index"
767
+ msgstr ""
768
+
769
+ #: PelTag.php:1680
770
+ msgid "Interoperability Version"
771
+ msgstr ""
772
+
773
+ #: PelTag.php:1682
774
+ msgid "Image Width"
775
+ msgstr "Bildbreite"
776
+
777
+ #: PelTag.php:1684
778
+ msgid "Image Length"
779
+ msgstr "Bildlänge"
780
+
781
+ #: PelTag.php:1686
782
+ msgid "Bits per Sample"
783
+ msgstr ""
784
+
785
+ #: PelTag.php:1688
786
+ msgid "Compression"
787
+ msgstr "Kompression"
788
+
789
+ #: PelTag.php:1690
790
+ msgid "Photometric Interpretation"
791
+ msgstr "Fotometrische Interpretation"
792
+
793
+ #: PelTag.php:1692
794
+ msgid "Fill Order"
795
+ msgstr ""
796
+
797
+ #: PelTag.php:1694
798
+ msgid "Document Name"
799
+ msgstr "Dokumentenname"
800
+
801
+ #: PelTag.php:1696
802
+ msgid "Image Description"
803
+ msgstr "Bildbeschreibung"
804
+
805
+ #: PelTag.php:1698
806
+ msgid "Manufacturer"
807
+ msgstr "Hersteller"
808
+
809
+ #: PelTag.php:1700
810
+ msgid "Model"
811
+ msgstr "Modell"
812
+
813
+ #: PelTag.php:1702
814
+ msgid "Strip Offsets"
815
+ msgstr ""
816
+
817
+ #: PelTag.php:1704
818
+ msgid "Orientation"
819
+ msgstr "Orientierung"
820
+
821
+ #: PelTag.php:1706
822
+ msgid "Samples per Pixel"
823
+ msgstr ""
824
+
825
+ #: PelTag.php:1708
826
+ msgid "Rows per Strip"
827
+ msgstr ""
828
+
829
+ #: PelTag.php:1710
830
+ msgid "Strip Byte Count"
831
+ msgstr ""
832
+
833
+ #: PelTag.php:1712
834
+ msgid "x-Resolution"
835
+ msgstr "Auflösung in x-Richtung"
836
+
837
+ #: PelTag.php:1714
838
+ msgid "y-Resolution"
839
+ msgstr "Auflösung in y-Richtung"
840
+
841
+ #: PelTag.php:1716
842
+ msgid "Planar Configuration"
843
+ msgstr ""
844
+
845
+ #: PelTag.php:1718
846
+ msgid "Resolution Unit"
847
+ msgstr "Maßeinheit der Auflösung"
848
+
849
+ #: PelTag.php:1720
850
+ msgid "Transfer Function"
851
+ msgstr ""
852
+
853
+ #: PelTag.php:1722
854
+ msgid "Software"
855
+ msgstr "Software"
856
+
857
+ #: PelTag.php:1724
858
+ msgid "Date and Time"
859
+ msgstr "Datum und Uhrzeit"
860
+
861
+ #: PelTag.php:1726
862
+ msgid "Artist"
863
+ msgstr "Künstler"
864
+
865
+ #: PelTag.php:1728
866
+ msgid "White Point"
867
+ msgstr ""
868
+
869
+ #: PelTag.php:1730
870
+ msgid "Primary Chromaticities"
871
+ msgstr ""
872
+
873
+ #: PelTag.php:1732
874
+ msgid "Transfer Range"
875
+ msgstr ""
876
+
877
+ #: PelTag.php:1734
878
+ msgid "JPEGProc"
879
+ msgstr ""
880
+
881
+ #: PelTag.php:1736
882
+ msgid "JPEG Interchange Format"
883
+ msgstr ""
884
+
885
+ #: PelTag.php:1738
886
+ msgid "JPEG Interchange Format Length"
887
+ msgstr ""
888
+
889
+ #: PelTag.php:1740
890
+ msgid "YCbCr Coefficients"
891
+ msgstr "YCbCr Koeffizienten"
892
+
893
+ #: PelTag.php:1742
894
+ msgid "YCbCr Sub-Sampling"
895
+ msgstr ""
896
+
897
+ #: PelTag.php:1744
898
+ msgid "YCbCr Positioning"
899
+ msgstr "YCbCr Positionierung"
900
+
901
+ #: PelTag.php:1746
902
+ msgid "Reference Black/White"
903
+ msgstr ""
904
+
905
+ #: PelTag.php:1748
906
+ #, fuzzy
907
+ msgid "Related Image File Format"
908
+ msgstr "Bildbreite"
909
+
910
+ #: PelTag.php:1750
911
+ #, fuzzy
912
+ msgid "Related Image Width"
913
+ msgstr "Bildbreite"
914
+
915
+ #: PelTag.php:1752
916
+ #, fuzzy
917
+ msgid "Related Image Length"
918
+ msgstr "Bildlänge"
919
+
920
+ #: PelTag.php:1754
921
+ msgid "CFA Repeat Pattern Dim"
922
+ msgstr ""
923
+
924
+ #: PelTag.php:1756
925
+ msgid "CFA Pattern"
926
+ msgstr ""
927
+
928
+ #: PelTag.php:1758
929
+ msgid "Battery Level"
930
+ msgstr "Batteriestatus"
931
+
932
+ #: PelTag.php:1760
933
+ msgid "Copyright"
934
+ msgstr "Copyright"
935
+
936
+ #: PelTag.php:1762
937
+ msgid "Exposure Time"
938
+ msgstr "Belichtungszeit"
939
+
940
+ #: PelTag.php:1764
941
+ msgid "FNumber"
942
+ msgstr ""
943
+
944
+ #: PelTag.php:1766
945
+ msgid "IPTC/NAA"
946
+ msgstr ""
947
+
948
+ #: PelTag.php:1768
949
+ msgid "Exif IFD Pointer"
950
+ msgstr ""
951
+
952
+ #: PelTag.php:1770
953
+ msgid "Inter Color Profile"
954
+ msgstr ""
955
+
956
+ #: PelTag.php:1772
957
+ #, fuzzy
958
+ msgid "Exposure Program"
959
+ msgstr "Belichtungszeit"
960
+
961
+ #: PelTag.php:1774
962
+ msgid "Spectral Sensitivity"
963
+ msgstr ""
964
+
965
+ #: PelTag.php:1776
966
+ msgid "GPS Info IFD Pointer"
967
+ msgstr ""
968
+
969
+ #: PelTag.php:1778
970
+ msgid "ISO Speed Ratings"
971
+ msgstr ""
972
+
973
+ #: PelTag.php:1780
974
+ msgid "OECF"
975
+ msgstr ""
976
+
977
+ #: PelTag.php:1782
978
+ msgid "Exif Version"
979
+ msgstr "Exif Version"
980
+
981
+ #: PelTag.php:1784
982
+ msgid "Date and Time (original)"
983
+ msgstr "Datum und Uhrzeit (original)"
984
+
985
+ #: PelTag.php:1786
986
+ msgid "Date and Time (digitized)"
987
+ msgstr "Datum und Uhrzeit (digitalisiert)"
988
+
989
+ #: PelTag.php:1788
990
+ msgid "Components Configuration"
991
+ msgstr ""
992
+
993
+ #: PelTag.php:1790
994
+ msgid "Compressed Bits per Pixel"
995
+ msgstr ""
996
+
997
+ #: PelTag.php:1792
998
+ msgid "Shutter speed"
999
+ msgstr ""
1000
+
1001
+ #: PelTag.php:1794
1002
+ msgid "Aperture"
1003
+ msgstr ""
1004
+
1005
+ #: PelTag.php:1796
1006
+ msgid "Brightness"
1007
+ msgstr "Helligkeit"
1008
+
1009
+ #: PelTag.php:1798
1010
+ msgid "Exposure Bias"
1011
+ msgstr ""
1012
+
1013
+ #: PelTag.php:1800
1014
+ msgid "Max Aperture Value"
1015
+ msgstr ""
1016
+
1017
+ #: PelTag.php:1802
1018
+ msgid "Subject Distance"
1019
+ msgstr "Entfernung des Objekts"
1020
+
1021
+ #: PelTag.php:1804
1022
+ msgid "Metering Mode"
1023
+ msgstr ""
1024
+
1025
+ #: PelTag.php:1806
1026
+ msgid "Light Source"
1027
+ msgstr "Lichtquelle"
1028
+
1029
+ #: PelTag.php:1810
1030
+ msgid "Focal Length"
1031
+ msgstr ""
1032
+
1033
+ #: PelTag.php:1812
1034
+ msgid "Maker Note"
1035
+ msgstr "Anmerkungen des Herstellers"
1036
+
1037
+ #: PelTag.php:1814
1038
+ msgid "User Comment"
1039
+ msgstr "Anmerkung des Nutzers"
1040
+
1041
+ #: PelTag.php:1816
1042
+ #, fuzzy
1043
+ msgid "SubSec Time"
1044
+ msgstr "Datum und Uhrzeit (original)"
1045
+
1046
+ #: PelTag.php:1818
1047
+ #, fuzzy
1048
+ msgid "SubSec Time Original"
1049
+ msgstr "Datum und Uhrzeit (original)"
1050
+
1051
+ #: PelTag.php:1820
1052
+ #, fuzzy
1053
+ msgid "SubSec Time Digitized"
1054
+ msgstr "Datum und Uhrzeit (digitalisiert)"
1055
+
1056
+ #: PelTag.php:1832
1057
+ msgid "FlashPix Version"
1058
+ msgstr "FlashPix Version"
1059
+
1060
+ #: PelTag.php:1834
1061
+ msgid "Color Space"
1062
+ msgstr ""
1063
+
1064
+ #: PelTag.php:1836
1065
+ msgid "Pixel x-Dimension"
1066
+ msgstr ""
1067
+
1068
+ #: PelTag.php:1838
1069
+ msgid "Pixel y-Dimension"
1070
+ msgstr ""
1071
+
1072
+ #: PelTag.php:1840
1073
+ msgid "Related Sound File"
1074
+ msgstr ""
1075
+
1076
+ #: PelTag.php:1842
1077
+ msgid "Interoperability IFD Pointer"
1078
+ msgstr ""
1079
+
1080
+ #: PelTag.php:1844
1081
+ msgid "Flash Energy"
1082
+ msgstr "Energie des Blitzes"
1083
+
1084
+ #: PelTag.php:1846
1085
+ msgid "Spatial Frequency Response"
1086
+ msgstr ""
1087
+
1088
+ #: PelTag.php:1848
1089
+ msgid "Focal Plane x-Resolution"
1090
+ msgstr ""
1091
+
1092
+ #: PelTag.php:1850
1093
+ msgid "Focal Plane y-Resolution"
1094
+ msgstr ""
1095
+
1096
+ #: PelTag.php:1852
1097
+ msgid "Focal Plane Resolution Unit"
1098
+ msgstr ""
1099
+
1100
+ #: PelTag.php:1854
1101
+ msgid "Subject Location"
1102
+ msgstr "Ort des Objektes"
1103
+
1104
+ #: PelTag.php:1856
1105
+ msgid "Exposure index"
1106
+ msgstr "Belichtungsart"
1107
+
1108
+ #: PelTag.php:1858
1109
+ msgid "Sensing Method"
1110
+ msgstr ""
1111
+
1112
+ #: PelTag.php:1860
1113
+ msgid "File Source"
1114
+ msgstr "Dateiquelle"
1115
+
1116
+ #: PelTag.php:1862
1117
+ msgid "Scene Type"
1118
+ msgstr ""
1119
+
1120
+ #: PelTag.php:1864
1121
+ msgid "Subject Area"
1122
+ msgstr ""
1123
+
1124
+ #: PelTag.php:1866
1125
+ msgid "Custom Rendered"
1126
+ msgstr ""
1127
+
1128
+ #: PelTag.php:1868
1129
+ msgid "Exposure Mode"
1130
+ msgstr "Belichtungsart"
1131
+
1132
+ #: PelTag.php:1870
1133
+ msgid "White Balance"
1134
+ msgstr ""
1135
+
1136
+ #: PelTag.php:1872
1137
+ msgid "Digital Zoom Ratio"
1138
+ msgstr ""
1139
+
1140
+ #: PelTag.php:1874
1141
+ msgid "Focal Length In 35mm Film"
1142
+ msgstr ""
1143
+
1144
+ #: PelTag.php:1876
1145
+ msgid "Scene Capture Type"
1146
+ msgstr ""
1147
+
1148
+ #: PelTag.php:1878
1149
+ msgid "Gain Control"
1150
+ msgstr ""
1151
+
1152
+ #: PelTag.php:1880
1153
+ msgid "Contrast"
1154
+ msgstr "Kontrast"
1155
+
1156
+ #: PelTag.php:1882
1157
+ msgid "Saturation"
1158
+ msgstr "Sättigung"
1159
+
1160
+ #: PelTag.php:1884
1161
+ msgid "Sharpness"
1162
+ msgstr "Schärfe"
1163
+
1164
+ #: PelTag.php:1886
1165
+ msgid "Device Setting Description"
1166
+ msgstr ""
1167
+
1168
+ #: PelTag.php:1888
1169
+ msgid "Subject Distance Range"
1170
+ msgstr ""
1171
+
1172
+ #: PelTag.php:1890
1173
+ msgid "Image Unique ID"
1174
+ msgstr "Eindeutige Bildnummer"
1175
+
1176
+ #: PelTag.php:1892
1177
+ msgid "Gamma"
1178
+ msgstr ""
1179
+
1180
+ #: PelTag.php:1894
1181
+ msgid "Print IM"
1182
+ msgstr ""
1183
+
1184
+ #: PelTag.php:1964
1185
+ #, php-format
1186
+ msgid "Unknown Tag: 0x%04X"
1187
+ msgstr "Unbekannt 0x%04X"
1188
+
1189
+ #: PelTiff.php:255
1190
+ #, php-format
1191
+ msgid "Dumping TIFF data...\n"
1192
+ msgstr ""
1193
+
1194
+ #~ msgid "Exposure time, given in seconds (sec)."
1195
+ #~ msgstr "Belichtungszeit in Sekunden."
1196
+
1197
+ #, fuzzy
1198
+ #~ msgid "The F number."
1199
+ #~ msgstr "Eindeutige Bildnummer"
1200
+
1201
+ #~ msgid "The date and time when the image was stored as digital data. "
1202
+ #~ msgstr "Das Datum und die Uhrzeit der Speicherung als digitale Daten."
1203
+
1204
+ #~ msgid "The distance to the subject, given in meters."
1205
+ #~ msgstr "Die Entfernung zum Objekt (in Metern)."
1206
+
1207
+ #~ msgid "The kind of light source."
1208
+ #~ msgstr "Die Art der Lichtquelle."
1209
+
1210
+ #~ msgid ""
1211
+ #~ "This tag is recorded when an image is taken using a strobe light (flash)."
1212
+ #~ msgstr ""
1213
+ #~ "Dieser Eintrag wird aufgezeichnet, wenn das Bild mit einem Blitz gemacht "
1214
+ #~ "wurde."
1215
+
1216
+ #, fuzzy
1217
+ #~ msgid "This tag indicates the distance to the subject."
1218
+ #~ msgstr "Die Entfernung zum Objekt (in Metern)."
1219
+
1220
+ #, fuzzy
1221
+ #~ msgid "Indicates the distance to the destination point."
1222
+ #~ msgstr "Die Entfernung zum Objekt (in Metern)."
1223
+
1224
+ #~ msgid "ImageWidth"
1225
+ #~ msgstr "Bildbreite"
1226
+
1227
+ #~ msgid "ImageLength"
1228
+ #~ msgstr "Bildlänge"
1229
+
1230
+ #~ msgid "PhotometricInterpretation"
1231
+ #~ msgstr "Fotometrische Interpretation"
1232
+
1233
+ #~ msgid "DocumentName"
1234
+ #~ msgstr "Dokumentenname"
1235
+
1236
+ #~ msgid "ImageDescription"
1237
+ #~ msgstr "Bildbeschreibung"
1238
+
1239
+ #~ msgid "XResolution"
1240
+ #~ msgstr "Auflösung in x-Richtung"
1241
+
1242
+ #~ msgid "YResolution"
1243
+ #~ msgstr "Auflösung in y-Richtung"
1244
+
1245
+ #~ msgid "ResolutionUnit"
1246
+ #~ msgstr "Maßeinheit der Auflösung"
1247
+
1248
+ #~ msgid "DateTime"
1249
+ #~ msgstr "Datum und Uhrzeit"
1250
+
1251
+ #~ msgid "YCbCrCoefficients"
1252
+ #~ msgstr "YCbCr Koeffizienten"
1253
+
1254
+ #~ msgid "YCbCrPositioning"
1255
+ #~ msgstr "YCbCr Positionierung"
1256
+
1257
+ #~ msgid "BatteryLevel"
1258
+ #~ msgstr "Batteriestatus"
1259
+
1260
+ #~ msgid "ExposureTime"
1261
+ #~ msgstr "Belichtungszeit"
1262
+
1263
+ #~ msgid "BrightnessValue"
1264
+ #~ msgstr "Helligkeit"
1265
+
1266
+ #, fuzzy
1267
+ #~ msgid "ExposureBiasValue"
1268
+ #~ msgstr "Belichtungszeit"
1269
+
1270
+ #~ msgid "SubjectDistance"
1271
+ #~ msgstr "Entfernung des Objekts"
1272
+
1273
+ #~ msgid "LightSource"
1274
+ #~ msgstr "Lichtquelle"
1275
+
1276
+ #~ msgid "FocalLength"
1277
+ #~ msgstr "Bildlänge"
1278
+
1279
+ #~ msgid "MakerNote"
1280
+ #~ msgstr "Anmerkungen des Herstellers"
1281
+
1282
+ #~ msgid "UserComment"
1283
+ #~ msgstr "Anmerkung des Nutzers"
1284
+
1285
+ #~ msgid "FlashEnergy"
1286
+ #~ msgstr "Energie des Blitzes"
1287
+
1288
+ #~ msgid "FocalPlaneXResolution"
1289
+ #~ msgstr "Auflösung in x-Richtung"
1290
+
1291
+ #~ msgid "FocalPlaneYResolution"
1292
+ #~ msgstr "Auflösung in y-Richtung"
1293
+
1294
+ #~ msgid "FocalPlaneResolutionUnit"
1295
+ #~ msgstr "Maßeinheit der Auflösung"
1296
+
1297
+ #~ msgid "SubjectLocation"
1298
+ #~ msgstr "Ort des Objektes"
1299
+
1300
+ #~ msgid "ExposureIndex"
1301
+ #~ msgstr "Belichtungsart"
1302
+
1303
+ #~ msgid "FileSource"
1304
+ #~ msgstr "Dateiquelle"
1305
+
1306
+ #~ msgid "ExposureMode"
1307
+ #~ msgstr "Belichtungsart"
1308
+
1309
+ #~ msgid "SubjectDistanceRange"
1310
+ #~ msgstr "Entfernung des Objekts"
1311
+
1312
+ #~ msgid "ImageUniqueID"
1313
+ #~ msgstr "Eindeutige Bildnummer"
1314
+
1315
+ #~ msgid "Invalid format '%s', expected '%s'."
1316
+ #~ msgstr "Ungültiges Format '%s', '%s' wurde erwartet."
1317
+
1318
+ #~ msgid "Invalid number of components (%d, expected %d)."
1319
+ #~ msgstr "Ungültige Anzahl von Komponenten (%d, %d wurden erwartet)."
1320
+
1321
+ #, fuzzy
1322
+ #~ msgid "Invalid size of entry (%d, expected %d x %d)."
1323
+ #~ msgstr "Ungültige Anzahl von Komponenten (%d, %d wurden erwartet)."
1324
+
1325
+ #, fuzzy
1326
+ #~ msgid "Unknown Exif Version"
1327
+ #~ msgstr "Exif Version"
1328
+
1329
+ #~ msgid "%d bytes unknown data"
1330
+ #~ msgstr "%d Byte(s) unbekannte Daten"
1331
+
1332
+ #~ msgid "unknown"
1333
+ #~ msgstr "unbekannt"
1334
+
1335
+ #~ msgid "portrait"
1336
+ #~ msgstr "Portrait"
1337
+
1338
+ #~ msgid "landscape"
1339
+ #~ msgstr "Landschaft"
1340
+
1341
+ #~ msgid "yes"
1342
+ #~ msgstr "Ja"
1343
+
1344
+ #~ msgid "Undefined"
1345
+ #~ msgstr "Undefiniert"
1346
+
1347
+ #, fuzzy
1348
+ #~ msgid "Image type"
1349
+ #~ msgstr "Bildbreite"
1350
+
1351
+ #, fuzzy
1352
+ #~ msgid "Flash not fired"
1353
+ #~ msgstr "Blitz löste nicht aus."
1354
+
1355
+ #, fuzzy
1356
+ #~ msgid "Night"
1357
+ #~ msgstr "Lichtquelle"
1358
+
1359
+ #, fuzzy
1360
+ #~ msgid " / Saturation : "
1361
+ #~ msgstr "Sättigung"
1362
+
1363
+ #, fuzzy
1364
+ #~ msgid " / Sharpness : "
1365
+ #~ msgstr "Schärfe"
1366
+
1367
+ #, fuzzy
1368
+ #~ msgid "right"
1369
+ #~ msgstr "Copyright"
1370
+
1371
+ #, fuzzy
1372
+ #~ msgid "center"
1373
+ #~ msgstr "zentriert"
1374
+
1375
+ #, fuzzy
1376
+ #~ msgid " / Exposure mode : "
1377
+ #~ msgstr "Belichtungsart"
1378
+
1379
+ #, fuzzy
1380
+ #~ msgid "Cloudy"
1381
+ #~ msgstr "Wolkiges Wetter"
1382
+
1383
+ #, fuzzy
1384
+ #~ msgid "Right"
1385
+ #~ msgstr "Tageslicht"
1386
+
1387
+ #, fuzzy
1388
+ #~ msgid "Center"
1389
+ #~ msgstr "Zentimeter"
1390
+
1391
+ #, fuzzy
1392
+ #~ msgid "Subject Distance (mm)"
1393
+ #~ msgstr "Entfernung des Objekts"
1394
+
1395
+ #, fuzzy
1396
+ #~ msgid "Unknown 1"
1397
+ #~ msgstr "Unbekannt"
1398
+
1399
+ #, fuzzy
1400
+ #~ msgid "Unknown 3"
1401
+ #~ msgstr "Unbekannt"
1402
+
1403
+ #, fuzzy
1404
+ #~ msgid "Unknown 4"
1405
+ #~ msgstr "Unbekannt"
1406
+
1407
+ #, fuzzy
1408
+ #~ msgid "Flash Mode"
1409
+ #~ msgstr "Blitz"
1410
+
1411
+ #, fuzzy
1412
+ #~ msgid "Sharpness Setting"
1413
+ #~ msgstr "Schärfe"
1414
+
1415
+ #, fuzzy
1416
+ #~ msgid "Contrast Setting"
1417
+ #~ msgstr "Kontrast"
1418
+
1419
+ #, fuzzy
1420
+ #~ msgid "Manual Focus"
1421
+ #~ msgstr "Manuelle Belichtungszeit"
1422
+
1423
+ #, fuzzy
1424
+ #~ msgid "left to right"
1425
+ #~ msgstr "unten - rechts"
1426
+
1427
+ #, fuzzy
1428
+ #~ msgid "right to left"
1429
+ #~ msgstr "rechts - oben"
1430
+
1431
+ #, fuzzy
1432
+ #~ msgid "bottom to top"
1433
+ #~ msgstr "unten - links"
1434
+
1435
+ #, fuzzy
1436
+ #~ msgid "top to bottom"
1437
+ #~ msgstr "links - unten"
1438
+
1439
+ #, fuzzy
1440
+ #~ msgid "Manual: Unknown"
1441
+ #~ msgstr "unbekannt"
1442
+
1443
+ #, fuzzy
1444
+ #~ msgid "Yes"
1445
+ #~ msgstr "Ja"
1446
+
1447
+ #, fuzzy
1448
+ #~ msgid "Capture Mode"
1449
+ #~ msgstr "Belichtungsart"
1450
+
1451
+ #, fuzzy
1452
+ #~ msgid "Quality Level"
1453
+ #~ msgstr "Batteriestatus"
1454
+
1455
+ #, fuzzy
1456
+ #~ msgid "Focus Mode"
1457
+ #~ msgstr "Belichtungsart"
1458
+
1459
+ #, fuzzy
1460
+ #~ msgid "Unknown 5"
1461
+ #~ msgstr "Unbekannt"
1462
+
1463
+ #, fuzzy
1464
+ #~ msgid "Unknown 6"
1465
+ #~ msgstr "Unbekannt"
1466
+
1467
+ #, fuzzy
1468
+ #~ msgid "Unknown 8"
1469
+ #~ msgstr "Unbekannt"
1470
+
1471
+ #, fuzzy
1472
+ #~ msgid "Unknown 9"
1473
+ #~ msgstr "Unbekannt"
1474
+
1475
+ #, fuzzy
1476
+ #~ msgid "Unknown 14"
1477
+ #~ msgstr "Unbekannt"
1478
+
1479
+ #, fuzzy
1480
+ #~ msgid "Unknown 15"
1481
+ #~ msgstr "Unbekannt"
1482
+
1483
+ #, fuzzy
1484
+ #~ msgid "Unknown 16"
1485
+ #~ msgstr "Unbekannt"
1486
+
1487
+ #, fuzzy
1488
+ #~ msgid "Unknown 17"
1489
+ #~ msgstr "Unbekannt"
1490
+
1491
+ #, fuzzy
1492
+ #~ msgid "Unknown 18"
1493
+ #~ msgstr "Unbekannt"
1494
+
1495
+ #, fuzzy
1496
+ #~ msgid "Unknown 19"
1497
+ #~ msgstr "Unbekannt"
1498
+
1499
+ #, fuzzy
1500
+ #~ msgid "Unknown 21"
1501
+ #~ msgstr "Unbekannt"
1502
+
1503
+ #, fuzzy
1504
+ #~ msgid "Unknown 24"
1505
+ #~ msgstr "Unbekannt"
1506
+
1507
+ #, fuzzy
1508
+ #~ msgid "Unknown 25"
1509
+ #~ msgstr "Unbekannt"
1510
+
1511
+ #, fuzzy
1512
+ #~ msgid "DaylightSavings"
1513
+ #~ msgstr "Tageslicht"
1514
+
1515
+ #, fuzzy
1516
+ #~ msgid "Night-scene"
1517
+ #~ msgstr "Lichtquelle"
1518
+
1519
+ #, fuzzy
1520
+ #~ msgid "Flash On"
1521
+ #~ msgstr "Blitz"
1522
+
1523
+ #, fuzzy
1524
+ #~ msgid "Flash Off"
1525
+ #~ msgstr "Blitz"
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/es.po ADDED
@@ -0,0 +1,2494 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Spanish translation for the PHP Exif Library (PEL).
2
+ # Originally from libexif.
3
+ # Copyright (C) 2004, 2005, 2006 Martin Geisler
4
+ # This file is distributed under the term of the GPL.
5
+ # Fabian Mandelbaum <fabman@mandrakesoft.com>, 2002.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PEL\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2006-11-19 20:48+0100\n"
12
+ "PO-Revision-Date: 2005-10-03 13:44+0200\n"
13
+ "Last-Translator: Fabian Mandelbaum <fabman@mandrakesoft.com>\n"
14
+ "Language-Team: Spanish\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+
19
+ #: PelDataWindow.php:517
20
+ #, php-format
21
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
22
+ msgstr ""
23
+
24
+ #: PelEntryAscii.php:465
25
+ msgid "(Photographer)"
26
+ msgstr ""
27
+
28
+ #: PelEntryAscii.php:466
29
+ msgid "(Editor)"
30
+ msgstr ""
31
+
32
+ #: PelEntry.php:369
33
+ #, php-format
34
+ msgid " Tag: 0x%04X (%s)\n"
35
+ msgstr ""
36
+
37
+ #: PelEntry.php:371
38
+ #, php-format
39
+ msgid " Format : %d (%s)\n"
40
+ msgstr ""
41
+
42
+ #: PelEntry.php:373
43
+ #, php-format
44
+ msgid " Components: %d\n"
45
+ msgstr ""
46
+
47
+ #: PelEntry.php:376
48
+ #, php-format
49
+ msgid " Value : %s\n"
50
+ msgstr ""
51
+
52
+ #: PelEntry.php:377
53
+ #, php-format
54
+ msgid " Text : %s\n"
55
+ msgstr ""
56
+
57
+ #: PelEntryRational.php:136 PelEntryRational.php:141
58
+ #, php-format
59
+ msgid "f/%.01f"
60
+ msgstr ""
61
+
62
+ #: PelEntryRational.php:146
63
+ #, php-format
64
+ msgid "%.1f mm"
65
+ msgstr ""
66
+
67
+ #: PelEntryRational.php:151
68
+ #, php-format
69
+ msgid "%.1f m"
70
+ msgstr ""
71
+
72
+ #: PelEntryRational.php:157
73
+ #, php-format
74
+ msgid "1/%d sec."
75
+ msgstr "1/%d seg."
76
+
77
+ #: PelEntryRational.php:159
78
+ #, php-format
79
+ msgid "%d sec."
80
+ msgstr "%d seg."
81
+
82
+ #: PelEntryRational.php:267
83
+ #, php-format
84
+ msgid "%.0f/%.0f sec. (APEX: %d)"
85
+ msgstr ""
86
+
87
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
88
+ #, fuzzy
89
+ msgid "Unknown"
90
+ msgstr "desconocido"
91
+
92
+ #: PelEntryShort.php:144
93
+ msgid "Average"
94
+ msgstr "Promedio"
95
+
96
+ #: PelEntryShort.php:146
97
+ msgid "Center-Weighted Average"
98
+ msgstr "Promedio Ponderado en el Centro"
99
+
100
+ #: PelEntryShort.php:148
101
+ msgid "Spot"
102
+ msgstr "Lugar"
103
+
104
+ #: PelEntryShort.php:150
105
+ msgid "Multi Spot"
106
+ msgstr "Multi Lugar"
107
+
108
+ #: PelEntryShort.php:152
109
+ msgid "Pattern"
110
+ msgstr "Patrón"
111
+
112
+ #: PelEntryShort.php:154
113
+ msgid "Partial"
114
+ msgstr "Parcial"
115
+
116
+ #: PelEntryShort.php:156 PelEntryShort.php:247
117
+ msgid "Other"
118
+ msgstr "Otro"
119
+
120
+ #: PelEntryShort.php:165
121
+ msgid "Uncompressed"
122
+ msgstr "Descomprimido"
123
+
124
+ #: PelEntryShort.php:167
125
+ msgid "JPEG compression"
126
+ msgstr "compresión JPEG"
127
+
128
+ #: PelEntryShort.php:177
129
+ msgid "chunky format"
130
+ msgstr "formato por trozos"
131
+
132
+ #: PelEntryShort.php:179
133
+ msgid "planar format"
134
+ msgstr "formato planar"
135
+
136
+ #: PelEntryShort.php:188 PelEntryShort.php:268
137
+ msgid "Not defined"
138
+ msgstr "No definido"
139
+
140
+ #: PelEntryShort.php:190
141
+ msgid "One-chip color area sensor"
142
+ msgstr "Sensor de área de color de un chip"
143
+
144
+ #: PelEntryShort.php:192
145
+ msgid "Two-chip color area sensor"
146
+ msgstr "Sensor de área de color de dos chips"
147
+
148
+ #: PelEntryShort.php:194
149
+ msgid "Three-chip color area sensor"
150
+ msgstr "Sensor de área de color de tres chips"
151
+
152
+ #: PelEntryShort.php:196
153
+ msgid "Color sequential area sensor"
154
+ msgstr "Sensor de área de color secuencial"
155
+
156
+ #: PelEntryShort.php:198
157
+ msgid "Trilinear sensor"
158
+ msgstr "Sensor tri-lineal"
159
+
160
+ #: PelEntryShort.php:200
161
+ msgid "Color sequential linear sensor"
162
+ msgstr "Sensor lineal secuencial de color"
163
+
164
+ #: PelEntryShort.php:211
165
+ msgid "Daylight"
166
+ msgstr "Luz de día"
167
+
168
+ #: PelEntryShort.php:213
169
+ msgid "Fluorescent"
170
+ msgstr "Fluorescente"
171
+
172
+ #: PelEntryShort.php:215
173
+ msgid "Tungsten (incandescent light)"
174
+ msgstr "Tungsteno (luz incandescente)"
175
+
176
+ #: PelEntryShort.php:217 PelTag.php:1808
177
+ msgid "Flash"
178
+ msgstr "Flash"
179
+
180
+ #: PelEntryShort.php:219
181
+ msgid "Fine weather"
182
+ msgstr "Tiempo bueno"
183
+
184
+ #: PelEntryShort.php:221
185
+ msgid "Cloudy weather"
186
+ msgstr "Tiempo nublado"
187
+
188
+ #: PelEntryShort.php:223
189
+ msgid "Shade"
190
+ msgstr "Sombra"
191
+
192
+ #: PelEntryShort.php:225
193
+ msgid "Daylight fluorescent"
194
+ msgstr "Luz de día fluorescente"
195
+
196
+ #: PelEntryShort.php:227
197
+ msgid "Day white fluorescent"
198
+ msgstr "Día blanco fluorescente"
199
+
200
+ #: PelEntryShort.php:229
201
+ msgid "Cool white fluorescent"
202
+ msgstr "Blanco frío fluorescente"
203
+
204
+ #: PelEntryShort.php:231
205
+ msgid "White fluorescent"
206
+ msgstr "Blanco fluorescente"
207
+
208
+ #: PelEntryShort.php:233
209
+ msgid "Standard light A"
210
+ msgstr "Luz estándar A"
211
+
212
+ #: PelEntryShort.php:235
213
+ msgid "Standard light B"
214
+ msgstr "Luz estándar B"
215
+
216
+ #: PelEntryShort.php:237
217
+ msgid "Standard light C"
218
+ msgstr "Luz estándar C"
219
+
220
+ #: PelEntryShort.php:239
221
+ msgid "D55"
222
+ msgstr "D55"
223
+
224
+ #: PelEntryShort.php:241
225
+ msgid "D65"
226
+ msgstr "D65"
227
+
228
+ #: PelEntryShort.php:243
229
+ msgid "D75"
230
+ msgstr "D75"
231
+
232
+ #: PelEntryShort.php:245
233
+ msgid "ISO studio tungsten"
234
+ msgstr "tungsteno de estudio ISO"
235
+
236
+ #: PelEntryShort.php:257
237
+ msgid "Inch"
238
+ msgstr "Pulgada"
239
+
240
+ #: PelEntryShort.php:259
241
+ msgid "Centimeter"
242
+ msgstr "Centímetro"
243
+
244
+ #: PelEntryShort.php:270
245
+ msgid "Manual"
246
+ msgstr "Manual"
247
+
248
+ #: PelEntryShort.php:272
249
+ msgid "Normal program"
250
+ msgstr "Programa normal"
251
+
252
+ #: PelEntryShort.php:274
253
+ msgid "Aperture priority"
254
+ msgstr "Prioridad de apertura"
255
+
256
+ #: PelEntryShort.php:276
257
+ msgid "Shutter priority"
258
+ msgstr "Prioridad del obturador"
259
+
260
+ #: PelEntryShort.php:278
261
+ msgid "Creative program (biased toward depth of field)"
262
+ msgstr "Programa creativo (orientado a la profundidad del campo)"
263
+
264
+ #: PelEntryShort.php:280
265
+ msgid "Action program (biased toward fast shutter speed)"
266
+ msgstr "Programa de acción (orientado a velocidad rápida del obturador)"
267
+
268
+ #: PelEntryShort.php:282
269
+ msgid "Portrait mode (for closeup photos with the background out of focus"
270
+ msgstr "Modo retrato (para fotos de cerca con el fondo fuera de foco"
271
+
272
+ #: PelEntryShort.php:284
273
+ msgid "Landscape mode (for landscape photos with the background in focus"
274
+ msgstr "Modo paisaje (para fotos de paisaje con el fondo en foco"
275
+
276
+ #: PelEntryShort.php:293
277
+ msgid "top - left"
278
+ msgstr "arriba - izquierda"
279
+
280
+ #: PelEntryShort.php:295
281
+ msgid "top - right"
282
+ msgstr "arriba - derecha"
283
+
284
+ #: PelEntryShort.php:297
285
+ msgid "bottom - right"
286
+ msgstr "abajo - derecha"
287
+
288
+ #: PelEntryShort.php:299
289
+ msgid "bottom - left"
290
+ msgstr "abajo - izquierda"
291
+
292
+ #: PelEntryShort.php:301
293
+ msgid "left - top"
294
+ msgstr "izquierda - arriba"
295
+
296
+ #: PelEntryShort.php:303
297
+ msgid "right - top"
298
+ msgstr "derecha - arriba"
299
+
300
+ #: PelEntryShort.php:305
301
+ msgid "right - bottom"
302
+ msgstr "derecha - abajo"
303
+
304
+ #: PelEntryShort.php:307
305
+ msgid "left - bottom"
306
+ msgstr "izquierda - abajo"
307
+
308
+ #: PelEntryShort.php:316
309
+ msgid "centered"
310
+ msgstr "centrado"
311
+
312
+ #: PelEntryShort.php:318
313
+ msgid "co-sited"
314
+ msgstr "co-situado"
315
+
316
+ #: PelEntryShort.php:351
317
+ msgid "Uncalibrated"
318
+ msgstr "Descalibrado"
319
+
320
+ #: PelEntryShort.php:360
321
+ msgid "Flash did not fire."
322
+ msgstr "El flash no disparó."
323
+
324
+ #: PelEntryShort.php:362
325
+ msgid "Flash fired."
326
+ msgstr "El flash disparó."
327
+
328
+ #: PelEntryShort.php:364
329
+ msgid "Strobe return light not detected."
330
+ msgstr "Luz de retorno estrosboscópica no detectada."
331
+
332
+ #: PelEntryShort.php:366
333
+ msgid "Strobe return light detected."
334
+ msgstr "Luz de retorno estrosboscópica detectada."
335
+
336
+ #: PelEntryShort.php:368
337
+ msgid "Flash fired, compulsory flash mode."
338
+ msgstr "El flash disparó, modo compulsivo del flash."
339
+
340
+ #: PelEntryShort.php:370
341
+ msgid "Flash fired, compulsory flash mode, return light not detected."
342
+ msgstr ""
343
+ "El flash disparó, modo compulsivo del flash, luz de retorno no detectada."
344
+
345
+ #: PelEntryShort.php:372
346
+ msgid "Flash fired, compulsory flash mode, return light detected."
347
+ msgstr "El flash disparó, modo compulsivo del flash, luz de retorno detectada."
348
+
349
+ #: PelEntryShort.php:374
350
+ msgid "Flash did not fire, compulsory flash mode."
351
+ msgstr "El flash no disparó, modo compulsivo del flash."
352
+
353
+ #: PelEntryShort.php:376
354
+ msgid "Flash did not fire, auto mode."
355
+ msgstr "El flash no disparó, modo automático."
356
+
357
+ #: PelEntryShort.php:378
358
+ msgid "Flash fired, auto mode."
359
+ msgstr "El flash disparó, modo automático."
360
+
361
+ #: PelEntryShort.php:380
362
+ msgid "Flash fired, auto mode, return light not detected."
363
+ msgstr "El flash disparó, modo automático, luz de retorno no detectada."
364
+
365
+ #: PelEntryShort.php:382
366
+ msgid "Flash fired, auto mode, return light detected."
367
+ msgstr "El flash disparó, modo automático, luz de retorno detectada."
368
+
369
+ #: PelEntryShort.php:384
370
+ msgid "No flash function."
371
+ msgstr "Sin función de flash."
372
+
373
+ #: PelEntryShort.php:386
374
+ msgid "Flash fired, red-eye reduction mode."
375
+ msgstr "El flash disparó, modo de reducción de ojos rojos."
376
+
377
+ #: PelEntryShort.php:388
378
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
379
+ msgstr ""
380
+ "El flash disparó, modo de reducción de ojos rojos, luz de retorno no "
381
+ "detectada."
382
+
383
+ #: PelEntryShort.php:390
384
+ msgid "Flash fired, red-eye reduction mode, return light detected."
385
+ msgstr ""
386
+ "El flash disparó, modo de reducción de ojos rojos, luz de retorno detectada."
387
+
388
+ #: PelEntryShort.php:392
389
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
390
+ msgstr ""
391
+ "El flash disparó, modo compulsivo del flash, modo de reducción de ojos rojos."
392
+
393
+ #: PelEntryShort.php:394
394
+ msgid ""
395
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
396
+ "detected."
397
+ msgstr ""
398
+ "El flash disparó, modo compulsivo del flash, modo de reducción de ojos "
399
+ "rojos, luz de retorno no detectada."
400
+
401
+ #: PelEntryShort.php:396
402
+ msgid ""
403
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
404
+ "detected."
405
+ msgstr ""
406
+ "El flash disparó, modo compulsivo del flash, modo de reducción de ojos "
407
+ "rojos, luz de retorno detectada."
408
+
409
+ #: PelEntryShort.php:398
410
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
411
+ msgstr "El flash no disparó, modo automático, modo de reducción de ojos rojos."
412
+
413
+ #: PelEntryShort.php:400
414
+ msgid "Flash fired, auto mode, red-eye reduction mode."
415
+ msgstr "El flash disparó, modo automático, modo de reducción de ojos rojos."
416
+
417
+ #: PelEntryShort.php:402
418
+ msgid ""
419
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
420
+ msgstr ""
421
+ "El flash disparó, modo automático, modo de reducción de ojos rojos, luz de "
422
+ "retorno no detectada."
423
+
424
+ #: PelEntryShort.php:404
425
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
426
+ msgstr ""
427
+ "El flash disparó, modo automático, modo de reducción de ojos rojos, luz de "
428
+ "retorno detectada."
429
+
430
+ #: PelEntryShort.php:413
431
+ msgid "Normal process"
432
+ msgstr "Proceso normal"
433
+
434
+ #: PelEntryShort.php:415
435
+ msgid "Custom process"
436
+ msgstr "Proceso personalizado"
437
+
438
+ #: PelEntryShort.php:424
439
+ msgid "Auto exposure"
440
+ msgstr "Exposición automática"
441
+
442
+ #: PelEntryShort.php:426
443
+ msgid "Manual exposure"
444
+ msgstr "Exposición manual"
445
+
446
+ #: PelEntryShort.php:428
447
+ msgid "Auto bracket"
448
+ msgstr "Auto bracket"
449
+
450
+ #: PelEntryShort.php:437
451
+ msgid "Auto white balance"
452
+ msgstr "Balance de blanco automático"
453
+
454
+ #: PelEntryShort.php:439
455
+ msgid "Manual white balance"
456
+ msgstr "Balance de blanco manual"
457
+
458
+ #: PelEntryShort.php:448
459
+ msgid "Standard"
460
+ msgstr "Estándar"
461
+
462
+ #: PelEntryShort.php:450
463
+ msgid "Landscape"
464
+ msgstr "Paisaje"
465
+
466
+ #: PelEntryShort.php:452
467
+ msgid "Portrait"
468
+ msgstr "Retrato"
469
+
470
+ #: PelEntryShort.php:454
471
+ msgid "Night scene"
472
+ msgstr "Escena nocturna"
473
+
474
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
475
+ msgid "Normal"
476
+ msgstr "Normal"
477
+
478
+ #: PelEntryShort.php:465
479
+ msgid "Low gain up"
480
+ msgstr "Ganancia baja alta"
481
+
482
+ #: PelEntryShort.php:467
483
+ msgid "High gain up"
484
+ msgstr "Ganancia alta alta"
485
+
486
+ #: PelEntryShort.php:469
487
+ msgid "Low gain down"
488
+ msgstr "Ganancia baja baja"
489
+
490
+ #: PelEntryShort.php:471
491
+ msgid "High gain down"
492
+ msgstr "Ganancia alta baja"
493
+
494
+ #: PelEntryShort.php:482
495
+ msgid "Low saturation"
496
+ msgstr "Baja saturación"
497
+
498
+ #: PelEntryShort.php:484
499
+ msgid "High saturation"
500
+ msgstr "Alta saturación"
501
+
502
+ #: PelEntryShort.php:496
503
+ msgid "Soft"
504
+ msgstr "Suave"
505
+
506
+ #: PelEntryShort.php:498
507
+ msgid "Hard"
508
+ msgstr "Duro"
509
+
510
+ #: PelEntryShort.php:509
511
+ msgid "Macro"
512
+ msgstr "Macro"
513
+
514
+ #: PelEntryShort.php:511
515
+ msgid "Close view"
516
+ msgstr "Vista cercana"
517
+
518
+ #: PelEntryShort.php:513
519
+ msgid "Distant view"
520
+ msgstr "Vista distante"
521
+
522
+ #: PelEntryShort.php:521
523
+ #, php-format
524
+ msgid "(x,y) = (%d,%d)"
525
+ msgstr ""
526
+
527
+ #: PelEntryShort.php:523
528
+ #, php-format
529
+ msgid "Within distance %d of (x,y) = (%d,%d)"
530
+ msgstr "Dentro de la distancia %d de (x,y) = (%d,%d)"
531
+
532
+ #: PelEntryShort.php:526
533
+ #, php-format
534
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
535
+ msgstr "Dentro del rectángulo (ancho %d, alto %d) alrededor de (x,y) = (%d,%d)"
536
+
537
+ #: PelEntryShort.php:531
538
+ #, php-format
539
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
540
+ msgstr "Cantidad de componentes inesperada (%d, esperados 2, 3, o 4)."
541
+
542
+ #: PelEntryUndefined.php:390
543
+ #, php-format
544
+ msgid "Exif %s"
545
+ msgstr "Exif %s"
546
+
547
+ #: PelEntryUndefined.php:392
548
+ #, php-format
549
+ msgid "Exif Version %s"
550
+ msgstr "Versión Exif %s"
551
+
552
+ #: PelEntryUndefined.php:396
553
+ #, php-format
554
+ msgid "FlashPix %s"
555
+ msgstr "FlashPix %s"
556
+
557
+ #: PelEntryUndefined.php:398
558
+ #, php-format
559
+ msgid "FlashPix Version %s"
560
+ msgstr "Versión FlashPix %s"
561
+
562
+ #: PelEntryUndefined.php:402
563
+ #, php-format
564
+ msgid "Interoperability %s"
565
+ msgstr ""
566
+
567
+ #: PelEntryUndefined.php:404
568
+ #, php-format
569
+ msgid "Interoperability Version %s"
570
+ msgstr ""
571
+
572
+ #: PelEntryUndefined.php:410
573
+ #, php-format
574
+ msgid "Version %s"
575
+ msgstr "Versión %s"
576
+
577
+ #: PelExif.php:169
578
+ msgid "Dumping Exif data...\n"
579
+ msgstr ""
580
+
581
+ #: PelFormat.php:192 PelFormat.php:220
582
+ #, php-format
583
+ msgid "Unknown format: 0x%X"
584
+ msgstr "Desconocido: 0x%X"
585
+
586
+ #: PelIfd.php:1180
587
+ #, php-format
588
+ msgid "Dumping IFD %s with %d entries...\n"
589
+ msgstr ""
590
+
591
+ #: PelIfd.php:1186
592
+ #, php-format
593
+ msgid "Dumping %d sub IFDs...\n"
594
+ msgstr ""
595
+
596
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
597
+ #, php-format
598
+ msgid "Unknown marker: 0x%02X"
599
+ msgstr ""
600
+
601
+ #: PelJpegMarker.php:302
602
+ msgid "Encoding (baseline)"
603
+ msgstr ""
604
+
605
+ #: PelJpegMarker.php:304
606
+ msgid "Encoding (extended sequential)"
607
+ msgstr ""
608
+
609
+ #: PelJpegMarker.php:306
610
+ msgid "Encoding (progressive)"
611
+ msgstr ""
612
+
613
+ #: PelJpegMarker.php:308
614
+ msgid "Encoding (lossless)"
615
+ msgstr ""
616
+
617
+ #: PelJpegMarker.php:310
618
+ msgid "Encoding (differential sequential)"
619
+ msgstr ""
620
+
621
+ #: PelJpegMarker.php:312
622
+ msgid "Encoding (differential progressive)"
623
+ msgstr ""
624
+
625
+ #: PelJpegMarker.php:314
626
+ msgid "Encoding (differential lossless)"
627
+ msgstr ""
628
+
629
+ #: PelJpegMarker.php:316
630
+ msgid "Encoding (extended sequential, arithmetic)"
631
+ msgstr ""
632
+
633
+ #: PelJpegMarker.php:318
634
+ msgid "Encoding (progressive, arithmetic)"
635
+ msgstr ""
636
+
637
+ #: PelJpegMarker.php:320
638
+ msgid "Encoding (lossless, arithmetic)"
639
+ msgstr ""
640
+
641
+ #: PelJpegMarker.php:322
642
+ msgid "Encoding (differential sequential, arithmetic)"
643
+ msgstr ""
644
+
645
+ #: PelJpegMarker.php:324
646
+ msgid "Encoding (differential progressive, arithmetic)"
647
+ msgstr ""
648
+
649
+ #: PelJpegMarker.php:326
650
+ msgid "Encoding (differential lossless, arithmetic)"
651
+ msgstr ""
652
+
653
+ #: PelJpegMarker.php:328
654
+ msgid "Start of image"
655
+ msgstr ""
656
+
657
+ #: PelJpegMarker.php:330
658
+ msgid "End of image"
659
+ msgstr ""
660
+
661
+ #: PelJpegMarker.php:332
662
+ msgid "Start of scan"
663
+ msgstr ""
664
+
665
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
666
+ msgid "Comment"
667
+ msgstr "Comentario del usuario"
668
+
669
+ #: PelJpegMarker.php:336
670
+ msgid "Define Huffman table"
671
+ msgstr ""
672
+
673
+ #: PelJpegMarker.php:338
674
+ msgid "Extension"
675
+ msgstr ""
676
+
677
+ #: PelJpegMarker.php:340
678
+ msgid "Define arithmetic coding conditioning"
679
+ msgstr ""
680
+
681
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
682
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
683
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
684
+ #, php-format
685
+ msgid "Restart %d"
686
+ msgstr ""
687
+
688
+ #: PelJpegMarker.php:358
689
+ msgid "Define quantization table"
690
+ msgstr ""
691
+
692
+ #: PelJpegMarker.php:360
693
+ msgid "Define number of lines"
694
+ msgstr ""
695
+
696
+ #: PelJpegMarker.php:362
697
+ msgid "Define restart interval"
698
+ msgstr ""
699
+
700
+ #: PelJpegMarker.php:364
701
+ msgid "Define hierarchical progression"
702
+ msgstr ""
703
+
704
+ #: PelJpegMarker.php:366
705
+ msgid "Expand reference component"
706
+ msgstr ""
707
+
708
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
709
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
710
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
711
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
712
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
713
+ #: PelJpegMarker.php:398
714
+ #, php-format
715
+ msgid "Application segment %d"
716
+ msgstr ""
717
+
718
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
719
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
720
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
721
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
722
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
723
+ #, fuzzy, php-format
724
+ msgid "Extension %d"
725
+ msgstr "Versión Exif"
726
+
727
+ #: PelJpeg.php:543
728
+ msgid "Dumping JPEG data...\n"
729
+ msgstr ""
730
+
731
+ #: PelJpeg.php:547
732
+ #, php-format
733
+ msgid "Section %d (marker 0x%02X - %s):\n"
734
+ msgstr ""
735
+
736
+ #: PelJpeg.php:549
737
+ #, fuzzy, php-format
738
+ msgid " Description: %s\n"
739
+ msgstr "Descripción de la imagen"
740
+
741
+ #: PelJpeg.php:557
742
+ msgid " Content : Exif data\n"
743
+ msgstr ""
744
+
745
+ #: PelJpeg.php:560
746
+ #, php-format
747
+ msgid " Content : %s\n"
748
+ msgstr ""
749
+
750
+ #: PelJpeg.php:562
751
+ msgid " Content : Unknown\n"
752
+ msgstr ""
753
+
754
+ #: PelTag.php:1649
755
+ #, fuzzy, php-format
756
+ msgid "Unknown: 0x%04X"
757
+ msgstr "Desconocido: 0x%02X"
758
+
759
+ #: PelTag.php:1678
760
+ msgid "Interoperability Index"
761
+ msgstr ""
762
+
763
+ #: PelTag.php:1680
764
+ msgid "Interoperability Version"
765
+ msgstr ""
766
+
767
+ #: PelTag.php:1682
768
+ msgid "Image Width"
769
+ msgstr "Ancho de la imagen"
770
+
771
+ #: PelTag.php:1684
772
+ msgid "Image Length"
773
+ msgstr "Longitud de la imagen"
774
+
775
+ #: PelTag.php:1686
776
+ msgid "Bits per Sample"
777
+ msgstr "Bits por muestra"
778
+
779
+ #: PelTag.php:1688
780
+ msgid "Compression"
781
+ msgstr "Compresión"
782
+
783
+ #: PelTag.php:1690
784
+ msgid "Photometric Interpretation"
785
+ msgstr "Interpretación fotométrica"
786
+
787
+ #: PelTag.php:1692
788
+ msgid "Fill Order"
789
+ msgstr "Orden de llenado"
790
+
791
+ #: PelTag.php:1694
792
+ msgid "Document Name"
793
+ msgstr "Nombre del documento"
794
+
795
+ #: PelTag.php:1696
796
+ msgid "Image Description"
797
+ msgstr "Descripción de la imagen"
798
+
799
+ #: PelTag.php:1698
800
+ msgid "Manufacturer"
801
+ msgstr "Fabricante"
802
+
803
+ #: PelTag.php:1700
804
+ msgid "Model"
805
+ msgstr "Modelo"
806
+
807
+ #: PelTag.php:1702
808
+ msgid "Strip Offsets"
809
+ msgstr "Desplazamiento de tira"
810
+
811
+ #: PelTag.php:1704
812
+ msgid "Orientation"
813
+ msgstr "Orientación"
814
+
815
+ #: PelTag.php:1706
816
+ msgid "Samples per Pixel"
817
+ msgstr "Muestras por pixel"
818
+
819
+ #: PelTag.php:1708
820
+ msgid "Rows per Strip"
821
+ msgstr "Filas por tira"
822
+
823
+ #: PelTag.php:1710
824
+ msgid "Strip Byte Count"
825
+ msgstr "Cantidad de bytes por tira"
826
+
827
+ #: PelTag.php:1712
828
+ msgid "x-Resolution"
829
+ msgstr "Resolución X"
830
+
831
+ #: PelTag.php:1714
832
+ msgid "y-Resolution"
833
+ msgstr "Resolución Y"
834
+
835
+ #: PelTag.php:1716
836
+ msgid "Planar Configuration"
837
+ msgstr "Configuración planar"
838
+
839
+ #: PelTag.php:1718
840
+ msgid "Resolution Unit"
841
+ msgstr "Unidad de resolución"
842
+
843
+ #: PelTag.php:1720
844
+ msgid "Transfer Function"
845
+ msgstr "Función de transferencia"
846
+
847
+ #: PelTag.php:1722
848
+ msgid "Software"
849
+ msgstr "Software"
850
+
851
+ #: PelTag.php:1724
852
+ msgid "Date and Time"
853
+ msgstr "Fecha y hora"
854
+
855
+ #: PelTag.php:1726
856
+ msgid "Artist"
857
+ msgstr "Artista"
858
+
859
+ #: PelTag.php:1728
860
+ msgid "White Point"
861
+ msgstr "Punto blanco"
862
+
863
+ #: PelTag.php:1730
864
+ msgid "Primary Chromaticities"
865
+ msgstr "Cromaticidades primarias"
866
+
867
+ #: PelTag.php:1732
868
+ msgid "Transfer Range"
869
+ msgstr "Rango de transferencia"
870
+
871
+ #: PelTag.php:1734
872
+ msgid "JPEGProc"
873
+ msgstr ""
874
+
875
+ #: PelTag.php:1736
876
+ msgid "JPEG Interchange Format"
877
+ msgstr "Formato de intercambio de JPEG"
878
+
879
+ #: PelTag.php:1738
880
+ msgid "JPEG Interchange Format Length"
881
+ msgstr "Longitud del formato de intercambio de JPEG"
882
+
883
+ #: PelTag.php:1740
884
+ msgid "YCbCr Coefficients"
885
+ msgstr "Coeficientes YCbCr"
886
+
887
+ #: PelTag.php:1742
888
+ msgid "YCbCr Sub-Sampling"
889
+ msgstr "Sub-muestreo YCbCr"
890
+
891
+ #: PelTag.php:1744
892
+ msgid "YCbCr Positioning"
893
+ msgstr "Posicionamiento YCbCr"
894
+
895
+ #: PelTag.php:1746
896
+ msgid "Reference Black/White"
897
+ msgstr "Referencia Blanco/Negro"
898
+
899
+ #: PelTag.php:1748
900
+ #, fuzzy
901
+ msgid "Related Image File Format"
902
+ msgstr "Ancho de la imagen"
903
+
904
+ #: PelTag.php:1750
905
+ #, fuzzy
906
+ msgid "Related Image Width"
907
+ msgstr "Ancho de la imagen"
908
+
909
+ #: PelTag.php:1752
910
+ #, fuzzy
911
+ msgid "Related Image Length"
912
+ msgstr "Longitud de la imagen"
913
+
914
+ #: PelTag.php:1754
915
+ #, fuzzy
916
+ msgid "CFA Repeat Pattern Dim"
917
+ msgstr "Patrón CFA"
918
+
919
+ #: PelTag.php:1756
920
+ msgid "CFA Pattern"
921
+ msgstr "Patrón CFA"
922
+
923
+ #: PelTag.php:1758
924
+ msgid "Battery Level"
925
+ msgstr "Nivel de la batería"
926
+
927
+ #: PelTag.php:1760
928
+ msgid "Copyright"
929
+ msgstr "Copyright"
930
+
931
+ #: PelTag.php:1762
932
+ msgid "Exposure Time"
933
+ msgstr "Tiempo de exposición"
934
+
935
+ #: PelTag.php:1764
936
+ msgid "FNumber"
937
+ msgstr "El número F."
938
+
939
+ #: PelTag.php:1766
940
+ msgid "IPTC/NAA"
941
+ msgstr ""
942
+
943
+ #: PelTag.php:1768
944
+ msgid "Exif IFD Pointer"
945
+ msgstr ""
946
+
947
+ #: PelTag.php:1770
948
+ msgid "Inter Color Profile"
949
+ msgstr ""
950
+
951
+ #: PelTag.php:1772
952
+ #, fuzzy
953
+ msgid "Exposure Program"
954
+ msgstr "Tiempo de exposición"
955
+
956
+ #: PelTag.php:1774
957
+ msgid "Spectral Sensitivity"
958
+ msgstr "Sensibilidad espectral"
959
+
960
+ #: PelTag.php:1776
961
+ msgid "GPS Info IFD Pointer"
962
+ msgstr ""
963
+
964
+ #: PelTag.php:1778
965
+ msgid "ISO Speed Ratings"
966
+ msgstr "Velocidad ISO"
967
+
968
+ #: PelTag.php:1780
969
+ msgid "OECF"
970
+ msgstr ""
971
+
972
+ #: PelTag.php:1782
973
+ msgid "Exif Version"
974
+ msgstr "Versión Exif"
975
+
976
+ #: PelTag.php:1784
977
+ msgid "Date and Time (original)"
978
+ msgstr "Fecha y Hora (original)"
979
+
980
+ #: PelTag.php:1786
981
+ msgid "Date and Time (digitized)"
982
+ msgstr "Fecha y Hora (digitalizado)"
983
+
984
+ #: PelTag.php:1788
985
+ #, fuzzy
986
+ msgid "Components Configuration"
987
+ msgstr "Configuración planar"
988
+
989
+ #: PelTag.php:1790
990
+ msgid "Compressed Bits per Pixel"
991
+ msgstr "Bits comprimidos por pixel"
992
+
993
+ #: PelTag.php:1792
994
+ msgid "Shutter speed"
995
+ msgstr "Velocidad del obturador"
996
+
997
+ #: PelTag.php:1794
998
+ msgid "Aperture"
999
+ msgstr "Apertura"
1000
+
1001
+ #: PelTag.php:1796
1002
+ msgid "Brightness"
1003
+ msgstr "Brillo"
1004
+
1005
+ #: PelTag.php:1798
1006
+ msgid "Exposure Bias"
1007
+ msgstr "Ajuste de exposición"
1008
+
1009
+ #: PelTag.php:1800
1010
+ #, fuzzy
1011
+ msgid "Max Aperture Value"
1012
+ msgstr "Apertura"
1013
+
1014
+ #: PelTag.php:1802
1015
+ msgid "Subject Distance"
1016
+ msgstr "Distancia del sujeto"
1017
+
1018
+ #: PelTag.php:1804
1019
+ msgid "Metering Mode"
1020
+ msgstr "Modo de métrica"
1021
+
1022
+ #: PelTag.php:1806
1023
+ msgid "Light Source"
1024
+ msgstr "Fuente de luz"
1025
+
1026
+ #: PelTag.php:1810
1027
+ msgid "Focal Length"
1028
+ msgstr "Distancia focal"
1029
+
1030
+ #: PelTag.php:1812
1031
+ msgid "Maker Note"
1032
+ msgstr "Nota del fabricante"
1033
+
1034
+ #: PelTag.php:1814
1035
+ msgid "User Comment"
1036
+ msgstr "Comentario del usuario"
1037
+
1038
+ #: PelTag.php:1816
1039
+ #, fuzzy
1040
+ msgid "SubSec Time"
1041
+ msgstr "Área del sujeto"
1042
+
1043
+ #: PelTag.php:1818
1044
+ #, fuzzy
1045
+ msgid "SubSec Time Original"
1046
+ msgstr "Fecha y Hora (original)"
1047
+
1048
+ #: PelTag.php:1820
1049
+ #, fuzzy
1050
+ msgid "SubSec Time Digitized"
1051
+ msgstr "Fecha y Hora (digitalizado)"
1052
+
1053
+ #: PelTag.php:1832
1054
+ msgid "FlashPix Version"
1055
+ msgstr "Versión FlashPix"
1056
+
1057
+ #: PelTag.php:1834
1058
+ msgid "Color Space"
1059
+ msgstr "Espacio de color"
1060
+
1061
+ #: PelTag.php:1836
1062
+ msgid "Pixel x-Dimension"
1063
+ msgstr ""
1064
+
1065
+ #: PelTag.php:1838
1066
+ msgid "Pixel y-Dimension"
1067
+ msgstr ""
1068
+
1069
+ #: PelTag.php:1840
1070
+ msgid "Related Sound File"
1071
+ msgstr ""
1072
+
1073
+ #: PelTag.php:1842
1074
+ msgid "Interoperability IFD Pointer"
1075
+ msgstr ""
1076
+
1077
+ #: PelTag.php:1844
1078
+ msgid "Flash Energy"
1079
+ msgstr "Energía del flash"
1080
+
1081
+ #: PelTag.php:1846
1082
+ msgid "Spatial Frequency Response"
1083
+ msgstr "Respuesta en frecuencia espacial"
1084
+
1085
+ #: PelTag.php:1848
1086
+ msgid "Focal Plane x-Resolution"
1087
+ msgstr "Resolución X del plano focal"
1088
+
1089
+ #: PelTag.php:1850
1090
+ msgid "Focal Plane y-Resolution"
1091
+ msgstr "Resolución Y del plano focal"
1092
+
1093
+ #: PelTag.php:1852
1094
+ msgid "Focal Plane Resolution Unit"
1095
+ msgstr "Unidad de resolución del plano focal"
1096
+
1097
+ #: PelTag.php:1854
1098
+ msgid "Subject Location"
1099
+ msgstr "Ubicación del sujeto"
1100
+
1101
+ #: PelTag.php:1856
1102
+ msgid "Exposure index"
1103
+ msgstr "Índice de exposición"
1104
+
1105
+ #: PelTag.php:1858
1106
+ msgid "Sensing Method"
1107
+ msgstr "Método de sensado"
1108
+
1109
+ #: PelTag.php:1860
1110
+ msgid "File Source"
1111
+ msgstr "Fuente de archivo"
1112
+
1113
+ #: PelTag.php:1862
1114
+ msgid "Scene Type"
1115
+ msgstr "Tipo de escena"
1116
+
1117
+ #: PelTag.php:1864
1118
+ msgid "Subject Area"
1119
+ msgstr "Área del sujeto"
1120
+
1121
+ #: PelTag.php:1866
1122
+ msgid "Custom Rendered"
1123
+ msgstr "Render personalizado"
1124
+
1125
+ #: PelTag.php:1868
1126
+ msgid "Exposure Mode"
1127
+ msgstr "Modo de exposición"
1128
+
1129
+ #: PelTag.php:1870
1130
+ msgid "White Balance"
1131
+ msgstr "Balance de blanco"
1132
+
1133
+ #: PelTag.php:1872
1134
+ msgid "Digital Zoom Ratio"
1135
+ msgstr "Relación de zoom digital"
1136
+
1137
+ #: PelTag.php:1874
1138
+ msgid "Focal Length In 35mm Film"
1139
+ msgstr "Distancia focal en película de 35mm"
1140
+
1141
+ #: PelTag.php:1876
1142
+ msgid "Scene Capture Type"
1143
+ msgstr "Tipo de captura de escena"
1144
+
1145
+ #: PelTag.php:1878
1146
+ msgid "Gain Control"
1147
+ msgstr "Control de ganancia"
1148
+
1149
+ #: PelTag.php:1880
1150
+ msgid "Contrast"
1151
+ msgstr "Contraste"
1152
+
1153
+ #: PelTag.php:1882
1154
+ msgid "Saturation"
1155
+ msgstr "Saturación"
1156
+
1157
+ #: PelTag.php:1884
1158
+ msgid "Sharpness"
1159
+ msgstr "Nitidez"
1160
+
1161
+ #: PelTag.php:1886
1162
+ msgid "Device Setting Description"
1163
+ msgstr "Descripción de ajuste del dispositivo"
1164
+
1165
+ #: PelTag.php:1888
1166
+ msgid "Subject Distance Range"
1167
+ msgstr "Rango de distancia al sujeto."
1168
+
1169
+ #: PelTag.php:1890
1170
+ msgid "Image Unique ID"
1171
+ msgstr "ID único de imagen"
1172
+
1173
+ #: PelTag.php:1892
1174
+ msgid "Gamma"
1175
+ msgstr ""
1176
+
1177
+ #: PelTag.php:1894
1178
+ msgid "Print IM"
1179
+ msgstr ""
1180
+
1181
+ #: PelTag.php:1964
1182
+ #, php-format
1183
+ msgid "Unknown Tag: 0x%04X"
1184
+ msgstr ""
1185
+
1186
+ #: PelTiff.php:255
1187
+ #, php-format
1188
+ msgid "Dumping TIFF data...\n"
1189
+ msgstr ""
1190
+
1191
+ #~ msgid ""
1192
+ #~ "Indicates the identification of the Interoperability rule. Use \"R98\" "
1193
+ #~ "for stating ExifR98 Rules. Four bytes used including the termination code "
1194
+ #~ "(NULL). See the separate volume of Recommended Exif Interoperability "
1195
+ #~ "Rules (ExifR98) for other tags used for ExifR98."
1196
+ #~ msgstr ""
1197
+ #~ "Indica la identificación de la regla de inter-operatibilidad. Utilice "
1198
+ #~ "\"R98\" para indicar reglas ExifR98. Se utilizan cuatro bytes incluyendo "
1199
+ #~ "el código de terminación (NULL). Vea el volumen separado de Recommended "
1200
+ #~ "Exif Interoperatibility Rules (ExifR98) para otras etiquetas usadas en "
1201
+ #~ "ExifR98."
1202
+
1203
+ #~ msgid ""
1204
+ #~ "The number of columns of image data, equal to the number of pixels per "
1205
+ #~ "row. In JPEG compressed data a JPEG marker is used instead of this tag."
1206
+ #~ msgstr ""
1207
+ #~ "La cantidad de columnas de los datos de la imagen, igual a la cantidad de "
1208
+ #~ "pixels por fila. En datos comprimidos JPEG se utiliza un marcador JPEG en "
1209
+ #~ "vez de esta etiqueta."
1210
+
1211
+ #~ msgid ""
1212
+ #~ "The number of rows of image data. In JPEG compressed data a JPEG marker "
1213
+ #~ "is used instead of this tag."
1214
+ #~ msgstr ""
1215
+ #~ "La cantidad de filas de datos de la imagen. En datos comprimidos JPEG se "
1216
+ #~ "utiliza un marcador JPEG en vez de esta etiqueta."
1217
+
1218
+ #~ msgid ""
1219
+ #~ "The number of bits per image component. In this standard each component "
1220
+ #~ "of the image is 8 bits, so the value for this tag is 8. See also "
1221
+ #~ "<SamplesPerPixel>. In JPEG compressed data a JPEG marker is used instead "
1222
+ #~ "of this tag."
1223
+ #~ msgstr ""
1224
+ #~ "La cantidad de bits por componente de imagen. En este estándar cada "
1225
+ #~ "componente de imagen es 8 bits, por lo que el valor de esta etiqueta es "
1226
+ #~ "8. Vea también <SamplesPerPixel>. En datos comprimidos JPEG se utliza un "
1227
+ #~ "marcador JPEG en vez de esta etiqueta."
1228
+
1229
+ #~ msgid ""
1230
+ #~ "The compression scheme used for the image data. When a primary image is "
1231
+ #~ "JPEG compressed, this designation is not necessary and is omitted. When "
1232
+ #~ "thumbnails use JPEG compression, this tag value is set to 6."
1233
+ #~ msgstr ""
1234
+ #~ "El esquema de compresión utilizado para los datos de la imagen. Cuando "
1235
+ #~ "una imagen primaria está comprimida con JPEG, esto no es necesario y se "
1236
+ #~ "omite. Cuando las diapositivas utilizan compresión JPEG, el valor de esta "
1237
+ #~ "etiqueta es 6."
1238
+
1239
+ #~ msgid ""
1240
+ #~ "The pixel composition. In JPEG compressed data a JPEG marker is used "
1241
+ #~ "instead of this tag."
1242
+ #~ msgstr ""
1243
+ #~ "La composición del pixel. En datos comprimidos JPEG se utliza un marcador "
1244
+ #~ "JPEG en vez de esta etiqueta."
1245
+
1246
+ #~ msgid ""
1247
+ #~ "A character string giving the title of the image. It may be a comment "
1248
+ #~ "such as \"1988 company picnic\" or the like. Two-bytes character codes "
1249
+ #~ "cannot be used. When a 2-bytes code is necessary, the Exif Private tag "
1250
+ #~ "<UserComment> is to be used."
1251
+ #~ msgstr ""
1252
+ #~ "Una cadena de caracteres que da título a la imagen. Puede ser un "
1253
+ #~ "comentario como \"picnic de 1988\" o algo por el estilo. No se pueden "
1254
+ #~ "utilizar caracteres codificados con 2 bytes. Cuando se necesita un código "
1255
+ #~ "de 2 bytes, se debe usar la etiqueta privada Exif <UserComment>."
1256
+
1257
+ #~ msgid ""
1258
+ #~ "The manufacturer of the recording equipment. This is the manufacturer of "
1259
+ #~ "the DSC, scanner, video digitizer or other equipment that generated the "
1260
+ #~ "image. When the field is left blank, it is treated as unknown."
1261
+ #~ msgstr ""
1262
+ #~ "El fabricante del equipo. Este es el fabricante del DSC, escáner, "
1263
+ #~ "digitalizador de vídeo u otro equipo que generó la imagen. Cuando el "
1264
+ #~ "campo se deja en blanco, se trata como desconocido."
1265
+
1266
+ #~ msgid ""
1267
+ #~ "The model name or model number of the equipment. This is the model name "
1268
+ #~ "or number of the DSC, scanner, video digitizer or other equipment that "
1269
+ #~ "generated the image. When the field is left blank, it is treated as "
1270
+ #~ "unknown."
1271
+ #~ msgstr ""
1272
+ #~ "El nombre o número de modelo del equipo. Este es el nombre del modelo o "
1273
+ #~ "número del DSC, escáner, digitalizador de vídeo u otro equipo que generó "
1274
+ #~ "la imagen. Cuando el campo se deja en blanco, se trata como desconocido."
1275
+
1276
+ #~ msgid ""
1277
+ #~ "For each strip, the byte offset of that strip. It is recommended that "
1278
+ #~ "this be selected so the number of strip bytes does not exceed 64 Kbytes. "
1279
+ #~ "With JPEG compressed data this designation is not needed and is omitted. "
1280
+ #~ "See also <RowsPerStrip> and <StripByteCounts>."
1281
+ #~ msgstr ""
1282
+ #~ "El desplazamiento en bytes de cada tira. Se recomienda que se seleccione "
1283
+ #~ "de manera tal que la cantidad de bytes de la tira no exceda 64 Kbytes. "
1284
+ #~ "Con datos comprimidos JPEG esto no es necesario y se omite. Vea también "
1285
+ #~ "<RowsPerStrip> y <StripByteCounts>."
1286
+
1287
+ #~ msgid "The image orientation viewed in terms of rows and columns."
1288
+ #~ msgstr "La orientación de la imagen vista en términos de filas y columnas."
1289
+
1290
+ #~ msgid ""
1291
+ #~ "The number of components per pixel. Since this standard applies to RGB "
1292
+ #~ "and YCbCr images, the value set for this tag is 3. In JPEG compressed "
1293
+ #~ "data a JPEG marker is used instead of this tag."
1294
+ #~ msgstr ""
1295
+ #~ "La cantidad de componentes por pixel. Debido a que este estándar se "
1296
+ #~ "aplica a imágenes RGB e YCbCr, el valor para esta etiqueta es 3. En datos "
1297
+ #~ "comprimidos JPEG se utliza un marcador JPEG en vez de esta etiqueta."
1298
+
1299
+ #~ msgid ""
1300
+ #~ "The number of rows per strip. This is the number of rows in the image of "
1301
+ #~ "one strip when an image is divided into strips. With JPEG compressed data "
1302
+ #~ "this designation is not needed and is omitted. See also <StripOffsets> "
1303
+ #~ "and <StripByteCounts>."
1304
+ #~ msgstr ""
1305
+ #~ "La cantidad de filas por tira. Esta es la cantidad de filas en la imagen "
1306
+ #~ "de una tira cuando se divide a la imagen en tiras. En datos comprimidos "
1307
+ #~ "JPEG esto no es necesario y se omite. Vea también <StripOffsets> y "
1308
+ #~ "<StripByteCounts>."
1309
+
1310
+ #~ msgid ""
1311
+ #~ "The total number of bytes in each strip. With JPEG compressed data this "
1312
+ #~ "designation is not needed and is omitted."
1313
+ #~ msgstr ""
1314
+ #~ "La cantidad total de bytes en cada tira. En datos comprimidos JPEG esto "
1315
+ #~ "no es necesario y se omite."
1316
+
1317
+ #~ msgid ""
1318
+ #~ "The number of pixels per <ResolutionUnit> in the <ImageWidth> direction. "
1319
+ #~ "When the image resolution is unknown, 72 [dpi] is designated."
1320
+ #~ msgstr ""
1321
+ #~ "La cantidad de pixels por <ResolutionUnit> en la dirección <ImageWidth>. "
1322
+ #~ "Cuando se desconoce la resolución de una imagen, se utilizan 72 [dpi]."
1323
+
1324
+ #~ msgid ""
1325
+ #~ "The number of pixels per <ResolutionUnit> in the <ImageLength> direction. "
1326
+ #~ "The same value as <XResolution> is designated."
1327
+ #~ msgstr ""
1328
+ #~ "La cantidad de pixels por <ResolutionUnit> en la dirección <ImageLength>. "
1329
+ #~ "Se utiliza el mismo valor que <XResolution>."
1330
+
1331
+ #~ msgid ""
1332
+ #~ "Indicates whether pixel components are recorded in a chunky or planar "
1333
+ #~ "format. In JPEG compressed files a JPEG marker is used instead of this "
1334
+ #~ "tag. If this field does not exist, the TIFF default of 1 (chunky) is "
1335
+ #~ "assumed."
1336
+ #~ msgstr ""
1337
+ #~ "Indica si los componentes de pixel se graban en formato planar o por "
1338
+ #~ "trozos. En datos comprimidos JPEG se utliza un marcador JPEG en vez de "
1339
+ #~ "esta etiqueta. Si este campo no existe, se asume el predeterminado de "
1340
+ #~ "TIFF, 1 (por trozos)."
1341
+
1342
+ #~ msgid ""
1343
+ #~ "The unit for measuring <XResolution> and <YResolution>. The same unit is "
1344
+ #~ "used for both <XResolution> and <YResolution>. If the image resolution is "
1345
+ #~ "unknown, 2 (inches) is designated."
1346
+ #~ msgstr ""
1347
+ #~ "La unidad para medir <XResolution> e <YResolution>. Se utiliza la misma "
1348
+ #~ "unidad para ambas. Si la resolución de la imagen se desconoce, se designa "
1349
+ #~ "2 (pulgadas)."
1350
+
1351
+ #~ msgid ""
1352
+ #~ "A transfer function for the image, described in tabular style. Normally "
1353
+ #~ "this tag is not necessary, since color space is specified in the color "
1354
+ #~ "space information tag (<ColorSpace>)."
1355
+ #~ msgstr ""
1356
+ #~ "Una función de transferencia para la imagen, descripta en forma tabular. "
1357
+ #~ "Normalmente esta etiqueta no es necesaria, dado que el espacio de color "
1358
+ #~ "se especifica en la etiqueta de información de espacio de color "
1359
+ #~ "(<ColorSpace>)."
1360
+
1361
+ #~ msgid ""
1362
+ #~ "This tag records the name and version of the software or firmware of the "
1363
+ #~ "camera or image input device used to generate the image. The detailed "
1364
+ #~ "format is not specified, but it is recommended that the example shown "
1365
+ #~ "below be followed. When the field is left blank, it is treated as unknown."
1366
+ #~ msgstr ""
1367
+ #~ "Esta etiqueta registra el nombre y la versión del software o firmware de "
1368
+ #~ "la cámara o dispositivo de entrada de imagen utilizado para generar la "
1369
+ #~ "imágen. No se especifica el formato detallado, pero se recomienda que se "
1370
+ #~ "siga el ejemplo mostrado debajo. Cuando el campo se deja en blanco, se "
1371
+ #~ "trata como desconocido."
1372
+
1373
+ #~ msgid ""
1374
+ #~ "The date and time of image creation. In this standard (Exif-2.1) it is "
1375
+ #~ "the date and time the file was changed."
1376
+ #~ msgstr ""
1377
+ #~ "La fecha y hora de la creación de la imagen. En este estándar (Exif-2.1) "
1378
+ #~ "es la fecha y hora en la que cambió el archivo."
1379
+
1380
+ #~ msgid ""
1381
+ #~ "This tag records the name of the camera owner, photographer or image "
1382
+ #~ "creator. The detailed format is not specified, but it is recommended that "
1383
+ #~ "the information be written as in the example below for ease of "
1384
+ #~ "Interoperability. When the field is left blank, it is treated as unknown."
1385
+ #~ msgstr ""
1386
+ #~ "Esta etiqueta registra el nombre del dueño de la cámara, fotógrafo o "
1387
+ #~ "creador de la imagen. No se especifica el formato detallado, pero se "
1388
+ #~ "recomienda que se escriba la información en como en el ejemplo de abajo "
1389
+ #~ "para facilitar la inter-operabilidad. Cuando el campo se deja en blanco, "
1390
+ #~ "se trata como desconocido."
1391
+
1392
+ #~ msgid ""
1393
+ #~ "The chromaticity of the white point of the image. Normally this tag is "
1394
+ #~ "not necessary, since color space is specified in the colorspace "
1395
+ #~ "information tag (<ColorSpace>)."
1396
+ #~ msgstr ""
1397
+ #~ "La cromaticidad del punto blanco de la imagen. Normalmente esta etiqueta "
1398
+ #~ "no es necesaria ya que el espacio de color se especifica en la etiqueta "
1399
+ #~ "de información del espacio de color (<ColorSpace>)."
1400
+
1401
+ #~ msgid ""
1402
+ #~ "The chromaticity of the three primary colors of the image. Normally this "
1403
+ #~ "tag is not necessary, since colorspace is specified in the colorspace "
1404
+ #~ "information tag (<ColorSpace>)."
1405
+ #~ msgstr ""
1406
+ #~ "La cromaticidad de los tres colores primarios de la imagen. Normalmente "
1407
+ #~ "esta etiqueta no es necesaria ya que el espacio de color se especifica en "
1408
+ #~ "la etiqueta de información del espacio de color (<ColorSpace>)."
1409
+
1410
+ #~ msgid ""
1411
+ #~ "The offset to the start byte (SOI) of JPEG compressed thumbnail data. "
1412
+ #~ "This is not used for primary image JPEG data."
1413
+ #~ msgstr ""
1414
+ #~ "El desplazamiento del byte de comienzo (SOI) de los datos comprimidos de "
1415
+ #~ "la diapositiva JPEG. Esto no se utiliza para los datos primarios de "
1416
+ #~ "imagen JPEG."
1417
+
1418
+ #~ msgid ""
1419
+ #~ "The number of bytes of JPEG compressed thumbnail data. This is not used "
1420
+ #~ "for primary image JPEG data. JPEG thumbnails are not divided but are "
1421
+ #~ "recorded as a continuous JPEG bitstream from SOI to EOI. Appn and COM "
1422
+ #~ "markers should not be recorded. Compressed thumbnails must be recorded in "
1423
+ #~ "no more than 64 Kbytes, including all other data to be recorded in APP1."
1424
+ #~ msgstr ""
1425
+ #~ "La cantidad de bytes de datos comprimidos de diapositiva JPEG. Esto no se "
1426
+ #~ "utiliza para los datos primarios JPEG. Las diapositivas JPEG no se "
1427
+ #~ "dividen sino que se graban como un flujo de bits contínuo desde SOI hasta "
1428
+ #~ "EOI. No se deberían registrar marcadores Appn y COM. Las diapositivas "
1429
+ #~ "comprimidas deberían grabarse en no más de 64 Kbytes, incluyendo todos "
1430
+ #~ "los otros datos a grabar en APP1."
1431
+
1432
+ #~ msgid ""
1433
+ #~ "The matrix coefficients for transformation from RGB to YCbCr image data. "
1434
+ #~ "No default is given in TIFF; but here the value given in Appendix E, "
1435
+ #~ "\"Color Space Guidelines\", is used as the default. The color space is "
1436
+ #~ "declared in a color space information tag, with the default being the "
1437
+ #~ "value that gives the optimal image characteristics Interoperability this "
1438
+ #~ "condition."
1439
+ #~ msgstr ""
1440
+ #~ "Los coeficientes de la matriz para la transformación de RGB a datos de "
1441
+ #~ "imagen YCbCr. No hay predeterminados en TIFF; pero aquí se utiliza el "
1442
+ #~ "valor dado en el Apéndice E, \"Color Space Guidelines\" como "
1443
+ #~ "predeterminado. El espacio de color se declara en una etiqueta de "
1444
+ #~ "información del espacio de color, siendo el predeterminado el que da las "
1445
+ #~ "características óptimas de inter-operabilidad para la imagen."
1446
+
1447
+ #~ msgid ""
1448
+ #~ "The sampling ratio of chrominance components in relation to the luminance "
1449
+ #~ "component. In JPEG compressed data a JPEG marker is used instead of this "
1450
+ #~ "tag."
1451
+ #~ msgstr ""
1452
+ #~ "La relación de muestreo de los componentes de crominancia en relación con "
1453
+ #~ "el componente de luminancia. En datos comprimidos JPEG se utliza un "
1454
+ #~ "marcador JPEG en vez de esta etiqueta."
1455
+
1456
+ #~ msgid ""
1457
+ #~ "The position of chrominance components in relation to the luminance "
1458
+ #~ "component. This field is designated only for JPEG compressed data or "
1459
+ #~ "uncompressed YCbCr data. The TIFF default is 1 (centered); but when Y:Cb:"
1460
+ #~ "Cr = 4:2:2 it is recommended in this standard that 2 (co-sited) be used "
1461
+ #~ "to record data, in order to improve the image quality when viewed on TV "
1462
+ #~ "systems. When this field does not exist, the reader shall assume the TIFF "
1463
+ #~ "default. In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is "
1464
+ #~ "recommended. If the reader does not have the capability of supporting "
1465
+ #~ "both kinds of <YCbCrPositioning>, it shall follow the TIFF default "
1466
+ #~ "regardless of the value in this field. It is preferable that readers be "
1467
+ #~ "able to support both centered and co-sited positioning."
1468
+ #~ msgstr ""
1469
+ #~ "La posición de los componentes de crominancia en relación con el de "
1470
+ #~ "luminancia. Este campo se designa sólo para datos comprimidos JPEG o "
1471
+ #~ "datos no comprimidos YCbCr. El valor predeterminado TIFF es 1 (centrado); "
1472
+ #~ "pero cuando Y:Cb:Cr = 4:2:2 se recomienda en este estándar que se utilice "
1473
+ #~ "2 (co-sitiado) para registrar los datos, para mejorar la calidad de la "
1474
+ #~ "imagen cuando se ve en sistemas de TV. Cuando este campo no existe, el "
1475
+ #~ "lector deberá asumir el predeterminado TIFF. En caso que Y:Cb:Cr = 4:2:0, "
1476
+ #~ "se recomienda el predeterminado TIFF (centrado). Si el lector no tiene la "
1477
+ #~ "capacidad de soportar ambos tipos de <YCbCrPositioning>, debería seguir "
1478
+ #~ "el predeterminado TIFF sin importar el valor de este campo. Es preferible "
1479
+ #~ "que los lectores puedan soportar el posicionamiento centrado y co-sitiado."
1480
+
1481
+ #~ msgid ""
1482
+ #~ "The reference black point value and reference white point value. No "
1483
+ #~ "defaults are given in TIFF, but the values below are given as defaults "
1484
+ #~ "here. The color space is declared in a color space information tag, with "
1485
+ #~ "the default being the value that gives the optimal image characteristics "
1486
+ #~ "Interoperability these conditions."
1487
+ #~ msgstr ""
1488
+ #~ "El valor de referencia de los puntos blanco y negro. En TIFF no se dan "
1489
+ #~ "predeterminados, pero los valores de abajo se dan como predeterminados "
1490
+ #~ "aquí. El espacio de color se declara en una etiqueta de información de "
1491
+ #~ "espacio de color, siendo el valor predeterminado aquel que da las "
1492
+ #~ "características de inter-operabilidad óptimas para la imagen."
1493
+
1494
+ #~ msgid ""
1495
+ #~ "Indicates the color filter array (CFA) geometric pattern of the image "
1496
+ #~ "sensor when a one-chip color area sensor is used. It does not apply to "
1497
+ #~ "all sensing methods."
1498
+ #~ msgstr ""
1499
+ #~ "Indica el patrón geométrico de la matriz de filtro de color (CFA) del "
1500
+ #~ "sensor de imagen cuando se utiliza un sensor de área color de un chip. No "
1501
+ #~ "aplica a todos los métodos de sensado."
1502
+
1503
+ #~ msgid ""
1504
+ #~ "Copyright information. In this standard the tag is used to indicate both "
1505
+ #~ "the photographer and editor copyrights. It is the copyright notice of the "
1506
+ #~ "person or organization claiming rights to the image. The Interoperability "
1507
+ #~ "copyright statement including date and rights should be written in this "
1508
+ #~ "field; e.g., \"Copyright, John Smith, 19xx. All rights reserved.\". In "
1509
+ #~ "this standard the field records both the photographer and editor "
1510
+ #~ "copyrights, with each recorded in a separate part of the statement. When "
1511
+ #~ "there is a clear distinction between the photographer and editor "
1512
+ #~ "copyrights, these are to be written in the order of photographer followed "
1513
+ #~ "by editor copyright, separated by NULL (in this case, since the statement "
1514
+ #~ "also ends with a NULL, there are two NULL codes) (see example 1). When "
1515
+ #~ "only the photographer is given, it is terminated by one NULL code (see "
1516
+ #~ "example 2). When only the editor copyright is given, the photographer "
1517
+ #~ "copyright part consists of one space followed by a terminating NULL code, "
1518
+ #~ "then the editor copyright is given (see example 3). When the field is "
1519
+ #~ "left blank, it is treated as unknown."
1520
+ #~ msgstr ""
1521
+ #~ "Información del Copyright. En este estándar la etiqueta se utiliza para "
1522
+ #~ "indicar tanto el copyright del fotógrafo como el del editor. Es la nota "
1523
+ #~ "de copyright de la persona u Organización que reclama derechos sobre la "
1524
+ #~ "imagen. En este campo debería escribirse la declaración de copyrtight de "
1525
+ #~ "inter-operabilidad, incluyendo la fecha y los derechos; ej: \"Copyright, "
1526
+ #~ "Juan Perez, 20xx. Todos los derechos reservados.\" En este estándar el "
1527
+ #~ "campo registra tanto al copyright del fotógrafo como el del editor, con "
1528
+ #~ "cada uno registrado en una parte separada de la declaración. Cuando hay "
1529
+ #~ "una distinción clara entre ambos copyrights, primero debería escribirse "
1530
+ #~ "el del fotógrafo seguido por el del editor, separados por NULL (en este "
1531
+ #~ "caso, debido a que la declaración también termina con un NULL, hay dos "
1532
+ #~ "códigos NULL) (vea el ejemplo 1). Cuando se da sólo el del fotógrafo, "
1533
+ #~ "está terminado por un código NULL (vea el ejemplo 2). Cuando se da sólo "
1534
+ #~ "el del editor, la parte del copyright del fotógrafo consiste de un "
1535
+ #~ "espacio seguido de un código de terminación NULL, luego se da el "
1536
+ #~ "copyright del editor (vea el ejemplo 3). Cuando el campo se deja en "
1537
+ #~ "blanco, se trata como desconocido."
1538
+
1539
+ #~ msgid "Exposure time, given in seconds (sec)."
1540
+ #~ msgstr "Tiempo de exposición, dado en segundos (seg)."
1541
+
1542
+ #~ msgid "The F number."
1543
+ #~ msgstr "El número F."
1544
+
1545
+ #~ msgid ""
1546
+ #~ "A pointer to the Exif IFD. Interoperability, Exif IFD has the same "
1547
+ #~ "structure as that of the IFD specified in TIFF. ordinarily, however, it "
1548
+ #~ "does not contain image data as in the case of TIFF."
1549
+ #~ msgstr ""
1550
+ #~ "Un puntero al IFD Exif. Inter-operabilidad, el IFD Exif tiene la misma "
1551
+ #~ "estructura que la del IFD especificado en TIFF. Sin embargo, por lo "
1552
+ #~ "común, no contiene datos de imagen como en el caso de TIFF."
1553
+
1554
+ #~ msgid ""
1555
+ #~ "The class of the program used by the camera to set exposure when the "
1556
+ #~ "picture is taken."
1557
+ #~ msgstr ""
1558
+ #~ "La clase de programa utilizado por la cámara para ajustar la exposición "
1559
+ #~ "cuando se toma la foto."
1560
+
1561
+ #~ msgid ""
1562
+ #~ "Indicates the spectral sensitivity of each channel of the camera used. "
1563
+ #~ "The tag value is an ASCII string compatible with the standard developed "
1564
+ #~ "by the ASTM Technical Committee."
1565
+ #~ msgstr ""
1566
+ #~ "Indica la sensibilidad espectral de cada canal de la cámara utilizada. El "
1567
+ #~ "valor de la etiqueta es una cadena de caracteres ASCII compatible con el "
1568
+ #~ "estándar desarrollado por el ASTM Tecnical Committee."
1569
+
1570
+ #~ msgid ""
1571
+ #~ "A pointer to the GPS Info IFD. The Interoperability structure of the GPS "
1572
+ #~ "Info IFD, like that of Exif IFD, has no image data."
1573
+ #~ msgstr ""
1574
+ #~ "Un puntero al GPS Info IFD. La estructura de inter-operabilidad del GPS "
1575
+ #~ "Info IFD, como la del IFD Exif, no tiene datos de imagen."
1576
+
1577
+ #~ msgid ""
1578
+ #~ "Indicates the ISO Speed and ISO Latitude of the camera or input device as "
1579
+ #~ "specified in ISO 12232."
1580
+ #~ msgstr ""
1581
+ #~ "Indica la velocidad ISO y la latitud ISO de la cámara o dispositivo de "
1582
+ #~ "entrada como se especifica en ISO 12232."
1583
+
1584
+ #~ msgid ""
1585
+ #~ "Indicates the Opto-Electoric Conversion Function (OECF) specified in ISO "
1586
+ #~ "14524. <OECF> is the relationship between the camera optical input and "
1587
+ #~ "the image values."
1588
+ #~ msgstr ""
1589
+ #~ "Indica la Función de Conversión Opto-Electrónica (OECF) especificada en "
1590
+ #~ "ISO 14524. <OECF> es la relación entre la entrada óptica de la cámara y "
1591
+ #~ "los valores de la imagen."
1592
+
1593
+ #~ msgid ""
1594
+ #~ "The version of this standard supported. Nonexistence of this field is "
1595
+ #~ "taken to mean non-conformance to the standard."
1596
+ #~ msgstr ""
1597
+ #~ "La versión soportada de este estándar. Si este campo no existe se toma "
1598
+ #~ "como que significa que no se cumple con el estándar."
1599
+
1600
+ #~ msgid ""
1601
+ #~ "The date and time when the original image data was generated. For a "
1602
+ #~ "digital still camera the date and time the picture was taken are recorded."
1603
+ #~ msgstr ""
1604
+ #~ "La fecha y hora cuando se generaron los datos originales de la imagen. "
1605
+ #~ "Para una cámara digital se registra la fecha y la hora en la que se tomó "
1606
+ #~ "la foto."
1607
+
1608
+ #~ msgid "The date and time when the image was stored as digital data. "
1609
+ #~ msgstr ""
1610
+ #~ "La fehca y hora cuando se almacenó la imagen en forma de datos digitales."
1611
+
1612
+ #~ msgid ""
1613
+ #~ "Information specific to compressed data. The channels of each component "
1614
+ #~ "are arranged in order from the 1st component to the 4th. For uncompressed "
1615
+ #~ "data the data arrangement is given in the <PhotometricInterpretation> "
1616
+ #~ "tag. However, since <PhotometricInterpretation> can only express the "
1617
+ #~ "order of Y, Cb and Cr, this tag is provided for cases when compressed "
1618
+ #~ "data uses components other than Y, Cb, and Cr and to enable support of "
1619
+ #~ "other sequences."
1620
+ #~ msgstr ""
1621
+ #~ "Información específica de los datos comprimidos. Los canales de cada "
1622
+ #~ "componente se arreglan en orden desde el 1er componente al 4to. Para "
1623
+ #~ "datos no comprimidos el arreglo de los datos se da en la etiqueta "
1624
+ #~ "<PhometricInterpretation>. Sin embargo, debido a que dicha etiqueta sólo "
1625
+ #~ "puede expresar el orden de Y, Cb y Cr, esta etiqueta se da para los casos "
1626
+ #~ "en los que los datos comprimidos usan componentes que no son Y, Cb y Cr y "
1627
+ #~ "para permitir el soporte de otras secuencias."
1628
+
1629
+ #~ msgid ""
1630
+ #~ "Information specific to compressed data. The compression mode used for a "
1631
+ #~ "compressed image is indicated in unit bits per pixel."
1632
+ #~ msgstr ""
1633
+ #~ "Información específica sobre los datos comprimidos. El modo de compresión "
1634
+ #~ "utilizado para una imagen comprimida está indicado en unidades de bits "
1635
+ #~ "por pixel."
1636
+
1637
+ #~ msgid ""
1638
+ #~ "Shutter speed. The unit is the APEX (Additive System of Photographic "
1639
+ #~ "Exposure) setting (see Appendix C)."
1640
+ #~ msgstr ""
1641
+ #~ "Velocidad del obturador. La unidad es el ajuste APEX (Sistema aditivo de "
1642
+ #~ "exposición fotográfica) (vea el Apéndice C)."
1643
+
1644
+ #~ msgid "The lens aperture. The unit is the APEX value."
1645
+ #~ msgstr "La apertura de la lente. La unidad es el valor APEX."
1646
+
1647
+ #~ msgid ""
1648
+ #~ "The value of brightness. The unit is the APEX value. Ordinarily it is "
1649
+ #~ "given in the range of -99.99 to 99.99."
1650
+ #~ msgstr ""
1651
+ #~ "El valor del brillo. La unidad es el valor APEX. Por lo general, se da en "
1652
+ #~ "el rango de -99,99 a 99,99."
1653
+
1654
+ #~ msgid ""
1655
+ #~ "The exposure bias. The units is the APEX value. Ordinarily it is given in "
1656
+ #~ "the range of -99.99 to 99.99."
1657
+ #~ msgstr ""
1658
+ #~ "El ajuste de exposición. La unidad es el valor APEX. Por lo general, se "
1659
+ #~ "da en el rango -99,99 a 99,99."
1660
+
1661
+ #~ msgid ""
1662
+ #~ "The smallest F number of the lens. The unit is the APEX value. Ordinarily "
1663
+ #~ "it is given in the range of 00.00 to 99.99, but it is not limited to this "
1664
+ #~ "range."
1665
+ #~ msgstr ""
1666
+ #~ "El valor F más pequeño de la lente. La unidad es el valor APEX. Por lo "
1667
+ #~ "general, se da en el rango de 00,00 a 99,99 pero no está limitado a dicho "
1668
+ #~ "rango."
1669
+
1670
+ #~ msgid "The distance to the subject, given in meters."
1671
+ #~ msgstr "La distancia al sujeto, dada en metros."
1672
+
1673
+ #~ msgid "The metering mode."
1674
+ #~ msgstr "El modo de la métrica."
1675
+
1676
+ #~ msgid "The kind of light source."
1677
+ #~ msgstr "El tipo de fuente de luz."
1678
+
1679
+ #~ msgid ""
1680
+ #~ "This tag is recorded when an image is taken using a strobe light (flash)."
1681
+ #~ msgstr ""
1682
+ #~ "Esta etiqueta se registra cuando se toma una imagen usando una luz "
1683
+ #~ "estrosboscópica (flash)."
1684
+
1685
+ #~ msgid ""
1686
+ #~ "The actual focal length of the lens, in mm. Conversion is not made to the "
1687
+ #~ "focal length of a 35 mm film camera."
1688
+ #~ msgstr ""
1689
+ #~ "La distancia focal real de la lente, en mm. No se realiza la conversión a "
1690
+ #~ "la distancia focal de una máquina de película de 35 mm."
1691
+
1692
+ #~ msgid ""
1693
+ #~ "A tag for manufacturers of Exif writers to record any desired "
1694
+ #~ "information. The contents are up to the manufacturer."
1695
+ #~ msgstr ""
1696
+ #~ "Una etiqueta para que los fabricantes o escritores Exif registren "
1697
+ #~ "cualquier información deseada. El contenido queda a cargo del fabricante."
1698
+
1699
+ #, fuzzy
1700
+ #~ msgid ""
1701
+ #~ "A tag for Exif users to write keywords or comments on the image besides "
1702
+ #~ "those in <ImageDescription>, and without the character code limitations "
1703
+ #~ "of the <ImageDescription> tag. The character code used in the "
1704
+ #~ "<UserComment> tag is identified based on an ID code in a fixed 8-byte "
1705
+ #~ "area at the start of the tag data area. The unused portion of the area is "
1706
+ #~ "padded with NULL (\"00.h\"). ID codes are assigned by means of "
1707
+ #~ "registration. The designation method and references for each character "
1708
+ #~ "code are given in Table 6. The value of CountN is determined based on the "
1709
+ #~ "8 bytes in the character code area and the number of bytes in the user "
1710
+ #~ "comment part. Since the TYPE is not ASCII, NULL termination is not "
1711
+ #~ "necessary (see Fig. 9). The ID code for the <UserComment> area may be a "
1712
+ #~ "Defined code such as JIS or ASCII, or may be Undefined. The Undefined "
1713
+ #~ "name is UndefinedText, and the ID code is filled with 8 bytes of all "
1714
+ #~ "\"NULL\" (\"00.H\"). An Exif reader that reads the <UserComment> tag must "
1715
+ #~ "have a function for determining the ID code. This function is not "
1716
+ #~ "required in Exif readers that do not use the <UserComment> tag (see Table "
1717
+ #~ "7). When a <UserComment> area is set aside, it is recommended that the ID "
1718
+ #~ "code be ASCII and that the following user comment part be filled with "
1719
+ #~ "blank characters [20.H]."
1720
+ #~ msgstr ""
1721
+ #~ "Una etiqueta para que los usuarios de Exif escriban palabras clave o "
1722
+ #~ "comentarios en la imagen además de los de <ImageDescription>, y sin "
1723
+ #~ "limitaciones en la codificación de caracteres de dicha etiqueta. El "
1724
+ #~ "código de caracteres utilizado en esta etiqueta se identifica basándose "
1725
+ #~ "en un código ID en un área fija de 8 bytes al comienzo del área de datos "
1726
+ #~ "de la etiqueta. La porción no utilizada del área se completa con NULL "
1727
+ #~ "(\"00.h\"). Los códigos ID se asignan por medio de registro. En la tabla "
1728
+ #~ "6 se dan el método de designación y referencias para cada código de "
1729
+ #~ "caracter. El valor de CountN está determinado basado en los 8 bytes en el "
1730
+ #~ "área de código de caracter y la cantidad de bytes en la parte del "
1731
+ #~ "comentario del usuario. Dado que TYPE no es ASCII, no es necesaria la "
1732
+ #~ "terminación NULL (ver fig. 9). El código ID para el área <UserComment> "
1733
+ #~ "puede ser un código definido como JIS o ASCII, o puede ser no definido. "
1734
+ #~ "El nombre no definido es UndefinedText, y el código ID se completa con 8 "
1735
+ #~ "bytes de todos \"NULL\" (\"00.H\"). Un lector Exif que lee la etiqueta "
1736
+ #~ "<UserComment> debe tener una función para determinar el código ID. Esta "
1737
+ #~ "función no se necesita en lectores Exif que no usan la etiqueta "
1738
+ #~ "<UserComment> (ver tabla 7). Cuando se deja a un lado el área "
1739
+ #~ "<UserComment>, se recomienda que el código ID sea ASCII y que se complete "
1740
+ #~ "la parte de comentario de usuario siguiente con caracteres espacio [20.H]."
1741
+
1742
+ #~ msgid "A tag used to record fractions of seconds for the <DateTime> tag."
1743
+ #~ msgstr ""
1744
+ #~ "Una etiqueta utilizada para registrar fracciones de segundo para la "
1745
+ #~ "etiqueta <DateTime>."
1746
+
1747
+ #~ msgid ""
1748
+ #~ "A tag used to record fractions of seconds for the <DateTimeOriginal> tag."
1749
+ #~ msgstr ""
1750
+ #~ "Una etiqueta utilizada para registrar fracciones de segundo para la "
1751
+ #~ "etiqueta <DateTimeOriginal>."
1752
+
1753
+ #~ msgid ""
1754
+ #~ "A tag used to record fractions of seconds for the <DateTimeDigitized> tag."
1755
+ #~ msgstr ""
1756
+ #~ "Una etiqueta utilizada para registrar fracciones de segundo para la "
1757
+ #~ "etiqueta <DateTimeDigitized>."
1758
+
1759
+ #~ msgid "The FlashPix format version supported by a FPXR file."
1760
+ #~ msgstr "La versión del formato FlashPix soportada por un archivo FPXR."
1761
+
1762
+ #, fuzzy
1763
+ #~ msgid ""
1764
+ #~ "The color space information tag is always recorded as the color space "
1765
+ #~ "specifier. Normally sRGB (=1) is used to define the color space based on "
1766
+ #~ "the PC monitor conditions and environment. If a color space other than "
1767
+ #~ "sRGB is used, Uncalibrated (=FFFF.H) is set. Image data recorded as "
1768
+ #~ "Uncalibrated can be treated as sRGB when it is converted to FlashPix. On "
1769
+ #~ "sRGB see Appendix E."
1770
+ #~ msgstr ""
1771
+ #~ "La etiqueta de información de espacio de color (<ColorSpace>) siempre se "
1772
+ #~ "registra como el especificador de espacio de color. Normalmente se "
1773
+ #~ "utiliza sRGB (=1) para definir el espacio de color basado en las "
1774
+ #~ "condiciones ambientales y del monitor de la PC. Si se utiliza un espacio "
1775
+ #~ "de color distinto a sRGB, se ajusta en Uncalibrated (=FFFF.H). Los datos "
1776
+ #~ "de imagen registrados como no calibrados pueden tratarse como sRGB cuando "
1777
+ #~ "se convierte a FlashPix. Vea el Apéndice E sobre sRGB."
1778
+
1779
+ #, fuzzy
1780
+ #~ msgid ""
1781
+ #~ "Information specific to compressed data. When a compressed file is "
1782
+ #~ "recorded, the valid width of the meaningful image must be recorded in "
1783
+ #~ "this tag, whether or not there is padding data or a restart marker. This "
1784
+ #~ "tag should not exist in an uncompressed file. For details see section "
1785
+ #~ "2.8.1 and Appendix F of the Exif 2.2 standard."
1786
+ #~ msgstr ""
1787
+ #~ "Información específica a los datos comprimidos. Cuando se registra un "
1788
+ #~ "archivo comprimido, el ancho válido de la imagen significativa se debe "
1789
+ #~ "registrar en esta etiqueta, haya o no datos de colchón o una marca de "
1790
+ #~ "reinicio. Esta etiqueta no debería existir en un archivo no comprimido. "
1791
+ #~ "Vea la sección 2.8.1 y el Apéndice F para más detalles."
1792
+
1793
+ #, fuzzy
1794
+ #~ msgid ""
1795
+ #~ "Information specific to compressed data. When a compressed file is "
1796
+ #~ "recorded, the valid height of the meaningful image must be recorded in "
1797
+ #~ "this tag, whether or not there is padding data or a restart marker. This "
1798
+ #~ "tag should not exist in an uncompressed file. For details see section "
1799
+ #~ "2.8.1 and Appendix F of the Exif 2.2 standard. Since data padding is "
1800
+ #~ "unnecessary in the vertical direction, the number of lines recorded in "
1801
+ #~ "this valid image height tag will in fact be the same as that recorded in "
1802
+ #~ "the SOF."
1803
+ #~ msgstr ""
1804
+ #~ "Información específica a los datos comprimidos. Cuando se registra un "
1805
+ #~ "archivo comprimido, la altura válida de la imagen significativa debería "
1806
+ #~ "registrarse en esta etiqueta, haya o no datos de colchón o una marca de "
1807
+ #~ "reinicio. Esta etiqueta no debería existir en un archivo no comprimido. "
1808
+ #~ "Vea la sección 2.8.1 y el Apéndice F para más detalles. Dado que no es "
1809
+ #~ "necesario el colchón de datos en la dirección vertical, la cantidad de "
1810
+ #~ "líneas registradas en esta etiqueta válida de altura de imagen será, de "
1811
+ #~ "hecho, la misma que la registrada en el SOF."
1812
+
1813
+ #, fuzzy
1814
+ #~ msgid ""
1815
+ #~ "This tag is used to record the name of an audio file related to the image "
1816
+ #~ "data. The only relational information recorded here is the Exif audio "
1817
+ #~ "file name and extension (an ASCII string consisting of 8 characters + '.' "
1818
+ #~ "+ 3 characters). The path is not recorded. Stipulations on audio are "
1819
+ #~ "given in section 3.6.3 of the Exif 2.2 standard. File naming conventions "
1820
+ #~ "are given in section 3.7.1. When using this tag, audio files must be "
1821
+ #~ "recorded in conformance to the Exif audio format. Writers are also "
1822
+ #~ "allowed to store the data such as Audio within APP2 as FlashPix extension "
1823
+ #~ "stream data. Audio files must be recorded in conformance to the Exif "
1824
+ #~ "audio format. The mapping of Exif image files and audio files is done in "
1825
+ #~ "any of the three ways shown in Table 8. If multiple files are mapped to "
1826
+ #~ "one file as in [2] or [3] of this table, the above format is used to "
1827
+ #~ "record just one audio file name. If there are multiple audio files, the "
1828
+ #~ "first recorded file is given. In the case of [3] in Table 8, for example, "
1829
+ #~ "for the Exif image file \"DSC00001.JPG\" only \"SND00001.WAV\" is given "
1830
+ #~ "as the related Exif audio file. When there are three Exif audio files "
1831
+ #~ "\"SND00001.WAV\", \"SND00002.WAV\" and \"SND00003.WAV\", the Exif image "
1832
+ #~ "file name for each of them, \"DSC00001.JPG\", is indicated. By combining "
1833
+ #~ "multiple relational information, a variety of playback possibilities can "
1834
+ #~ "be supported. The method of using relational information is left to the "
1835
+ #~ "implementation on the playback side. Since this information is an ASCII "
1836
+ #~ "character string, it is terminated by NULL. When this tag is used to map "
1837
+ #~ "audio files, the relation of the audio file to image data must also be "
1838
+ #~ "indicated on the audio file end."
1839
+ #~ msgstr ""
1840
+ #~ "Esta etiqueta se utiliza para registrar el nombre de un archivo de audio "
1841
+ #~ "relacionado a los datos de imagen. La única información relacional "
1842
+ #~ "registrada aquí es el nombre y la extensión del archivo de audio Exif "
1843
+ #~ "(una cadena de caracteres ASCII que consiste en 8 caracteres, un '.' y 3 "
1844
+ #~ "caracteres más). No se registra la ruta. Las estipulaciones acerca del "
1845
+ #~ "audio se dan en la sección 3.6.3. Las convenciones para los nombres de "
1846
+ #~ "archivo se dan en la sección 3.7.1. Cuando se usa esta etiqueta, los "
1847
+ #~ "archivos de audio se deben grabar en conformidad con el formato de audio "
1848
+ #~ "Exif. También se permite a los escritores almacenar los datos tales como "
1849
+ #~ "Audio dentro de APP2 como un flujo de datos de extensión de FlashPix. Los "
1850
+ #~ "archivos de audio se deben grabar en conformidad con el formato de audio "
1851
+ #~ "Exif. El mapeo de archivos de imagen y archivos de audio Exif se realiza "
1852
+ #~ "en cualquiera de las tres maneras que se muestran en la Tabla 8. Si "
1853
+ #~ "múltiples archivos mapean a uno solo como en [2] o [3] de la tabla, el "
1854
+ #~ "formato anterior se usa para registrar sólo un nombre de archivo de "
1855
+ #~ "audio. Si hay múltiples archivos de audio, se da el primero grabado. En "
1856
+ #~ "el caso de [3] en la Tabla 8, por ejemplo, para el archivo de imagen Exif "
1857
+ #~ "\"DSC00001.JPG\" sólo se da \"SND00001.WAV\" como el archivo de audio "
1858
+ #~ "Exif relacionado. Cuando hay tres archivos de audio Exif, \"SND00001.WAV"
1859
+ #~ "\", \"SND00002.WAV\" y \"SND00003.WAV\", se indica el nombre de archivo "
1860
+ #~ "de imagen Exif para cada uno de ellos, \"DSC00001.JPG\". Al combinar "
1861
+ #~ "información relacional múltiple, es posible soportar una variedad de "
1862
+ #~ "posibilidades de reproducción. El método de utilizar información "
1863
+ #~ "relacional se deja a la implementación del lado del reproductor. Dado que "
1864
+ #~ "esta información es una cadena de caracteres ASCII, la misma está "
1865
+ #~ "terminada por NULL. Cuando esta etiqueta se utiliza para mapear archivos "
1866
+ #~ "de audio, también se debe indicar al final del archivo de audio la "
1867
+ #~ "relación a los datos de la imagen."
1868
+
1869
+ #~ msgid ""
1870
+ #~ "Interoperability IFD is composed of tags which stores the information to "
1871
+ #~ "ensure the Interoperability and pointed by the following tag located in "
1872
+ #~ "Exif IFD. The Interoperability structure of Interoperability IFD is the "
1873
+ #~ "same as TIFF defined IFD structure but does not contain the image data "
1874
+ #~ "characteristically compared with normal TIFF IFD."
1875
+ #~ msgstr ""
1876
+ #~ "El IFD de interoperabilidad está compuesto de etiquetas que almacenan la "
1877
+ #~ "información para asegurar la interoperabilidad y apuntado por la etiqueta "
1878
+ #~ "siguiente ubicada en el IFD Exif. La estructura de interoperabilidad de "
1879
+ #~ "el IFD de interoperabilidad es la misma que la estructura IFD definida "
1880
+ #~ "por TIFF, pero no contiene los datos de imagen característicos del IFD "
1881
+ #~ "normal de TIFF."
1882
+
1883
+ #~ msgid ""
1884
+ #~ "Indicates the strobe energy at the time the image is captured, as "
1885
+ #~ "measured in Beam Candle Power Seconds (BCPS)."
1886
+ #~ msgstr ""
1887
+ #~ "Indica la energía del flash en el momento que se captura la imagen, "
1888
+ #~ "medida en Beam Candle Power Seconds (BCPS)."
1889
+
1890
+ #~ msgid ""
1891
+ #~ "This tag records the camera or input device spatial frequency table and "
1892
+ #~ "SFR values in the direction of image width, image height, and diagonal "
1893
+ #~ "direction, as specified in ISO 12233."
1894
+ #~ msgstr ""
1895
+ #~ "Este etiqueta registra la tabla de frecuencia espacial de la cámara o "
1896
+ #~ "dispositivo de entrada y los valores SFR en las direcciones de ancho, "
1897
+ #~ "alto y diagonal de la imagen, como se especifica en ISO 12233."
1898
+
1899
+ #~ msgid ""
1900
+ #~ "Indicates the number of pixels in the image width (X) direction per "
1901
+ #~ "<FocalPlaneResolutionUnit> on the camera focal plane."
1902
+ #~ msgstr ""
1903
+ #~ "Indica la cantidad de pixels en la dirección del ancho (X) de la imagen "
1904
+ #~ "por <FocalPlaneResolutionUnit> del plano focal de la cámara."
1905
+
1906
+ #~ msgid ""
1907
+ #~ "Indicates the number of pixels in the image height (V) direction per "
1908
+ #~ "<FocalPlaneResolutionUnit> on the camera focal plane."
1909
+ #~ msgstr ""
1910
+ #~ "Indica la cantidad de pixels en la dirección del alto (Y) de la imagen "
1911
+ #~ "por <FocalPlaneResolutionUnit> del plano focal de la cámara."
1912
+
1913
+ #~ msgid ""
1914
+ #~ "Indicates the unit for measuring <FocalPlaneXResolution> and "
1915
+ #~ "<FocalPlaneYResolution>. This value is the same as the <ResolutionUnit>."
1916
+ #~ msgstr ""
1917
+ #~ "Indica la unidad para medir <FocalPlaneXResolution> e "
1918
+ #~ "<FocalPlaneYResolution>. Este valor es el mismo que <ResolutionUnit>."
1919
+
1920
+ #~ msgid ""
1921
+ #~ "Indicates the location of the main subject in the scene. The value of "
1922
+ #~ "this tag represents the pixel at the center of the main subject relative "
1923
+ #~ "to the left edge, prior to rotation processing as per the <Rotation> tag. "
1924
+ #~ "The first value indicates the X column number and second indicates the Y "
1925
+ #~ "row number."
1926
+ #~ msgstr ""
1927
+ #~ "Indica la ubicación del sujeto principal de la escena. El valor de esta "
1928
+ #~ "etiqueta representa el pixel en el centro del sujeto principal relativo "
1929
+ #~ "al borde izquierdo, antes del proceso de rotación como lo indica la "
1930
+ #~ "etiqueta <Rotation>. El primer valor indica el número de columna X y el "
1931
+ #~ "segundo el número de fila Y."
1932
+
1933
+ #~ msgid ""
1934
+ #~ "Indicates the exposure index selected on the camera or input device at "
1935
+ #~ "the time the image is captured."
1936
+ #~ msgstr ""
1937
+ #~ "Indica el índice de exposición seleccionado en la cámara o dispositivo de "
1938
+ #~ "entrada en el momento que se captura la imagen."
1939
+
1940
+ #~ msgid "Indicates the image sensor type on the camera or input device."
1941
+ #~ msgstr ""
1942
+ #~ "Indica el tipo de sensor de imagen en la cámara o dispositivo de entrada."
1943
+
1944
+ #~ msgid ""
1945
+ #~ "Indicates the image source. If a DSC recorded the image, this tag value "
1946
+ #~ "of this tag always be set to 3, indicating that the image was recorded on "
1947
+ #~ "a DSC."
1948
+ #~ msgstr ""
1949
+ #~ "Indica la fuente de la imagen. Si la imagen se registró en un DSC, el "
1950
+ #~ "valor de esta etiqueta siempre debe ser 3, indicando que la imagen se "
1951
+ #~ "registró en un DSC."
1952
+
1953
+ #~ msgid ""
1954
+ #~ "Indicates the type of scene. If a DSC recorded the image, this tag value "
1955
+ #~ "must always be set to 1, indicating that the image was directly "
1956
+ #~ "photographed."
1957
+ #~ msgstr ""
1958
+ #~ "Indica el tipo de la escena. Si la imagen se registró en un DSC, el valor "
1959
+ #~ "de esta etiqueta siempre debe ser 1, indicando que la imagen se registró "
1960
+ #~ "en un DSC."
1961
+
1962
+ #~ msgid ""
1963
+ #~ "This tag indicates the location and area of the main subject in the "
1964
+ #~ "overall scene."
1965
+ #~ msgstr ""
1966
+ #~ "Esta etiqueta indica la ubicación y el área del sujeto principal en la "
1967
+ #~ "escena general."
1968
+
1969
+ #~ msgid ""
1970
+ #~ "This tag indicates the use of special processing on image data, such as "
1971
+ #~ "rendering geared to output. When special processing is performed, the "
1972
+ #~ "reader is expected to disable or minimize any further processing."
1973
+ #~ msgstr ""
1974
+ #~ "Esta etiqueta indica el uso de procesamiento especial en los datos de "
1975
+ #~ "imagen, tal como el rendering de la salida. Cuando se realiza un "
1976
+ #~ "procesamiento especial, se espera que el lector deshabilite o minimice el "
1977
+ #~ "procesado siguiente."
1978
+
1979
+ #~ msgid ""
1980
+ #~ "This tag indicates the exposure mode set when the image was shot. In auto-"
1981
+ #~ "bracketing mode, the camera shoots a series of frames of the same scene "
1982
+ #~ "at different exposure settings."
1983
+ #~ msgstr ""
1984
+ #~ "Esta etiqueta indica el modo de exposición ajustado cuando se tomó la "
1985
+ #~ "imagen. En el modo auto-bracketing, la cámara toma una serie de cuadros "
1986
+ #~ "de la misma escena con ajustes de exposición diferentes."
1987
+
1988
+ #~ msgid ""
1989
+ #~ "This tag indicates the white balance mode set when the image was shot."
1990
+ #~ msgstr ""
1991
+ #~ "Esta etiqueta indica el modo de balance de blanco ajustado cuando se tomó "
1992
+ #~ "la imagen."
1993
+
1994
+ #~ msgid ""
1995
+ #~ "This tag indicates the digital zoom ratio when the image was shot. If the "
1996
+ #~ "numerator of the recorded value is 0, this indicates that digital zoom "
1997
+ #~ "was not used."
1998
+ #~ msgstr ""
1999
+ #~ "Esta etiqueta indica la relación del zoom digital cuando se tomó la "
2000
+ #~ "imagen. Si el numerador del valor registrado es 0, esto indica que no se "
2001
+ #~ "utilizó el zoom digital."
2002
+
2003
+ #~ msgid ""
2004
+ #~ "This tag indicates the equivalent focal length assuming a 35mm film "
2005
+ #~ "camera, in mm. A value of 0 means the focal length is unknown. Note that "
2006
+ #~ "this tag differs from the FocalLength tag."
2007
+ #~ msgstr ""
2008
+ #~ "Esta etiqueta indica la distancia focal equivalente asumiendo una cámara "
2009
+ #~ "de película de 35mm, en mm. Un valor de 0 significa que se desconoce la "
2010
+ #~ "distancia focal. Note que esta etiqueta difiere de la etiqueta "
2011
+ #~ "FocalLength."
2012
+
2013
+ #~ msgid ""
2014
+ #~ "This tag indicates the type of scene that was shot. It can also be used "
2015
+ #~ "to record the mode in which the image was shot. Note that this differs "
2016
+ #~ "from the scene type (SceneType) tag."
2017
+ #~ msgstr ""
2018
+ #~ "Esta etiqueta indica el tipo de escena que se tomó. También se puede "
2019
+ #~ "utilizar para registrar el modo en el cual se tomó la imagen. Note que "
2020
+ #~ "esto difiere de la etiqueta SceneType."
2021
+
2022
+ #~ msgid "This tag indicates the degree of overall image gain adjustment."
2023
+ #~ msgstr ""
2024
+ #~ "Esta etiqueta indica el grado del ajuste de ganancia general de imagen."
2025
+
2026
+ #~ msgid ""
2027
+ #~ "This tag indicates the direction of contrast processing applied by the "
2028
+ #~ "camera when the image was shot."
2029
+ #~ msgstr ""
2030
+ #~ "Esta etiqueta indica la dirección del procesamiento de contraste aplicado "
2031
+ #~ "por la cámara cuando se tomó la imagen."
2032
+
2033
+ #~ msgid ""
2034
+ #~ "This tag indicates the direction of saturation processing applied by the "
2035
+ #~ "camera when the image was shot."
2036
+ #~ msgstr ""
2037
+ #~ "Esta etiqueta indica la dirección del procesamiento de stauración "
2038
+ #~ "aplicado por la cámara cuando se tomó la imagen."
2039
+
2040
+ #~ msgid ""
2041
+ #~ "This tag indicates the direction of sharpness processing applied by the "
2042
+ #~ "camera when the image was shot."
2043
+ #~ msgstr ""
2044
+ #~ "Esta etiqueta indica la dirección del procesamiento de nitidez aplicado "
2045
+ #~ "por la cámara cuando se tomó la imagen."
2046
+
2047
+ #~ msgid ""
2048
+ #~ "This tag indicates information on the picture-taking conditions of a "
2049
+ #~ "particular camera model. The tag is used only to indicate the picture-"
2050
+ #~ "taking conditions in the reader."
2051
+ #~ msgstr ""
2052
+ #~ "Esta etiqueta indica información sobre las condiciones de toma de la foto "
2053
+ #~ "de un modelo de cámara en particular. La etiqueta sólo se usa para "
2054
+ #~ "indicar las condiciones de toma de fotos en el lector."
2055
+
2056
+ #~ msgid "This tag indicates the distance to the subject."
2057
+ #~ msgstr "Esta etiqueta indica la distancia al sujeto."
2058
+
2059
+ #~ msgid ""
2060
+ #~ "This tag indicates an identifier assigned uniquely to each image. It is "
2061
+ #~ "recorded as an ASCII string equivalent to hexadecimal notation and 128-"
2062
+ #~ "bit fixed length."
2063
+ #~ msgstr ""
2064
+ #~ "Esta etiqueta indica un identificador asignado unívocamente a cada "
2065
+ #~ "imagen. Se registra como una cadena de caracteres ASCII equivalente a "
2066
+ #~ "notación hexadecimal y de una longitud fija de 128 bits."
2067
+
2068
+ #, fuzzy
2069
+ #~ msgid ""
2070
+ #~ "Indicates the version of GPSInfoIFD. The version is given as 2.2.0.0. "
2071
+ #~ "This tag is mandatory when GPSInfo tag is present. Note that the "
2072
+ #~ "GPSVersionID tag is written as a different byte than the Exif Version tag."
2073
+ #~ msgstr ""
2074
+ #~ "Indica la versión de <GPSInfoIFD>. La versión está dada como 2.0.0.0. "
2075
+ #~ "Esta etiqueta es obligatoria cuando está presente la etiqueta <GPSInfo>. "
2076
+ #~ "(Nota: La etiqueta <GPSVersion ID> está dada en bytes, a diferencia de la "
2077
+ #~ "etiqueta <ExifVersion>. Cuando la versión es 2.0.0.0, el valor de la "
2078
+ #~ "etiqueta es 02000000.H)."
2079
+
2080
+ #~ msgid ""
2081
+ #~ "Indicates whether the latitude is north or south latitude. The ASCII "
2082
+ #~ "value 'N' indicates north latitude, and 'S' is south latitude."
2083
+ #~ msgstr ""
2084
+ #~ "Indica si la latitud es Norte o Sur. El valor ASCII 'N' indica latitud "
2085
+ #~ "Norte, y 'S' indica latitud Sur."
2086
+
2087
+ #, fuzzy
2088
+ #~ msgid ""
2089
+ #~ "Indicates the latitude. The latitude is expressed as three RATIONAL "
2090
+ #~ "values giving the degrees, minutes, and seconds, respectively. If "
2091
+ #~ "latitude is expressed as degrees, minutes and seconds, a typical format "
2092
+ #~ "would be dd/1,mm/1,ss/1. When degrees and minutes are used and, for "
2093
+ #~ "example, fractions of minutes are given up to two decimal places, the "
2094
+ #~ "format would be dd/1,mmmm/100,0/1."
2095
+ #~ msgstr ""
2096
+ #~ "Indica la latitud. La latitud se expresa como tres valores RACIONALES "
2097
+ #~ "dando los grados, minutos y segundos, respectivamente. Cuando se expresan "
2098
+ #~ "grados, minutos y segundos, el formato es gg/1,mm/1,ss/1. Cuando se "
2099
+ #~ "utilizan grados y minutos y, por ejemplo, se dan fracciones de minutos "
2100
+ #~ "hasta con dos posiciones decimales, el formato es gg/1,mmmm/100,0/1."
2101
+
2102
+ #~ msgid ""
2103
+ #~ "Indicates whether the longitude is east or west longitude. ASCII 'E' "
2104
+ #~ "indicates east longitude, and 'W' is west longitude."
2105
+ #~ msgstr ""
2106
+ #~ "Indica si la longitud es Este u Oeste. El valor ASCII 'E' indica longitud "
2107
+ #~ "Este, y 'W' indica longitud Oeste."
2108
+
2109
+ #, fuzzy
2110
+ #~ msgid ""
2111
+ #~ "Indicates the longitude. The longitude is expressed as three RATIONAL "
2112
+ #~ "values giving the degrees, minutes, and seconds, respectively. If "
2113
+ #~ "longitude is expressed as degrees, minutes and seconds, a typical format "
2114
+ #~ "would be ddd/1,mm/1,ss/1. When degrees and minutes are used and, for "
2115
+ #~ "example, fractions of minutes are given up to two decimal places, the "
2116
+ #~ "format would be ddd/1,mmmm/100,0/1."
2117
+ #~ msgstr ""
2118
+ #~ "Indica la longitud. La longitud se expresa como tres valores RACIONALES "
2119
+ #~ "dando los grados, minutos y segundos, respectivamente. Cuando se expresan "
2120
+ #~ "grados, minutos y segundos, el formato es gg/1,mm/1,ss/1. Cuando se "
2121
+ #~ "utilizan grados y minutos y, por ejemplo, se dan fracciones de minutos "
2122
+ #~ "hasta con dos posiciones decimales, el formato es gg/1,mmmm/100,0/1."
2123
+
2124
+ #, fuzzy
2125
+ #~ msgid ""
2126
+ #~ "Indicates whether the latitude of the destination point is north or south "
2127
+ #~ "latitude. The ASCII value 'N' indicates north latitude, and 'S' is south "
2128
+ #~ "latitude."
2129
+ #~ msgstr ""
2130
+ #~ "Indica si la latitud es Norte o Sur. El valor ASCII 'N' indica latitud "
2131
+ #~ "Norte, y 'S' indica latitud Sur."
2132
+
2133
+ #, fuzzy
2134
+ #~ msgid ""
2135
+ #~ "Indicates the latitude of the destination point. The latitude is "
2136
+ #~ "expressed as three RATIONAL values giving the degrees, minutes, and "
2137
+ #~ "seconds, respectively. If latitude is expressed as degrees, minutes and "
2138
+ #~ "seconds, a typical format would be dd/1,mm/1,ss/1. When degrees and "
2139
+ #~ "minutes are used and, for example, fractions of minutes are given up to "
2140
+ #~ "two decimal places, the format would be dd/1,mmmm/100,0/1."
2141
+ #~ msgstr ""
2142
+ #~ "Indica la latitud. La latitud se expresa como tres valores RACIONALES "
2143
+ #~ "dando los grados, minutos y segundos, respectivamente. Cuando se expresan "
2144
+ #~ "grados, minutos y segundos, el formato es gg/1,mm/1,ss/1. Cuando se "
2145
+ #~ "utilizan grados y minutos y, por ejemplo, se dan fracciones de minutos "
2146
+ #~ "hasta con dos posiciones decimales, el formato es gg/1,mmmm/100,0/1."
2147
+
2148
+ #, fuzzy
2149
+ #~ msgid ""
2150
+ #~ "Indicates whether the longitude of the destination point is east or west "
2151
+ #~ "longitude. ASCII 'E' indicates east longitude, and 'W' is west longitude."
2152
+ #~ msgstr ""
2153
+ #~ "Indica si la longitud es Este u Oeste. El valor ASCII 'E' indica longitud "
2154
+ #~ "Este, y 'W' indica longitud Oeste."
2155
+
2156
+ #, fuzzy
2157
+ #~ msgid ""
2158
+ #~ "Indicates the longitude of the destination point. The longitude is "
2159
+ #~ "expressed as three RATIONAL values giving the degrees, minutes, and "
2160
+ #~ "seconds, respectively. If longitude is expressed as degrees, minutes and "
2161
+ #~ "seconds, a typical format would be ddd/1,mm/1,ss/1. When degrees and "
2162
+ #~ "minutes are used and, for example, fractions of minutes are given up to "
2163
+ #~ "two decimal places, the format would be ddd/1,mmmm/100,0/1."
2164
+ #~ msgstr ""
2165
+ #~ "Indica la longitud. La longitud se expresa como tres valores RACIONALES "
2166
+ #~ "dando los grados, minutos y segundos, respectivamente. Cuando se expresan "
2167
+ #~ "grados, minutos y segundos, el formato es gg/1,mm/1,ss/1. Cuando se "
2168
+ #~ "utilizan grados y minutos y, por ejemplo, se dan fracciones de minutos "
2169
+ #~ "hasta con dos posiciones decimales, el formato es gg/1,mmmm/100,0/1."
2170
+
2171
+ #, fuzzy
2172
+ #~ msgid "Indicates the distance to the destination point."
2173
+ #~ msgstr "Esta etiqueta indica la distancia al sujeto."
2174
+
2175
+ #~ msgid "ImageWidth"
2176
+ #~ msgstr "Ancho de la imagen"
2177
+
2178
+ #~ msgid "ImageLength"
2179
+ #~ msgstr "Longitud de la imagen"
2180
+
2181
+ #~ msgid "BitsPerSample"
2182
+ #~ msgstr "Bits por muestra"
2183
+
2184
+ #~ msgid "PhotometricInterpretation"
2185
+ #~ msgstr "Interpretación fotométrica"
2186
+
2187
+ #~ msgid "FillOrder"
2188
+ #~ msgstr "Orden de llenado"
2189
+
2190
+ #~ msgid "DocumentName"
2191
+ #~ msgstr "Nombre del documento"
2192
+
2193
+ #~ msgid "ImageDescription"
2194
+ #~ msgstr "Descripción de la imagen"
2195
+
2196
+ #~ msgid "StripOffsets"
2197
+ #~ msgstr "Desplazamiento de tira"
2198
+
2199
+ #~ msgid "SamplesPerPixel"
2200
+ #~ msgstr "Muestras por pixel"
2201
+
2202
+ #~ msgid "RowsPerStrip"
2203
+ #~ msgstr "Filas por tira"
2204
+
2205
+ #~ msgid "StripByteCounts"
2206
+ #~ msgstr "Cantidad de bytes por tira"
2207
+
2208
+ #~ msgid "XResolution"
2209
+ #~ msgstr "Resolución X"
2210
+
2211
+ #~ msgid "YResolution"
2212
+ #~ msgstr "Resolución Y"
2213
+
2214
+ #~ msgid "PlanarConfiguration"
2215
+ #~ msgstr "Configuración planar"
2216
+
2217
+ #~ msgid "ResolutionUnit"
2218
+ #~ msgstr "Unidad de resolución"
2219
+
2220
+ #~ msgid "TransferFunction"
2221
+ #~ msgstr "Función de transferencia"
2222
+
2223
+ #~ msgid "DateTime"
2224
+ #~ msgstr "Fecha y hora"
2225
+
2226
+ #~ msgid "WhitePoint"
2227
+ #~ msgstr "Punto blanco"
2228
+
2229
+ #~ msgid "PrimaryChromaticities"
2230
+ #~ msgstr "Cromaticidades primarias"
2231
+
2232
+ #~ msgid "TransferRange"
2233
+ #~ msgstr "Rango de transferencia"
2234
+
2235
+ #~ msgid "JPEGInterchangeFormat"
2236
+ #~ msgstr "Formato de intercambio de JPEG"
2237
+
2238
+ #~ msgid "JPEGInterchangeFormatLength"
2239
+ #~ msgstr "Longitud del formato de intercambio de JPEG"
2240
+
2241
+ #~ msgid "YCbCrCoefficients"
2242
+ #~ msgstr "Coeficientes YCbCr"
2243
+
2244
+ #~ msgid "YCbCrSubSampling"
2245
+ #~ msgstr "Sub-muestreo YCbCr"
2246
+
2247
+ #~ msgid "YCbCrPositioning"
2248
+ #~ msgstr "Posicionamiento YCbCr"
2249
+
2250
+ #~ msgid "ReferenceBlackWhite"
2251
+ #~ msgstr "Referencia Blanco/Negro"
2252
+
2253
+ #~ msgid "CFAPattern"
2254
+ #~ msgstr "Patrón CFA"
2255
+
2256
+ #~ msgid "BatteryLevel"
2257
+ #~ msgstr "Nivel de la batería"
2258
+
2259
+ #~ msgid "ExposureTime"
2260
+ #~ msgstr "Tiempo de exposición"
2261
+
2262
+ #~ msgid "SpectralSensitivity"
2263
+ #~ msgstr "Sensibilidad espectral"
2264
+
2265
+ #~ msgid "ISOSpeedRatings"
2266
+ #~ msgstr "Velocidad ISO"
2267
+
2268
+ #~ msgid "CompressedBitsPerPixel"
2269
+ #~ msgstr "Bits comprimidos por pixel"
2270
+
2271
+ #~ msgid "ShutterSpeedValue"
2272
+ #~ msgstr "Velocidad del obturador"
2273
+
2274
+ #~ msgid "ApertureValue"
2275
+ #~ msgstr "Apertura"
2276
+
2277
+ #~ msgid "BrightnessValue"
2278
+ #~ msgstr "Brillo"
2279
+
2280
+ #~ msgid "ExposureBiasValue"
2281
+ #~ msgstr "Ajuste de exposición"
2282
+
2283
+ #~ msgid "SubjectDistance"
2284
+ #~ msgstr "Distancia del sujeto"
2285
+
2286
+ #~ msgid "MeteringMode"
2287
+ #~ msgstr "Modo de métrica"
2288
+
2289
+ #~ msgid "LightSource"
2290
+ #~ msgstr "Fuente de luz"
2291
+
2292
+ #~ msgid "FocalLength"
2293
+ #~ msgstr "Distancia focal"
2294
+
2295
+ #~ msgid "MakerNote"
2296
+ #~ msgstr "Nota del fabricante"
2297
+
2298
+ #~ msgid "UserComment"
2299
+ #~ msgstr "Comentario del usuario"
2300
+
2301
+ #~ msgid "ColorSpace"
2302
+ #~ msgstr "Espacio de color"
2303
+
2304
+ #~ msgid "FlashEnergy"
2305
+ #~ msgstr "Energía del flash"
2306
+
2307
+ #~ msgid "SpatialFrequencyResponse"
2308
+ #~ msgstr "Respuesta en frecuencia espacial"
2309
+
2310
+ #~ msgid "FocalPlaneXResolution"
2311
+ #~ msgstr "Resolución X del plano focal"
2312
+
2313
+ #~ msgid "FocalPlaneYResolution"
2314
+ #~ msgstr "Resolución Y del plano focal"
2315
+
2316
+ #~ msgid "FocalPlaneResolutionUnit"
2317
+ #~ msgstr "Unidad de resolución del plano focal"
2318
+
2319
+ #~ msgid "SubjectLocation"
2320
+ #~ msgstr "Ubicación del sujeto"
2321
+
2322
+ #~ msgid "ExposureIndex"
2323
+ #~ msgstr "Índice de exposición"
2324
+
2325
+ #~ msgid "SensingMethod"
2326
+ #~ msgstr "Método de sensado"
2327
+
2328
+ #~ msgid "FileSource"
2329
+ #~ msgstr "Fuente de archivo"
2330
+
2331
+ #~ msgid "SceneType"
2332
+ #~ msgstr "Tipo de escena"
2333
+
2334
+ #~ msgid "SubjectArea"
2335
+ #~ msgstr "Área del sujeto"
2336
+
2337
+ #~ msgid "CustomRendered"
2338
+ #~ msgstr "Render personalizado"
2339
+
2340
+ #~ msgid "ExposureMode"
2341
+ #~ msgstr "Modo de exposición"
2342
+
2343
+ #~ msgid "WhiteBalance"
2344
+ #~ msgstr "Balance de blanco"
2345
+
2346
+ #~ msgid "DigitalZoomRatio"
2347
+ #~ msgstr "Relación de zoom digital"
2348
+
2349
+ #~ msgid "FocalLengthIn35mmFilm"
2350
+ #~ msgstr "Distancia focal en película de 35mm"
2351
+
2352
+ #~ msgid "SceneCaptureType"
2353
+ #~ msgstr "Tipo de captura de escena"
2354
+
2355
+ #~ msgid "GainControl"
2356
+ #~ msgstr "Control de ganancia"
2357
+
2358
+ #~ msgid "DeviceSettingDescription"
2359
+ #~ msgstr "Descripción de ajuste del dispositivo"
2360
+
2361
+ #~ msgid "SubjectDistanceRange"
2362
+ #~ msgstr "Rango de distancia al sujeto."
2363
+
2364
+ #~ msgid "ImageUniqueID"
2365
+ #~ msgstr "ID único de imagen"
2366
+
2367
+ #~ msgid "Invalid format '%s', expected '%s'."
2368
+ #~ msgstr "Formato no válido '%s', se esperaba '%s'."
2369
+
2370
+ #~ msgid "Invalid number of components (%d, expected %d)."
2371
+ #~ msgstr "Cantidad de componentes no válida (%d, se esperaba %d)."
2372
+
2373
+ #~ msgid " (35 equivalent: %d mm)"
2374
+ #~ msgstr " (equivalente 35: %d mm)"
2375
+
2376
+ #~ msgid "DSC"
2377
+ #~ msgstr "DSC"
2378
+
2379
+ #~ msgid "-"
2380
+ #~ msgstr "-"
2381
+
2382
+ #~ msgid "Y"
2383
+ #~ msgstr "Y"
2384
+
2385
+ #~ msgid "Cb"
2386
+ #~ msgstr "Cb"
2387
+
2388
+ #~ msgid "Cr"
2389
+ #~ msgstr "Cr"
2390
+
2391
+ #~ msgid "R"
2392
+ #~ msgstr "R"
2393
+
2394
+ #~ msgid "G"
2395
+ #~ msgstr "V"
2396
+
2397
+ #~ msgid "B"
2398
+ #~ msgstr "A"
2399
+
2400
+ #~ msgid "reserved"
2401
+ #~ msgstr "reservado"
2402
+
2403
+ #~ msgid "YCbCr4:2:2"
2404
+ #~ msgstr "YCbCr4:2:2"
2405
+
2406
+ #~ msgid "YCbCr4:2:0"
2407
+ #~ msgstr "YCbCr4:2:0"
2408
+
2409
+ #~ msgid "RGB"
2410
+ #~ msgstr "RVA"
2411
+
2412
+ #~ msgid "YCbCr"
2413
+ #~ msgstr "TCvCr"
2414
+
2415
+ #~ msgid "sRGB"
2416
+ #~ msgstr "sRVA"
2417
+
2418
+ #~ msgid "%d bytes unknown data"
2419
+ #~ msgstr "%d bytes de datos desconocidos"
2420
+
2421
+ #~ msgid "average"
2422
+ #~ msgstr "promedio"
2423
+
2424
+ #~ msgid "center-weight"
2425
+ #~ msgstr "peso centrado"
2426
+
2427
+ #~ msgid "spot"
2428
+ #~ msgstr "lugar"
2429
+
2430
+ #~ msgid "multi-spot"
2431
+ #~ msgstr "multi-lugar"
2432
+
2433
+ #~ msgid "matrix"
2434
+ #~ msgstr "matriz"
2435
+
2436
+ #~ msgid "partial"
2437
+ #~ msgstr "parcial"
2438
+
2439
+ #~ msgid "other"
2440
+ #~ msgstr "otro"
2441
+
2442
+ #~ msgid "sunny"
2443
+ #~ msgstr "soleado"
2444
+
2445
+ #~ msgid "fluorescent"
2446
+ #~ msgstr "fluorescente"
2447
+
2448
+ #~ msgid "tungsten"
2449
+ #~ msgstr "tungsteno"
2450
+
2451
+ #~ msgid "cloudy"
2452
+ #~ msgstr "nublado"
2453
+
2454
+ #~ msgid "in"
2455
+ #~ msgstr "pulg"
2456
+
2457
+ #~ msgid "cm"
2458
+ #~ msgstr "cm"
2459
+
2460
+ #~ msgid "manual"
2461
+ #~ msgstr "manual"
2462
+
2463
+ #~ msgid "normal"
2464
+ #~ msgstr "normal"
2465
+
2466
+ #~ msgid "aperture"
2467
+ #~ msgstr "apertura"
2468
+
2469
+ #~ msgid "shutter"
2470
+ #~ msgstr "obturador"
2471
+
2472
+ #~ msgid "creative"
2473
+ #~ msgstr "creativo"
2474
+
2475
+ #~ msgid "action"
2476
+ #~ msgstr "acción"
2477
+
2478
+ #~ msgid "portrait"
2479
+ #~ msgstr "retrato"
2480
+
2481
+ #~ msgid "landscape"
2482
+ #~ msgstr "paisaje"
2483
+
2484
+ #~ msgid "yes"
2485
+ #~ msgstr "sí"
2486
+
2487
+ #~ msgid "w/o strobe"
2488
+ #~ msgstr "sin estrosboscópica"
2489
+
2490
+ #~ msgid "w. strobe"
2491
+ #~ msgstr "con estrosboscópica"
2492
+
2493
+ #~ msgid "Undefined"
2494
+ #~ msgstr "Indefinido"
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/fr.po ADDED
@@ -0,0 +1,1562 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # French translation for the PHP Exif Library (PEL).
2
+ # Originally from libexif.
3
+ # Copyright (C) 2004, 2005, 2006 Martin Geisler
4
+ # This file is distributed under the term of the GPL.
5
+ # Arnaud Launay <asl@launay.org>, 2002.
6
+ # David Lesieur <david@davidlesieur.com>, 2006.
7
+ #
8
+ msgid ""
9
+ msgstr ""
10
+ "Project-Id-Version: PEL 0.3\n"
11
+ "Report-Msgid-Bugs-To: \n"
12
+ "POT-Creation-Date: 2006-11-19 20:48+0100\n"
13
+ "PO-Revision-Date: 2006-11-04 20:45+0100\n"
14
+ "Last-Translator: David Lesieur <david@davidlesieur.com>\n"
15
+ "Language-Team: Français <traduc@traduc.org>\n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: PelDataWindow.php:517
21
+ #, php-format
22
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
23
+ msgstr "DataWindow: %d octets dans [%d, %d] sur %d octets"
24
+
25
+ #: PelEntryAscii.php:465
26
+ msgid "(Photographer)"
27
+ msgstr "(Photographe)"
28
+
29
+ #: PelEntryAscii.php:466
30
+ msgid "(Editor)"
31
+ msgstr "(Éditeur)"
32
+
33
+ #: PelEntry.php:369
34
+ #, php-format
35
+ msgid " Tag: 0x%04X (%s)\n"
36
+ msgstr " Champ: 0x%04X (%s)\n"
37
+
38
+ #: PelEntry.php:371
39
+ #, php-format
40
+ msgid " Format : %d (%s)\n"
41
+ msgstr ""
42
+
43
+ #: PelEntry.php:373
44
+ #, php-format
45
+ msgid " Components: %d\n"
46
+ msgstr " Composants: %d\n"
47
+
48
+ #: PelEntry.php:376
49
+ #, php-format
50
+ msgid " Value : %s\n"
51
+ msgstr " Valeur : %s\n"
52
+
53
+ #: PelEntry.php:377
54
+ #, php-format
55
+ msgid " Text : %s\n"
56
+ msgstr " Texte : %s\n"
57
+
58
+ #: PelEntryRational.php:136 PelEntryRational.php:141
59
+ #, php-format
60
+ msgid "f/%.01f"
61
+ msgstr ""
62
+
63
+ #: PelEntryRational.php:146
64
+ #, php-format
65
+ msgid "%.1f mm"
66
+ msgstr ""
67
+
68
+ #: PelEntryRational.php:151
69
+ #, php-format
70
+ msgid "%.1f m"
71
+ msgstr ""
72
+
73
+ #: PelEntryRational.php:157
74
+ #, php-format
75
+ msgid "1/%d sec."
76
+ msgstr "1/%d sec."
77
+
78
+ #: PelEntryRational.php:159
79
+ #, php-format
80
+ msgid "%d sec."
81
+ msgstr "%d sec."
82
+
83
+ #: PelEntryRational.php:267
84
+ #, php-format
85
+ msgid "%.0f/%.0f sec. (APEX: %d)"
86
+ msgstr ""
87
+
88
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
89
+ msgid "Unknown"
90
+ msgstr "Inconnu"
91
+
92
+ #: PelEntryShort.php:144
93
+ msgid "Average"
94
+ msgstr "Moyenne"
95
+
96
+ #: PelEntryShort.php:146
97
+ msgid "Center-Weighted Average"
98
+ msgstr "Mesure pondérée centrale"
99
+
100
+ #: PelEntryShort.php:148
101
+ msgid "Spot"
102
+ msgstr "Spot"
103
+
104
+ #: PelEntryShort.php:150
105
+ msgid "Multi Spot"
106
+ msgstr "Multi spot"
107
+
108
+ #: PelEntryShort.php:152
109
+ msgid "Pattern"
110
+ msgstr "Motif"
111
+
112
+ #: PelEntryShort.php:154
113
+ msgid "Partial"
114
+ msgstr "Partiel"
115
+
116
+ #: PelEntryShort.php:156 PelEntryShort.php:247
117
+ msgid "Other"
118
+ msgstr "Autre"
119
+
120
+ #: PelEntryShort.php:165
121
+ msgid "Uncompressed"
122
+ msgstr "Non compressé"
123
+
124
+ #: PelEntryShort.php:167
125
+ msgid "JPEG compression"
126
+ msgstr "Compression JPEG"
127
+
128
+ #: PelEntryShort.php:177
129
+ msgid "chunky format"
130
+ msgstr "format en blocs"
131
+
132
+ #: PelEntryShort.php:179
133
+ msgid "planar format"
134
+ msgstr "format planaire"
135
+
136
+ #: PelEntryShort.php:188 PelEntryShort.php:268
137
+ msgid "Not defined"
138
+ msgstr "Non défini"
139
+
140
+ #: PelEntryShort.php:190
141
+ msgid "One-chip color area sensor"
142
+ msgstr "Capteur de couleur à une puce"
143
+
144
+ #: PelEntryShort.php:192
145
+ msgid "Two-chip color area sensor"
146
+ msgstr "Capteur de couleur à deux puces"
147
+
148
+ #: PelEntryShort.php:194
149
+ msgid "Three-chip color area sensor"
150
+ msgstr "Capteur de couleur à trois puces"
151
+
152
+ #: PelEntryShort.php:196
153
+ msgid "Color sequential area sensor"
154
+ msgstr "Capteur linéaire séquentiel de couleur"
155
+
156
+ #: PelEntryShort.php:198
157
+ msgid "Trilinear sensor"
158
+ msgstr "Capteur trilinéaire"
159
+
160
+ #: PelEntryShort.php:200
161
+ msgid "Color sequential linear sensor"
162
+ msgstr "Capteur linéaire séquentiel de couleur"
163
+
164
+ #: PelEntryShort.php:211
165
+ msgid "Daylight"
166
+ msgstr "Lumière du jour"
167
+
168
+ #: PelEntryShort.php:213
169
+ msgid "Fluorescent"
170
+ msgstr "Fluorescent"
171
+
172
+ #: PelEntryShort.php:215
173
+ msgid "Tungsten (incandescent light)"
174
+ msgstr "Tungstène (lumière incandescente)"
175
+
176
+ #: PelEntryShort.php:217 PelTag.php:1808
177
+ msgid "Flash"
178
+ msgstr "Flash"
179
+
180
+ #: PelEntryShort.php:219
181
+ msgid "Fine weather"
182
+ msgstr "Temps clair"
183
+
184
+ #: PelEntryShort.php:221
185
+ msgid "Cloudy weather"
186
+ msgstr "Temps couvert"
187
+
188
+ #: PelEntryShort.php:223
189
+ msgid "Shade"
190
+ msgstr "Ombragé"
191
+
192
+ #: PelEntryShort.php:225
193
+ msgid "Daylight fluorescent"
194
+ msgstr "Fluorescent lumière du jour"
195
+
196
+ #: PelEntryShort.php:227
197
+ msgid "Day white fluorescent"
198
+ msgstr "Fluorescent blanc lumière du jour"
199
+
200
+ #: PelEntryShort.php:229
201
+ msgid "Cool white fluorescent"
202
+ msgstr "Fluorescent blanc froid"
203
+
204
+ #: PelEntryShort.php:231
205
+ msgid "White fluorescent"
206
+ msgstr "Fluorescent blanc"
207
+
208
+ #: PelEntryShort.php:233
209
+ msgid "Standard light A"
210
+ msgstr "Lampe standard A"
211
+
212
+ #: PelEntryShort.php:235
213
+ msgid "Standard light B"
214
+ msgstr "Lampe standard B"
215
+
216
+ #: PelEntryShort.php:237
217
+ msgid "Standard light C"
218
+ msgstr "Lampe standard C"
219
+
220
+ #: PelEntryShort.php:239
221
+ msgid "D55"
222
+ msgstr "D55"
223
+
224
+ #: PelEntryShort.php:241
225
+ msgid "D65"
226
+ msgstr "D65"
227
+
228
+ #: PelEntryShort.php:243
229
+ msgid "D75"
230
+ msgstr "D75"
231
+
232
+ #: PelEntryShort.php:245
233
+ msgid "ISO studio tungsten"
234
+ msgstr "Tungstène de studio ISO"
235
+
236
+ #: PelEntryShort.php:257
237
+ msgid "Inch"
238
+ msgstr "Pouce"
239
+
240
+ #: PelEntryShort.php:259
241
+ msgid "Centimeter"
242
+ msgstr "Centimètre"
243
+
244
+ #: PelEntryShort.php:270
245
+ msgid "Manual"
246
+ msgstr "Manuel"
247
+
248
+ #: PelEntryShort.php:272
249
+ msgid "Normal program"
250
+ msgstr "Programme normal"
251
+
252
+ #: PelEntryShort.php:274
253
+ msgid "Aperture priority"
254
+ msgstr "Priorité ouverture"
255
+
256
+ #: PelEntryShort.php:276
257
+ msgid "Shutter priority"
258
+ msgstr "Priorité vitesse"
259
+
260
+ #: PelEntryShort.php:278
261
+ msgid "Creative program (biased toward depth of field)"
262
+ msgstr "Programme créatif (grande profondeur de champ)"
263
+
264
+ #: PelEntryShort.php:280
265
+ msgid "Action program (biased toward fast shutter speed)"
266
+ msgstr "Programme action (vitesse d'obturation élevée)"
267
+
268
+ #: PelEntryShort.php:282
269
+ msgid "Portrait mode (for closeup photos with the background out of focus"
270
+ msgstr "Mode portrait (photos en gros plan avec arrière-plan flou)"
271
+
272
+ #: PelEntryShort.php:284
273
+ msgid "Landscape mode (for landscape photos with the background in focus"
274
+ msgstr "Mode paysage (paysages avec arrière-plan net)"
275
+
276
+ #: PelEntryShort.php:293
277
+ msgid "top - left"
278
+ msgstr "haut - gauche"
279
+
280
+ #: PelEntryShort.php:295
281
+ msgid "top - right"
282
+ msgstr "haut - droit"
283
+
284
+ #: PelEntryShort.php:297
285
+ msgid "bottom - right"
286
+ msgstr "bas - droit"
287
+
288
+ #: PelEntryShort.php:299
289
+ msgid "bottom - left"
290
+ msgstr "bas - gauche"
291
+
292
+ #: PelEntryShort.php:301
293
+ msgid "left - top"
294
+ msgstr "gauche - haut"
295
+
296
+ #: PelEntryShort.php:303
297
+ msgid "right - top"
298
+ msgstr "droit - haut"
299
+
300
+ #: PelEntryShort.php:305
301
+ msgid "right - bottom"
302
+ msgstr "droit - bas"
303
+
304
+ #: PelEntryShort.php:307
305
+ msgid "left - bottom"
306
+ msgstr "gauche - bas"
307
+
308
+ #: PelEntryShort.php:316
309
+ msgid "centered"
310
+ msgstr "centré"
311
+
312
+ #: PelEntryShort.php:318
313
+ msgid "co-sited"
314
+ msgstr ""
315
+
316
+ #: PelEntryShort.php:351
317
+ msgid "Uncalibrated"
318
+ msgstr "Non calibré"
319
+
320
+ #: PelEntryShort.php:360
321
+ msgid "Flash did not fire."
322
+ msgstr "Le flash ne s'est pas déclenché."
323
+
324
+ #: PelEntryShort.php:362
325
+ msgid "Flash fired."
326
+ msgstr "Le flash s'est déclenché."
327
+
328
+ #: PelEntryShort.php:364
329
+ msgid "Strobe return light not detected."
330
+ msgstr "Lumière de retour de flash non détectée."
331
+
332
+ #: PelEntryShort.php:366
333
+ msgid "Strobe return light detected."
334
+ msgstr "Lumière de retour détectée."
335
+
336
+ #: PelEntryShort.php:368
337
+ msgid "Flash fired, compulsory flash mode."
338
+ msgstr "Flash déclenché, mode de flash obligatoire."
339
+
340
+ #: PelEntryShort.php:370
341
+ msgid "Flash fired, compulsory flash mode, return light not detected."
342
+ msgstr ""
343
+ "Flash déclenché, mode de flash obligatoire, lumière de retour non détectée."
344
+
345
+ #: PelEntryShort.php:372
346
+ msgid "Flash fired, compulsory flash mode, return light detected."
347
+ msgstr ""
348
+ "Flash déclenché, mode de flash obligatoire, lumière de retour détectée."
349
+
350
+ #: PelEntryShort.php:374
351
+ msgid "Flash did not fire, compulsory flash mode."
352
+ msgstr "Flash non déclenché, mode de flash obligatoire."
353
+
354
+ #: PelEntryShort.php:376
355
+ msgid "Flash did not fire, auto mode."
356
+ msgstr "Flash non déclenché, mode auto."
357
+
358
+ #: PelEntryShort.php:378
359
+ msgid "Flash fired, auto mode."
360
+ msgstr "Flash déclenché, mode auto."
361
+
362
+ #: PelEntryShort.php:380
363
+ msgid "Flash fired, auto mode, return light not detected."
364
+ msgstr "Flash déclenché, mode auto, lumière de retour non détectée."
365
+
366
+ #: PelEntryShort.php:382
367
+ msgid "Flash fired, auto mode, return light detected."
368
+ msgstr "Flash déclenché, mode auto, lumière de retour détectée."
369
+
370
+ #: PelEntryShort.php:384
371
+ msgid "No flash function."
372
+ msgstr "Pas de fonction flash."
373
+
374
+ #: PelEntryShort.php:386
375
+ msgid "Flash fired, red-eye reduction mode."
376
+ msgstr "Flash déclenché, mode anti-yeux rouges."
377
+
378
+ #: PelEntryShort.php:388
379
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
380
+ msgstr ""
381
+ "Flash déclenché, mode anti-yeux rouges, lumière de retour non détectée."
382
+
383
+ #: PelEntryShort.php:390
384
+ msgid "Flash fired, red-eye reduction mode, return light detected."
385
+ msgstr "Flash déclenché, mode anti-yeux rouges, lumière de retour détectée."
386
+
387
+ #: PelEntryShort.php:392
388
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
389
+ msgstr "Flash déclenché, mode de flash obligatoire, mode anti-yeux rouges."
390
+
391
+ #: PelEntryShort.php:394
392
+ msgid ""
393
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
394
+ "detected."
395
+ msgstr ""
396
+ "Flash déclenché, mode de flash obligatoire, mode anti-yeux rouges, lumière "
397
+ "de retour non détectée."
398
+
399
+ #: PelEntryShort.php:396
400
+ msgid ""
401
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
402
+ "detected."
403
+ msgstr ""
404
+ "Flash déclenché, mode de flash obligatoire, mode anti-yeux rouges, lumière "
405
+ "de retour détectée"
406
+
407
+ #: PelEntryShort.php:398
408
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
409
+ msgstr "Flash non déclenché, mode auto, mode anti-yeux rouges."
410
+
411
+ #: PelEntryShort.php:400
412
+ msgid "Flash fired, auto mode, red-eye reduction mode."
413
+ msgstr "Flash déclenché, mode auto, mode anti-yeux rouges."
414
+
415
+ #: PelEntryShort.php:402
416
+ msgid ""
417
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
418
+ msgstr ""
419
+ "Flash déclenché, mode auto, lumière de retour non détectée, mode anti-yeux "
420
+ "rouges."
421
+
422
+ #: PelEntryShort.php:404
423
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
424
+ msgstr ""
425
+ "Flash déclenché, mode auto, lumière de retour détectée, mode anti-yeux "
426
+ "rouges."
427
+
428
+ #: PelEntryShort.php:413
429
+ msgid "Normal process"
430
+ msgstr "Processus normal"
431
+
432
+ #: PelEntryShort.php:415
433
+ msgid "Custom process"
434
+ msgstr "Processus personnalisé"
435
+
436
+ #: PelEntryShort.php:424
437
+ msgid "Auto exposure"
438
+ msgstr "Exposition automatique"
439
+
440
+ #: PelEntryShort.php:426
441
+ msgid "Manual exposure"
442
+ msgstr "Exposition manuelle"
443
+
444
+ #: PelEntryShort.php:428
445
+ msgid "Auto bracket"
446
+ msgstr "Bracketing automatique"
447
+
448
+ #: PelEntryShort.php:437
449
+ msgid "Auto white balance"
450
+ msgstr "Balance des blancs automatique"
451
+
452
+ #: PelEntryShort.php:439
453
+ msgid "Manual white balance"
454
+ msgstr "Balance des blancs manuelle"
455
+
456
+ #: PelEntryShort.php:448
457
+ msgid "Standard"
458
+ msgstr "Standard"
459
+
460
+ #: PelEntryShort.php:450
461
+ msgid "Landscape"
462
+ msgstr "Paysage"
463
+
464
+ #: PelEntryShort.php:452
465
+ msgid "Portrait"
466
+ msgstr "Portrait"
467
+
468
+ #: PelEntryShort.php:454
469
+ msgid "Night scene"
470
+ msgstr "Scène de nuit"
471
+
472
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
473
+ msgid "Normal"
474
+ msgstr "Normal"
475
+
476
+ #: PelEntryShort.php:465
477
+ msgid "Low gain up"
478
+ msgstr ""
479
+
480
+ #: PelEntryShort.php:467
481
+ msgid "High gain up"
482
+ msgstr ""
483
+
484
+ #: PelEntryShort.php:469
485
+ msgid "Low gain down"
486
+ msgstr ""
487
+
488
+ #: PelEntryShort.php:471
489
+ msgid "High gain down"
490
+ msgstr ""
491
+
492
+ #: PelEntryShort.php:482
493
+ msgid "Low saturation"
494
+ msgstr "Saturation faible"
495
+
496
+ #: PelEntryShort.php:484
497
+ msgid "High saturation"
498
+ msgstr "Saturation élevée"
499
+
500
+ #: PelEntryShort.php:496
501
+ msgid "Soft"
502
+ msgstr "Doux"
503
+
504
+ #: PelEntryShort.php:498
505
+ msgid "Hard"
506
+ msgstr "Dur"
507
+
508
+ #: PelEntryShort.php:509
509
+ msgid "Macro"
510
+ msgstr "Macro"
511
+
512
+ #: PelEntryShort.php:511
513
+ msgid "Close view"
514
+ msgstr "Vue de près"
515
+
516
+ #: PelEntryShort.php:513
517
+ msgid "Distant view"
518
+ msgstr "Vue de loin"
519
+
520
+ #: PelEntryShort.php:521
521
+ #, php-format
522
+ msgid "(x,y) = (%d,%d)"
523
+ msgstr ""
524
+
525
+ #: PelEntryShort.php:523
526
+ #, php-format
527
+ msgid "Within distance %d of (x,y) = (%d,%d)"
528
+ msgstr "Dans la distance %d de (x,y) = (%d,%d)"
529
+
530
+ #: PelEntryShort.php:526
531
+ #, php-format
532
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
533
+ msgstr "Dans le rectangle (largeur %d, hauteur %d) autour de (x,y) = (%d,%d)"
534
+
535
+ #: PelEntryShort.php:531
536
+ #, php-format
537
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
538
+ msgstr "Nombre inattendu de composants (%d, attendait 2, 3, ou 4)."
539
+
540
+ #: PelEntryUndefined.php:390
541
+ #, php-format
542
+ msgid "Exif %s"
543
+ msgstr "Exif %s"
544
+
545
+ #: PelEntryUndefined.php:392
546
+ #, php-format
547
+ msgid "Exif Version %s"
548
+ msgstr ""
549
+
550
+ #: PelEntryUndefined.php:396
551
+ #, php-format
552
+ msgid "FlashPix %s"
553
+ msgstr "FlashPix %s"
554
+
555
+ #: PelEntryUndefined.php:398
556
+ #, php-format
557
+ msgid "FlashPix Version %s"
558
+ msgstr ""
559
+
560
+ #: PelEntryUndefined.php:402
561
+ #, php-format
562
+ msgid "Interoperability %s"
563
+ msgstr ""
564
+
565
+ #: PelEntryUndefined.php:404
566
+ #, php-format
567
+ msgid "Interoperability Version %s"
568
+ msgstr ""
569
+
570
+ #: PelEntryUndefined.php:410
571
+ #, php-format
572
+ msgid "Version %s"
573
+ msgstr "Version %s"
574
+
575
+ #: PelExif.php:169
576
+ msgid "Dumping Exif data...\n"
577
+ msgstr "Sauvegarde des données Exif...\n"
578
+
579
+ #: PelFormat.php:192 PelFormat.php:220
580
+ #, php-format
581
+ msgid "Unknown format: 0x%X"
582
+ msgstr "Format inconnu: 0x%X"
583
+
584
+ #: PelIfd.php:1180
585
+ #, php-format
586
+ msgid "Dumping IFD %s with %d entries...\n"
587
+ msgstr "Sauvegarde de l'IFD %s avec %d enregistrements...\n"
588
+
589
+ #: PelIfd.php:1186
590
+ #, php-format
591
+ msgid "Dumping %d sub IFDs...\n"
592
+ msgstr "Sauvegarde de %d sous-IFD...\n"
593
+
594
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
595
+ #, php-format
596
+ msgid "Unknown marker: 0x%02X"
597
+ msgstr "Marqueur inconnu: 0x%02X"
598
+
599
+ #: PelJpegMarker.php:302
600
+ msgid "Encoding (baseline)"
601
+ msgstr "Encodage (baseline)"
602
+
603
+ #: PelJpegMarker.php:304
604
+ msgid "Encoding (extended sequential)"
605
+ msgstr "Encodage (séquentiel étendu)"
606
+
607
+ #: PelJpegMarker.php:306
608
+ msgid "Encoding (progressive)"
609
+ msgstr "Encodage (progressif)"
610
+
611
+ #: PelJpegMarker.php:308
612
+ msgid "Encoding (lossless)"
613
+ msgstr "Encodage (sans perte de données)"
614
+
615
+ #: PelJpegMarker.php:310
616
+ msgid "Encoding (differential sequential)"
617
+ msgstr "Encodage (séquentiel différentiel)"
618
+
619
+ #: PelJpegMarker.php:312
620
+ msgid "Encoding (differential progressive)"
621
+ msgstr "Encodage (progressif différentiel)"
622
+
623
+ #: PelJpegMarker.php:314
624
+ msgid "Encoding (differential lossless)"
625
+ msgstr "Encodage (différentiel sans perte de données)"
626
+
627
+ #: PelJpegMarker.php:316
628
+ msgid "Encoding (extended sequential, arithmetic)"
629
+ msgstr "Encodage (séquentiel étendu, arithmetique)"
630
+
631
+ #: PelJpegMarker.php:318
632
+ msgid "Encoding (progressive, arithmetic)"
633
+ msgstr "Encodage (progressif, arithmétique)"
634
+
635
+ #: PelJpegMarker.php:320
636
+ msgid "Encoding (lossless, arithmetic)"
637
+ msgstr "Encodage (sans perte de données, arithmétique)"
638
+
639
+ #: PelJpegMarker.php:322
640
+ msgid "Encoding (differential sequential, arithmetic)"
641
+ msgstr "Encodage (différentiel séquentiel, arithmétique)"
642
+
643
+ #: PelJpegMarker.php:324
644
+ msgid "Encoding (differential progressive, arithmetic)"
645
+ msgstr "Encodage (différentiel progressif, arithmétique)"
646
+
647
+ #: PelJpegMarker.php:326
648
+ msgid "Encoding (differential lossless, arithmetic)"
649
+ msgstr "Encodage (différentiel sans perte de données, arithmétique)"
650
+
651
+ #: PelJpegMarker.php:328
652
+ msgid "Start of image"
653
+ msgstr "Début de l'image"
654
+
655
+ #: PelJpegMarker.php:330
656
+ msgid "End of image"
657
+ msgstr "Fin de l'image"
658
+
659
+ #: PelJpegMarker.php:332
660
+ msgid "Start of scan"
661
+ msgstr "Début de la numérisation"
662
+
663
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
664
+ msgid "Comment"
665
+ msgstr "Commentaire"
666
+
667
+ #: PelJpegMarker.php:336
668
+ msgid "Define Huffman table"
669
+ msgstr "Définir la table Huffman"
670
+
671
+ #: PelJpegMarker.php:338
672
+ msgid "Extension"
673
+ msgstr "Extension"
674
+
675
+ #: PelJpegMarker.php:340
676
+ msgid "Define arithmetic coding conditioning"
677
+ msgstr ""
678
+
679
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
680
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
681
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
682
+ #, php-format
683
+ msgid "Restart %d"
684
+ msgstr ""
685
+
686
+ #: PelJpegMarker.php:358
687
+ msgid "Define quantization table"
688
+ msgstr ""
689
+
690
+ #: PelJpegMarker.php:360
691
+ msgid "Define number of lines"
692
+ msgstr ""
693
+
694
+ #: PelJpegMarker.php:362
695
+ msgid "Define restart interval"
696
+ msgstr ""
697
+
698
+ #: PelJpegMarker.php:364
699
+ msgid "Define hierarchical progression"
700
+ msgstr ""
701
+
702
+ #: PelJpegMarker.php:366
703
+ msgid "Expand reference component"
704
+ msgstr ""
705
+
706
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
707
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
708
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
709
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
710
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
711
+ #: PelJpegMarker.php:398
712
+ #, php-format
713
+ msgid "Application segment %d"
714
+ msgstr ""
715
+
716
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
717
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
718
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
719
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
720
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
721
+ #, php-format
722
+ msgid "Extension %d"
723
+ msgstr ""
724
+
725
+ #: PelJpeg.php:543
726
+ msgid "Dumping JPEG data...\n"
727
+ msgstr "Sauvegarde de données JPEG...\n"
728
+
729
+ #: PelJpeg.php:547
730
+ #, php-format
731
+ msgid "Section %d (marker 0x%02X - %s):\n"
732
+ msgstr "Section %d (marqueur 0x%02X - %s):\n"
733
+
734
+ #: PelJpeg.php:549
735
+ #, php-format
736
+ msgid " Description: %s\n"
737
+ msgstr ""
738
+
739
+ #: PelJpeg.php:557
740
+ msgid " Content : Exif data\n"
741
+ msgstr " Contenu : Données Exif\n"
742
+
743
+ #: PelJpeg.php:560
744
+ #, php-format
745
+ msgid " Content : %s\n"
746
+ msgstr " Contenu : %s\n"
747
+
748
+ #: PelJpeg.php:562
749
+ msgid " Content : Unknown\n"
750
+ msgstr " Contenu : Inconnu\n"
751
+
752
+ #: PelTag.php:1649
753
+ #, php-format
754
+ msgid "Unknown: 0x%04X"
755
+ msgstr "Inconnu: 0x%04X"
756
+
757
+ #: PelTag.php:1678
758
+ msgid "Interoperability Index"
759
+ msgstr ""
760
+
761
+ #: PelTag.php:1680
762
+ msgid "Interoperability Version"
763
+ msgstr ""
764
+
765
+ #: PelTag.php:1682
766
+ msgid "Image Width"
767
+ msgstr "Largeur de l'image"
768
+
769
+ #: PelTag.php:1684
770
+ msgid "Image Length"
771
+ msgstr "Longeur de l'image"
772
+
773
+ #: PelTag.php:1686
774
+ msgid "Bits per Sample"
775
+ msgstr "Bits par échantillon"
776
+
777
+ #: PelTag.php:1688
778
+ msgid "Compression"
779
+ msgstr "Compression"
780
+
781
+ #: PelTag.php:1690
782
+ msgid "Photometric Interpretation"
783
+ msgstr "Interprétation photométrique"
784
+
785
+ #: PelTag.php:1692
786
+ msgid "Fill Order"
787
+ msgstr "Ordre de remplissage"
788
+
789
+ #: PelTag.php:1694
790
+ msgid "Document Name"
791
+ msgstr "Nom du document"
792
+
793
+ #: PelTag.php:1696
794
+ msgid "Image Description"
795
+ msgstr "Description de l'image"
796
+
797
+ #: PelTag.php:1698
798
+ msgid "Manufacturer"
799
+ msgstr "Fabricant"
800
+
801
+ #: PelTag.php:1700
802
+ msgid "Model"
803
+ msgstr "Modèle"
804
+
805
+ #: PelTag.php:1702
806
+ msgid "Strip Offsets"
807
+ msgstr ""
808
+
809
+ #: PelTag.php:1704
810
+ msgid "Orientation"
811
+ msgstr "Orientation"
812
+
813
+ #: PelTag.php:1706
814
+ msgid "Samples per Pixel"
815
+ msgstr "Échantillons par pixel"
816
+
817
+ #: PelTag.php:1708
818
+ msgid "Rows per Strip"
819
+ msgstr ""
820
+
821
+ #: PelTag.php:1710
822
+ msgid "Strip Byte Count"
823
+ msgstr ""
824
+
825
+ #: PelTag.php:1712
826
+ msgid "x-Resolution"
827
+ msgstr "Résolution X"
828
+
829
+ #: PelTag.php:1714
830
+ msgid "y-Resolution"
831
+ msgstr "Résolution Y"
832
+
833
+ #: PelTag.php:1716
834
+ msgid "Planar Configuration"
835
+ msgstr "Configuration du plan"
836
+
837
+ #: PelTag.php:1718
838
+ msgid "Resolution Unit"
839
+ msgstr "Unité de résolution"
840
+
841
+ #: PelTag.php:1720
842
+ msgid "Transfer Function"
843
+ msgstr "Fonction de transfert"
844
+
845
+ #: PelTag.php:1722
846
+ msgid "Software"
847
+ msgstr "Logiciel"
848
+
849
+ #: PelTag.php:1724
850
+ msgid "Date and Time"
851
+ msgstr "Date et heure"
852
+
853
+ #: PelTag.php:1726
854
+ msgid "Artist"
855
+ msgstr "Artiste"
856
+
857
+ #: PelTag.php:1728
858
+ msgid "White Point"
859
+ msgstr "Point blanc"
860
+
861
+ #: PelTag.php:1730
862
+ msgid "Primary Chromaticities"
863
+ msgstr ""
864
+
865
+ #: PelTag.php:1732
866
+ msgid "Transfer Range"
867
+ msgstr "Échelle de transfert"
868
+
869
+ #: PelTag.php:1734
870
+ msgid "JPEGProc"
871
+ msgstr ""
872
+
873
+ #: PelTag.php:1736
874
+ msgid "JPEG Interchange Format"
875
+ msgstr "Format d'échange JPEG"
876
+
877
+ #: PelTag.php:1738
878
+ msgid "JPEG Interchange Format Length"
879
+ msgstr "Longueur du format d'échange JPEG"
880
+
881
+ #: PelTag.php:1740
882
+ msgid "YCbCr Coefficients"
883
+ msgstr "Coefficients YCbCr"
884
+
885
+ #: PelTag.php:1742
886
+ msgid "YCbCr Sub-Sampling"
887
+ msgstr "Sous-échantillonnage YCbCr"
888
+
889
+ #: PelTag.php:1744
890
+ msgid "YCbCr Positioning"
891
+ msgstr "Positionnement YCbCr"
892
+
893
+ #: PelTag.php:1746
894
+ msgid "Reference Black/White"
895
+ msgstr "Référence Noir/Blanc"
896
+
897
+ #: PelTag.php:1748
898
+ msgid "Related Image File Format"
899
+ msgstr "Format d'image connexe"
900
+
901
+ #: PelTag.php:1750
902
+ msgid "Related Image Width"
903
+ msgstr "Largeur de l'image connexe"
904
+
905
+ #: PelTag.php:1752
906
+ msgid "Related Image Length"
907
+ msgstr "Longeur de l'image connexe"
908
+
909
+ #: PelTag.php:1754
910
+ msgid "CFA Repeat Pattern Dim"
911
+ msgstr ""
912
+
913
+ #: PelTag.php:1756
914
+ msgid "CFA Pattern"
915
+ msgstr "Motif CFA"
916
+
917
+ #: PelTag.php:1758
918
+ msgid "Battery Level"
919
+ msgstr "Niveau de charge"
920
+
921
+ #: PelTag.php:1760
922
+ msgid "Copyright"
923
+ msgstr "Copyright"
924
+
925
+ #: PelTag.php:1762
926
+ msgid "Exposure Time"
927
+ msgstr "Temps d'exposition"
928
+
929
+ #: PelTag.php:1764
930
+ msgid "FNumber"
931
+ msgstr "Le nombre F."
932
+
933
+ #: PelTag.php:1766
934
+ msgid "IPTC/NAA"
935
+ msgstr ""
936
+
937
+ #: PelTag.php:1768
938
+ msgid "Exif IFD Pointer"
939
+ msgstr "Pointeur Exif IFD"
940
+
941
+ #: PelTag.php:1770
942
+ msgid "Inter Color Profile"
943
+ msgstr "Profil inter-couleur"
944
+
945
+ #: PelTag.php:1772
946
+ msgid "Exposure Program"
947
+ msgstr "Programme d'exposition"
948
+
949
+ #: PelTag.php:1774
950
+ msgid "Spectral Sensitivity"
951
+ msgstr "Sensitivité spectrale"
952
+
953
+ #: PelTag.php:1776
954
+ msgid "GPS Info IFD Pointer"
955
+ msgstr "Pointeur IFD d'info GPS"
956
+
957
+ #: PelTag.php:1778
958
+ msgid "ISO Speed Ratings"
959
+ msgstr "Sensibilité ISO"
960
+
961
+ #: PelTag.php:1780
962
+ msgid "OECF"
963
+ msgstr ""
964
+
965
+ #: PelTag.php:1782
966
+ msgid "Exif Version"
967
+ msgstr "Version d'Exif"
968
+
969
+ #: PelTag.php:1784
970
+ msgid "Date and Time (original)"
971
+ msgstr "Date et heure (original)"
972
+
973
+ #: PelTag.php:1786
974
+ msgid "Date and Time (digitized)"
975
+ msgstr "Date et heure (numérisation)"
976
+
977
+ #: PelTag.php:1788
978
+ msgid "Components Configuration"
979
+ msgstr "Configuration des composants"
980
+
981
+ #: PelTag.php:1790
982
+ msgid "Compressed Bits per Pixel"
983
+ msgstr "Bits compressés par pixel"
984
+
985
+ #: PelTag.php:1792
986
+ msgid "Shutter speed"
987
+ msgstr "Vitesse d'obturation"
988
+
989
+ #: PelTag.php:1794
990
+ msgid "Aperture"
991
+ msgstr "Ouverture"
992
+
993
+ #: PelTag.php:1796
994
+ msgid "Brightness"
995
+ msgstr "Luminosité"
996
+
997
+ #: PelTag.php:1798
998
+ msgid "Exposure Bias"
999
+ msgstr "Correction d'exposition"
1000
+
1001
+ #: PelTag.php:1800
1002
+ msgid "Max Aperture Value"
1003
+ msgstr "Valeur maximale d'ouverture"
1004
+
1005
+ #: PelTag.php:1802
1006
+ msgid "Subject Distance"
1007
+ msgstr "Distance du sujet"
1008
+
1009
+ #: PelTag.php:1804
1010
+ msgid "Metering Mode"
1011
+ msgstr "Mode de mesure"
1012
+
1013
+ #: PelTag.php:1806
1014
+ msgid "Light Source"
1015
+ msgstr "Source lumineuse"
1016
+
1017
+ #: PelTag.php:1810
1018
+ msgid "Focal Length"
1019
+ msgstr "Longueur focale"
1020
+
1021
+ #: PelTag.php:1812
1022
+ msgid "Maker Note"
1023
+ msgstr "Note du créateur"
1024
+
1025
+ #: PelTag.php:1814
1026
+ msgid "User Comment"
1027
+ msgstr "Commentaire de l'utilisateur"
1028
+
1029
+ #: PelTag.php:1816
1030
+ msgid "SubSec Time"
1031
+ msgstr "Temps inférieur à la seconde"
1032
+
1033
+ #: PelTag.php:1818
1034
+ msgid "SubSec Time Original"
1035
+ msgstr "Temps inférieur à la seconde (original)"
1036
+
1037
+ #: PelTag.php:1820
1038
+ msgid "SubSec Time Digitized"
1039
+ msgstr "Temps inférieur à la seconde (numérisation)"
1040
+
1041
+ #: PelTag.php:1832
1042
+ msgid "FlashPix Version"
1043
+ msgstr "Version de FlashPix"
1044
+
1045
+ #: PelTag.php:1834
1046
+ msgid "Color Space"
1047
+ msgstr "Espace de couleurs"
1048
+
1049
+ #: PelTag.php:1836
1050
+ msgid "Pixel x-Dimension"
1051
+ msgstr "Dimension X en pixels"
1052
+
1053
+ #: PelTag.php:1838
1054
+ msgid "Pixel y-Dimension"
1055
+ msgstr "Dimension Y en pixels"
1056
+
1057
+ #: PelTag.php:1840
1058
+ msgid "Related Sound File"
1059
+ msgstr "Fichier audio connexe"
1060
+
1061
+ #: PelTag.php:1842
1062
+ msgid "Interoperability IFD Pointer"
1063
+ msgstr "Pointeur IFD d'interopérabilité"
1064
+
1065
+ #: PelTag.php:1844
1066
+ msgid "Flash Energy"
1067
+ msgstr "Puissance du flash"
1068
+
1069
+ #: PelTag.php:1846
1070
+ msgid "Spatial Frequency Response"
1071
+ msgstr ""
1072
+
1073
+ #: PelTag.php:1848
1074
+ msgid "Focal Plane x-Resolution"
1075
+ msgstr "Résolution X du plan focal"
1076
+
1077
+ #: PelTag.php:1850
1078
+ msgid "Focal Plane y-Resolution"
1079
+ msgstr "Résolution Y du plan focal"
1080
+
1081
+ #: PelTag.php:1852
1082
+ msgid "Focal Plane Resolution Unit"
1083
+ msgstr "Unité de résolution du plan focal"
1084
+
1085
+ #: PelTag.php:1854
1086
+ msgid "Subject Location"
1087
+ msgstr "Emplacement du sujet"
1088
+
1089
+ #: PelTag.php:1856
1090
+ msgid "Exposure index"
1091
+ msgstr "Index d'exposition"
1092
+
1093
+ #: PelTag.php:1858
1094
+ msgid "Sensing Method"
1095
+ msgstr "Méthode de captation"
1096
+
1097
+ #: PelTag.php:1860
1098
+ msgid "File Source"
1099
+ msgstr "Source du fichier"
1100
+
1101
+ #: PelTag.php:1862
1102
+ msgid "Scene Type"
1103
+ msgstr "Type de scène"
1104
+
1105
+ #: PelTag.php:1864
1106
+ msgid "Subject Area"
1107
+ msgstr "Aire du sujet"
1108
+
1109
+ #: PelTag.php:1866
1110
+ msgid "Custom Rendered"
1111
+ msgstr "Rendu personnalisé"
1112
+
1113
+ #: PelTag.php:1868
1114
+ msgid "Exposure Mode"
1115
+ msgstr "Mode d'exposition"
1116
+
1117
+ #: PelTag.php:1870
1118
+ msgid "White Balance"
1119
+ msgstr "Balance des blancs"
1120
+
1121
+ #: PelTag.php:1872
1122
+ msgid "Digital Zoom Ratio"
1123
+ msgstr "Rapport du zoom numérique"
1124
+
1125
+ #: PelTag.php:1874
1126
+ msgid "Focal Length In 35mm Film"
1127
+ msgstr "Équivalence focale en 35mm"
1128
+
1129
+ #: PelTag.php:1876
1130
+ msgid "Scene Capture Type"
1131
+ msgstr "Type de capture de la scène"
1132
+
1133
+ #: PelTag.php:1878
1134
+ msgid "Gain Control"
1135
+ msgstr "Contrôle du gain"
1136
+
1137
+ #: PelTag.php:1880
1138
+ msgid "Contrast"
1139
+ msgstr "Contraste"
1140
+
1141
+ #: PelTag.php:1882
1142
+ msgid "Saturation"
1143
+ msgstr "Saturation"
1144
+
1145
+ #: PelTag.php:1884
1146
+ msgid "Sharpness"
1147
+ msgstr "Netteté"
1148
+
1149
+ #: PelTag.php:1886
1150
+ msgid "Device Setting Description"
1151
+ msgstr "Description des paramètres du périphérique"
1152
+
1153
+ #: PelTag.php:1888
1154
+ msgid "Subject Distance Range"
1155
+ msgstr "Échelle de distance au sujet"
1156
+
1157
+ #: PelTag.php:1890
1158
+ msgid "Image Unique ID"
1159
+ msgstr "ID unique de l'image"
1160
+
1161
+ #: PelTag.php:1892
1162
+ msgid "Gamma"
1163
+ msgstr ""
1164
+
1165
+ #: PelTag.php:1894
1166
+ msgid "Print IM"
1167
+ msgstr ""
1168
+
1169
+ #: PelTag.php:1964
1170
+ #, php-format
1171
+ msgid "Unknown Tag: 0x%04X"
1172
+ msgstr "Champ inconnu: 0x%04X"
1173
+
1174
+ #: PelTiff.php:255
1175
+ #, php-format
1176
+ msgid "Dumping TIFF data...\n"
1177
+ msgstr "Sauvegarde des données TIFF...\n"
1178
+
1179
+ #~ msgid ""
1180
+ #~ "Indicates the identification of the Interoperability rule. Use \"R98\" "
1181
+ #~ "for stating ExifR98 Rules. Four bytes used including the termination code "
1182
+ #~ "(NULL). See the separate volume of Recommended Exif Interoperability "
1183
+ #~ "Rules (ExifR98) for other tags used for ExifR98."
1184
+ #~ msgstr ""
1185
+ #~ "Indique l'identification de la règle d'interopérabilité. Utilisez \"R98\" "
1186
+ #~ "pour préciser des règles ExifR98. Quatre octets sont utilisés, incluant "
1187
+ #~ "le code de terminaison (NULL). Voyez le volume séparé des règles "
1188
+ #~ "d'interopérabilité recommandées pour exif (ExifR98) pour les autres "
1189
+ #~ "marqueurs utilisés pour ExifR98."
1190
+
1191
+ #~ msgid ""
1192
+ #~ "The number of columns of image data, equal to the number of pixels per "
1193
+ #~ "row. In JPEG compressed data a JPEG marker is used instead of this tag."
1194
+ #~ msgstr ""
1195
+ #~ "Le nombre de colonnes des données de l'image, égal au nombre de pixels "
1196
+ #~ "par ligne. Dans des données compressées en JPEG un marqueur JPEG est "
1197
+ #~ "utilisé à la place de ce marqueur."
1198
+
1199
+ #~ msgid ""
1200
+ #~ "The number of rows of image data. In JPEG compressed data a JPEG marker "
1201
+ #~ "is used instead of this tag."
1202
+ #~ msgstr ""
1203
+ #~ "Le nombre de lignes des données de l'image. Dans des données compressées "
1204
+ #~ "en JPEG un marqueur JPEG est utilisé à la place de ce marqueur."
1205
+
1206
+ #~ msgid ""
1207
+ #~ "The number of bits per image component. In this standard each component "
1208
+ #~ "of the image is 8 bits, so the value for this tag is 8. See also "
1209
+ #~ "<SamplesPerPixel>. In JPEG compressed data a JPEG marker is used instead "
1210
+ #~ "of this tag."
1211
+ #~ msgstr ""
1212
+ #~ "Le nombre de bits par composant d'image. Dans ce standard chaque "
1213
+ #~ "composant de l'image fait 8 bits, donc la valeur de ce tag est 8. Voyez "
1214
+ #~ "aussi <SamplesPerPixel>. Dans des données compressées en JPEG un marqueur "
1215
+ #~ "JPEG est utilisé à la place de ce marqueur."
1216
+
1217
+ #~ msgid ""
1218
+ #~ "The compression scheme used for the image data. When a primary image is "
1219
+ #~ "JPEG compressed, this designation is not necessary and is omitted. When "
1220
+ #~ "thumbnails use JPEG compression, this tag value is set to 6."
1221
+ #~ msgstr ""
1222
+ #~ "Le schéma de compression utilisé par les données de l'image. Quand une "
1223
+ #~ "image primaire est compressée en JPEG, cette désignation n'est pas "
1224
+ #~ "nécessaire et est omise. Lorsque les vignettes utilisent la compression "
1225
+ #~ "JPEG, la valeur de ce marqueur est de 6."
1226
+
1227
+ #~ msgid ""
1228
+ #~ "The pixel composition. In JPEG compressed data a JPEG marker is used "
1229
+ #~ "instead of this tag."
1230
+ #~ msgstr ""
1231
+ #~ "La composition des pixels. Dans des données compressées en JPEG un "
1232
+ #~ "marqueur JPEG est utilisé à la place de ce marqueur."
1233
+
1234
+ #~ msgid ""
1235
+ #~ "A character string giving the title of the image. It may be a comment "
1236
+ #~ "such as \"1988 company picnic\" or the like. Two-bytes character codes "
1237
+ #~ "cannot be used. When a 2-bytes code is necessary, the Exif Private tag "
1238
+ #~ "<UserComment> is to be used."
1239
+ #~ msgstr ""
1240
+ #~ "Une chaîne de caractères donnant le titre de l'image. Ce peut être un "
1241
+ #~ "commentaire comme \"pique-nique société 1988\" ou approchant. Les codes "
1242
+ #~ "de caractères sur deux octets ne peuvent être utilisés. Lorsqu'un code "
1243
+ #~ "deux octets est nécessaire, le marqueur privé exif <UserComment> doit "
1244
+ #~ "être utilisé."
1245
+
1246
+ #~ msgid ""
1247
+ #~ "The manufacturer of the recording equipment. This is the manufacturer of "
1248
+ #~ "the DSC, scanner, video digitizer or other equipment that generated the "
1249
+ #~ "image. When the field is left blank, it is treated as unknown."
1250
+ #~ msgstr ""
1251
+ #~ "Le constructeur de l'équipement d'enregistrement. C'est le constructeur "
1252
+ #~ "du DSC, scanner, enregistreur vidéo ou tout autre équipement ayant généré "
1253
+ #~ "l'image. Quand ce champ est vide, il est traité en tant qu'inconnu."
1254
+
1255
+ #~ msgid ""
1256
+ #~ "The model name or model number of the equipment. This is the model name "
1257
+ #~ "or number of the DSC, scanner, video digitizer or other equipment that "
1258
+ #~ "generated the image. When the field is left blank, it is treated as "
1259
+ #~ "unknown."
1260
+ #~ msgstr ""
1261
+ #~ "Le nom du modèle ou le numéro du modèle de l'équipement. C'est le nom du "
1262
+ #~ "modèlé ou le numéro du DSC, scanner, enregistreur vidéo ou tout autre "
1263
+ #~ "équipement ayant généré l'image. Quand ce champ est vide, il est traité "
1264
+ #~ "en tant qu'inconnu."
1265
+
1266
+ #~ msgid "The image orientation viewed in terms of rows and columns."
1267
+ #~ msgstr "L'orientation de l'image vue en terme de lignes et colonnes."
1268
+
1269
+ #~ msgid ""
1270
+ #~ "The number of components per pixel. Since this standard applies to RGB "
1271
+ #~ "and YCbCr images, the value set for this tag is 3. In JPEG compressed "
1272
+ #~ "data a JPEG marker is used instead of this tag."
1273
+ #~ msgstr ""
1274
+ #~ "Le nombre de composants par pixel. Puisque le standard s'applique aux "
1275
+ #~ "images RGB et YCbCr, la valeur de ce marqueur est 3. Dans des données "
1276
+ #~ "compressées en JPEG un marqueur JPEG est utilisé à la place de ce "
1277
+ #~ "marqueur."
1278
+
1279
+ #~ msgid ""
1280
+ #~ "The number of pixels per <ResolutionUnit> in the <ImageWidth> direction. "
1281
+ #~ "When the image resolution is unknown, 72 [dpi] is designated."
1282
+ #~ msgstr ""
1283
+ #~ "Le nombre de pixels par <ResolutionUnit> dans la direction <ImageWidth>."
1284
+ #~ "Lorsque la résolution de l'image est inconnu, 72 [dpi] sont utilisés."
1285
+
1286
+ #~ msgid ""
1287
+ #~ "The number of pixels per <ResolutionUnit> in the <ImageLength> direction. "
1288
+ #~ "The same value as <XResolution> is designated."
1289
+ #~ msgstr ""
1290
+ #~ "Le nombre de pixels par <ResolutionUnit> dans la direction <ImageLength>."
1291
+ #~ "La même valeur que pour <XResolution> est utilisée."
1292
+
1293
+ #~ msgid ""
1294
+ #~ "The unit for measuring <XResolution> and <YResolution>. The same unit is "
1295
+ #~ "used for both <XResolution> and <YResolution>. If the image resolution is "
1296
+ #~ "unknown, 2 (inches) is designated."
1297
+ #~ msgstr ""
1298
+ #~ "L'unité de mesure pour <XResolution> et <YResolution>. La même unité est "
1299
+ #~ "utilisée pour <XResolution> et <YResolution>. Si la résolution de l'image "
1300
+ #~ "est inconnue, 2 (pouces) sont utilisées."
1301
+
1302
+ #~ msgid ""
1303
+ #~ "A transfer function for the image, described in tabular style. Normally "
1304
+ #~ "this tag is not necessary, since color space is specified in the color "
1305
+ #~ "space information tag (<ColorSpace>)."
1306
+ #~ msgstr ""
1307
+ #~ "Une fonction de transfert pour l'image, décrite en style tableau. "
1308
+ #~ "Normalement, ce marqueur n'est pas nécessaire, puisque l'espace des "
1309
+ #~ "couleurs est spécifié dans le marqueur d'information sur l'espace des "
1310
+ #~ "couleurs (<ColorSpace>)."
1311
+
1312
+ #~ msgid ""
1313
+ #~ "This tag records the name and version of the software or firmware of the "
1314
+ #~ "camera or image input device used to generate the image. The detailed "
1315
+ #~ "format is not specified, but it is recommended that the example shown "
1316
+ #~ "below be followed. When the field is left blank, it is treated as unknown."
1317
+ #~ msgstr ""
1318
+ #~ "Ce marqueur enregistre le nom et la version du logiciel ou du matériel de "
1319
+ #~ "l'appareil ou du périphérique d'entrée utilisé pour générer l'image. Le "
1320
+ #~ "format détaillé n'est pas spécifié, mais il est recommandé que l'exemple "
1321
+ #~ "ci-dessous soit suivi. Lorsque le champ est vide, il est traité comme "
1322
+ #~ "inconnu."
1323
+
1324
+ #~ msgid ""
1325
+ #~ "The date and time of image creation. In this standard (Exif-2.1) it is "
1326
+ #~ "the date and time the file was changed."
1327
+ #~ msgstr ""
1328
+ #~ "La date et l'heure de création de l'image. Dans ce standard (Exif-2.1) il "
1329
+ #~ "s'agit de la date et de l'heure de modification du fichier."
1330
+
1331
+ #~ msgid ""
1332
+ #~ "This tag records the name of the camera owner, photographer or image "
1333
+ #~ "creator. The detailed format is not specified, but it is recommended that "
1334
+ #~ "the information be written as in the example below for ease of "
1335
+ #~ "Interoperability. When the field is left blank, it is treated as unknown."
1336
+ #~ msgstr ""
1337
+ #~ "Ce marqueur enregistre le nom du propriétaire de l'appareil, du "
1338
+ #~ "photographe ou du créateur de l'image. Le format détaillé n'est pas "
1339
+ #~ "spécifié, mais il est recommandé que cette information soit écrite comme "
1340
+ #~ "dans l'exemple ci-dessous pour faciliter l'interopérabilité. Lorsque le "
1341
+ #~ "champ est laissé blanc, il est considéré comme inconnu."
1342
+
1343
+ #~ msgid ""
1344
+ #~ "The chromaticity of the white point of the image. Normally this tag is "
1345
+ #~ "not necessary, since color space is specified in the colorspace "
1346
+ #~ "information tag (<ColorSpace>)."
1347
+ #~ msgstr ""
1348
+ #~ "Une fonction de transfert pour l'image, décrite en style tableau. "
1349
+ #~ "Normalement, ce marqueur n'est pas nécessaire, puisque l'espace des "
1350
+ #~ "couleurs est spécifié dans le marqueur d'information sur l'espace des "
1351
+ #~ "couleurs (<ColorSpace>)."
1352
+
1353
+ #~ msgid ""
1354
+ #~ "The chromaticity of the three primary colors of the image. Normally this "
1355
+ #~ "tag is not necessary, since colorspace is specified in the colorspace "
1356
+ #~ "information tag (<ColorSpace>)."
1357
+ #~ msgstr ""
1358
+ #~ "Une fonction de transfert pour l'image, décrite en style tableau. "
1359
+ #~ "Normalement, ce marqueur n'est pas nécessaire, puisque l'espace des "
1360
+ #~ "couleurs est spécifié dans le marqueur d'information sur l'espace des "
1361
+ #~ "couleurs (<ColorSpace>)."
1362
+
1363
+ #~ msgid ""
1364
+ #~ "The number of bytes of JPEG compressed thumbnail data. This is not used "
1365
+ #~ "for primary image JPEG data. JPEG thumbnails are not divided but are "
1366
+ #~ "recorded as a continuous JPEG bitstream from SOI to EOI. Appn and COM "
1367
+ #~ "markers should not be recorded. Compressed thumbnails must be recorded in "
1368
+ #~ "no more than 64 Kbytes, including all other data to be recorded in APP1."
1369
+ #~ msgstr ""
1370
+ #~ "Le nombre d'octets de données des vignettes compressées JPEG. Ce n'est "
1371
+ #~ "pas utilisé pour les données des images JPEG primaires. Les vignettes "
1372
+ #~ "JPEG ne sont pas divisées mais sont enregistrées sous la forme d'un flux "
1373
+ #~ "continu JPEG de SOI à EOI. Les marqueurs Appn et COM ne doivent pas être "
1374
+ #~ "enregistrés. Les vignettes compressées doivent être enregistrées dans "
1375
+ #~ "moins de 64 kilo-octets, incluant toutes les autres données devant être "
1376
+ #~ "enregistrées dans APP1."
1377
+
1378
+ #~ msgid ""
1379
+ #~ "The matrix coefficients for transformation from RGB to YCbCr image data. "
1380
+ #~ "No default is given in TIFF; but here the value given in Appendix E, "
1381
+ #~ "\"Color Space Guidelines\", is used as the default. The color space is "
1382
+ #~ "declared in a color space information tag, with the default being the "
1383
+ #~ "value that gives the optimal image characteristics Interoperability this "
1384
+ #~ "condition."
1385
+ #~ msgstr ""
1386
+ #~ "La valeur de référence des points noir et blanc. Nul défaut n'est donné "
1387
+ #~ "en TIFF, mais les valeurs ci-dessous sont données comme défauts ici. "
1388
+ #~ "L'espace des couleurs est déclaré dans le marqueur d'informations de "
1389
+ #~ "l'espace des couleurs, avec la valeur par défaut étant celle donnant les "
1390
+ #~ "caractéristiques optimales de l'image dans ces conditions."
1391
+
1392
+ #~ msgid ""
1393
+ #~ "The reference black point value and reference white point value. No "
1394
+ #~ "defaults are given in TIFF, but the values below are given as defaults "
1395
+ #~ "here. The color space is declared in a color space information tag, with "
1396
+ #~ "the default being the value that gives the optimal image characteristics "
1397
+ #~ "Interoperability these conditions."
1398
+ #~ msgstr ""
1399
+ #~ "La valeur de référence des points noir et blanc. Nul défaut n'est donné "
1400
+ #~ "en TIFF, mais les valeurs ci-dessous sont données comme défauts ici. "
1401
+ #~ "L'espace des couleurs est déclaré dans le marqueur d'informations de "
1402
+ #~ "l'espace des couleurs, avec la valeur par défaut étant celle donnant les "
1403
+ #~ "caractéristiques optimales de l'image dans ces conditions."
1404
+
1405
+ #~ msgid "Exposure time, given in seconds (sec)."
1406
+ #~ msgstr "Temps d'exposition, en secondes (sec)."
1407
+
1408
+ #~ msgid "The F number."
1409
+ #~ msgstr "Le nombre F."
1410
+
1411
+ #~ msgid ""
1412
+ #~ "The class of the program used by the camera to set exposure when the "
1413
+ #~ "picture is taken."
1414
+ #~ msgstr ""
1415
+ #~ "La classe du programme utilisé par l'appareil pour configurer "
1416
+ #~ "l'exposition lorsque la photo a été prise."
1417
+
1418
+ #~ msgid ""
1419
+ #~ "The date and time when the original image data was generated. For a "
1420
+ #~ "digital still camera the date and time the picture was taken are recorded."
1421
+ #~ msgstr ""
1422
+ #~ "La date et l'heure de création de l'image. Dans ce standard (Exif-2.1) il "
1423
+ #~ "s'agit de la date et de l'heure de modification du fichier."
1424
+
1425
+ #~ msgid "The date and time when the image was stored as digital data. "
1426
+ #~ msgstr "La date et l'heure où l'image a été sauvée sous forme digitale."
1427
+
1428
+ #~ msgid "The lens aperture. The unit is the APEX value."
1429
+ #~ msgstr "Ouverture de la lentille. L'unité est la valeur APEX."
1430
+
1431
+ #~ msgid "The distance to the subject, given in meters."
1432
+ #~ msgstr "La distance au sujet, donnée en mètres."
1433
+
1434
+ #~ msgid "The metering mode."
1435
+ #~ msgstr "Le mode de mesure."
1436
+
1437
+ #~ msgid "The kind of light source."
1438
+ #~ msgstr "Le type de source lumineuse."
1439
+
1440
+ #~ msgid ""
1441
+ #~ "A tag for manufacturers of Exif writers to record any desired "
1442
+ #~ "information. The contents are up to the manufacturer."
1443
+ #~ msgstr ""
1444
+ #~ "Un marqueur pour les constructeurs des logiciels d'écriture Exif pour "
1445
+ #~ "noter une information désirée. Le contenu dépend du constructeur."
1446
+
1447
+ #~ msgid "A tag used to record fractions of seconds for the <DateTime> tag."
1448
+ #~ msgstr ""
1449
+ #~ "Marqueur utilisé pour enregistrer des fractions de secondes pour le "
1450
+ #~ "marqueur <DateTime>."
1451
+
1452
+ #~ msgid ""
1453
+ #~ "A tag used to record fractions of seconds for the <DateTimeOriginal> tag."
1454
+ #~ msgstr ""
1455
+ #~ "Marqueur utilisé pour enregistrer des fractions de secondes pour le "
1456
+ #~ "marqueur <DateTimeOriginal>."
1457
+
1458
+ #~ msgid ""
1459
+ #~ "A tag used to record fractions of seconds for the <DateTimeDigitized> tag."
1460
+ #~ msgstr ""
1461
+ #~ "Marqueur utilisé pour enregistrer des fractions de secondes pour le "
1462
+ #~ "marqueur <DateTimeDigitized>."
1463
+
1464
+ #~ msgid ""
1465
+ #~ "Indicates the number of pixels in the image width (X) direction per "
1466
+ #~ "<FocalPlaneResolutionUnit> on the camera focal plane."
1467
+ #~ msgstr ""
1468
+ #~ "Indique le nombre de pixels de largeur (X) de l'image par "
1469
+ #~ "<FocalPlaneResolutionUnit> sur le plan focal de l'appareil."
1470
+
1471
+ #~ msgid ""
1472
+ #~ "Indicates the number of pixels in the image height (V) direction per "
1473
+ #~ "<FocalPlaneResolutionUnit> on the camera focal plane."
1474
+ #~ msgstr ""
1475
+ #~ "Indique le nombre de pixels de hauteur (Y) de l'image par "
1476
+ #~ "<FocalPlaneResolutionUnit> sur le plan focal de l'appareil."
1477
+
1478
+ #~ msgid ""
1479
+ #~ "Indicates the unit for measuring <FocalPlaneXResolution> and "
1480
+ #~ "<FocalPlaneYResolution>. This value is the same as the <ResolutionUnit>."
1481
+ #~ msgstr ""
1482
+ #~ "Indique l'unité de mesure de <FocalPlaneXResolution> et de "
1483
+ #~ "<FocalPlaneYResolution>. Cette valeur est la même que <ResolutionUnit>."
1484
+
1485
+ #~ msgid ""
1486
+ #~ "Indicates the image source. If a DSC recorded the image, this tag value "
1487
+ #~ "of this tag always be set to 3, indicating that the image was recorded on "
1488
+ #~ "a DSC."
1489
+ #~ msgstr ""
1490
+ #~ "Indique la source de l'image. Si un DSC a enregistré l'image, la valeur "
1491
+ #~ "de ce marqueur doit toujours être de 3, indiquant que l'image a été "
1492
+ #~ "directement photographiée."
1493
+
1494
+ #~ msgid ""
1495
+ #~ "Indicates the type of scene. If a DSC recorded the image, this tag value "
1496
+ #~ "must always be set to 1, indicating that the image was directly "
1497
+ #~ "photographed."
1498
+ #~ msgstr ""
1499
+ #~ "Indique le type de scène. Si un DSC a enregistré l'image, la valeur de ce "
1500
+ #~ "marqueur doit toujours être de 1, indiquant que l'image a été directement "
1501
+ #~ "photographiée."
1502
+
1503
+ #~ msgid ""
1504
+ #~ "This tag indicates the location and area of the main subject in the "
1505
+ #~ "overall scene."
1506
+ #~ msgstr ""
1507
+ #~ "Ce marqueur indique l'emplacement et l'aire du sujet principal dans la "
1508
+ #~ "scène générale."
1509
+
1510
+ #~ msgid ""
1511
+ #~ "This tag indicates the white balance mode set when the image was shot."
1512
+ #~ msgstr ""
1513
+ #~ "Ce marqueur indique le mode de balance des blancs positionné lorsque "
1514
+ #~ "l'image a été enregistrée."
1515
+
1516
+ #~ msgid ""
1517
+ #~ "This tag indicates the digital zoom ratio when the image was shot. If the "
1518
+ #~ "numerator of the recorded value is 0, this indicates that digital zoom "
1519
+ #~ "was not used."
1520
+ #~ msgstr ""
1521
+ #~ "Ce marqueur indique la valeur du zoom numérique lorsque l'image a été "
1522
+ #~ "prise.Si le numérateur de la valeur enregistrée est 0, celà signifie que "
1523
+ #~ "le zoom numérique n'a pas été utilisé."
1524
+
1525
+ #~ msgid ""
1526
+ #~ "This tag indicates the equivalent focal length assuming a 35mm film "
1527
+ #~ "camera, in mm. A value of 0 means the focal length is unknown. Note that "
1528
+ #~ "this tag differs from the FocalLength tag."
1529
+ #~ msgstr ""
1530
+ #~ "Ce marqueur indique la longueur focale équivalente en assumant un "
1531
+ #~ "appareil avec un film de 35mm, en mm. Une valeur de 0 indique que la "
1532
+ #~ "longueur focale est inconnue. Notez que ce marqueur est différent du "
1533
+ #~ "marqueur FocalLength."
1534
+
1535
+ #~ msgid "This tag indicates the degree of overall image gain adjustment."
1536
+ #~ msgstr ""
1537
+ #~ "Ce marqueur indique le degré général d'ajustement du gain de l'image."
1538
+
1539
+ #~ msgid ""
1540
+ #~ "This tag indicates information on the picture-taking conditions of a "
1541
+ #~ "particular camera model. The tag is used only to indicate the picture-"
1542
+ #~ "taking conditions in the reader."
1543
+ #~ msgstr ""
1544
+ #~ "Ce marqueur indique les informations sur les conditions lors de la prise "
1545
+ #~ "de vue pour un modèle particulier d'appareil. Ce marqueur n'est utilisé "
1546
+ #~ "que pour indiquer les paramètres de prise de vue au lecteur."
1547
+
1548
+ #~ msgid "This tag indicates the distance to the subject."
1549
+ #~ msgstr "Ce marqueur indique la distance au sujet."
1550
+
1551
+ #~ msgid ""
1552
+ #~ "This tag indicates an identifier assigned uniquely to each image. It is "
1553
+ #~ "recorded as an ASCII string equivalent to hexadecimal notation and 128-"
1554
+ #~ "bit fixed length."
1555
+ #~ msgstr ""
1556
+ #~ "Ce marqueur indique un identificateur unique assigné à chaque image. Il "
1557
+ #~ "est enregistré sous la forme d'une chaîne ASCII équivalente à la notation "
1558
+ #~ "hexadécimale et d'une longueur fixe de 128 bits."
1559
+
1560
+ #, fuzzy
1561
+ #~ msgid "Indicates the distance to the destination point."
1562
+ #~ msgstr "Ce marqueur indique la distance au sujet."
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/ja.po ADDED
@@ -0,0 +1,1190 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Japanese translation for the PHP Exif Library (PEL).
2
+ # Copyright (C) 2006 Martin Geisler
3
+ # This file is distributed under the term of the GPL.
4
+ # Tadashi Jokagi <elf2000@users.sourceforge.net>, 2005.
5
+ #
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PEL\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2006-11-19 20:48+0100\n"
11
+ "PO-Revision-Date: 2006-01-11 19:08+0100\n"
12
+ "Last-Translator: Tadashi Jokagi <elf2000@users.sourceforge.net>\n"
13
+ "Language-Team: Japanese\n"
14
+ "MIME-Version: 1.0\n"
15
+ "Content-Type: text/plain; charset=UTF-8\n"
16
+ "Content-Transfer-Encoding: 8bit\n"
17
+
18
+ #: PelDataWindow.php:517
19
+ #, php-format
20
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
21
+ msgstr ""
22
+
23
+ #: PelEntryAscii.php:465
24
+ msgid "(Photographer)"
25
+ msgstr "(写真家)"
26
+
27
+ #: PelEntryAscii.php:466
28
+ msgid "(Editor)"
29
+ msgstr "(エディタ)"
30
+
31
+ #: PelEntry.php:369
32
+ #, php-format
33
+ msgid " Tag: 0x%04X (%s)\n"
34
+ msgstr " タグ: 0x%04X (%s)\n"
35
+
36
+ #: PelEntry.php:371
37
+ #, php-format
38
+ msgid " Format : %d (%s)\n"
39
+ msgstr " 形式 : %d (%s)\n"
40
+
41
+ #: PelEntry.php:373
42
+ #, php-format
43
+ msgid " Components: %d\n"
44
+ msgstr "コンポーネント: %d\n"
45
+
46
+ #: PelEntry.php:376
47
+ #, php-format
48
+ msgid " Value : %s\n"
49
+ msgstr " 値 : %s\n"
50
+
51
+ #: PelEntry.php:377
52
+ #, php-format
53
+ msgid " Text : %s\n"
54
+ msgstr " テキスト : %s\n"
55
+
56
+ #: PelEntryRational.php:136 PelEntryRational.php:141
57
+ #, php-format
58
+ msgid "f/%.01f"
59
+ msgstr "f/%.01f"
60
+
61
+ #: PelEntryRational.php:146
62
+ #, php-format
63
+ msgid "%.1f mm"
64
+ msgstr "%.1f mm"
65
+
66
+ #: PelEntryRational.php:151
67
+ #, php-format
68
+ msgid "%.1f m"
69
+ msgstr "%.1f m"
70
+
71
+ #: PelEntryRational.php:157
72
+ #, php-format
73
+ msgid "1/%d sec."
74
+ msgstr "1/%d 秒"
75
+
76
+ #: PelEntryRational.php:159
77
+ #, php-format
78
+ msgid "%d sec."
79
+ msgstr "$d 秒"
80
+
81
+ #: PelEntryRational.php:267
82
+ #, php-format
83
+ msgid "%.0f/%.0f sec. (APEX: %d)"
84
+ msgstr "%.0f/%.0f 秒 (APEX: %d)"
85
+
86
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
87
+ msgid "Unknown"
88
+ msgstr "不明"
89
+
90
+ #: PelEntryShort.php:144
91
+ msgid "Average"
92
+ msgstr "平均"
93
+
94
+ #: PelEntryShort.php:146
95
+ msgid "Center-Weighted Average"
96
+ msgstr ""
97
+
98
+ #: PelEntryShort.php:148
99
+ msgid "Spot"
100
+ msgstr "スポット"
101
+
102
+ #: PelEntryShort.php:150
103
+ msgid "Multi Spot"
104
+ msgstr "マルチスポット"
105
+
106
+ #: PelEntryShort.php:152
107
+ msgid "Pattern"
108
+ msgstr "パターン"
109
+
110
+ #: PelEntryShort.php:154
111
+ msgid "Partial"
112
+ msgstr "部分"
113
+
114
+ #: PelEntryShort.php:156 PelEntryShort.php:247
115
+ msgid "Other"
116
+ msgstr "その他"
117
+
118
+ #: PelEntryShort.php:165
119
+ msgid "Uncompressed"
120
+ msgstr "未圧縮"
121
+
122
+ #: PelEntryShort.php:167
123
+ msgid "JPEG compression"
124
+ msgstr "JPEG 圧縮"
125
+
126
+ #: PelEntryShort.php:177
127
+ msgid "chunky format"
128
+ msgstr ""
129
+
130
+ #: PelEntryShort.php:179
131
+ msgid "planar format"
132
+ msgstr ""
133
+
134
+ #: PelEntryShort.php:188 PelEntryShort.php:268
135
+ msgid "Not defined"
136
+ msgstr "定義されていません"
137
+
138
+ #: PelEntryShort.php:190
139
+ msgid "One-chip color area sensor"
140
+ msgstr "1 チップ色エリアセンサー"
141
+
142
+ #: PelEntryShort.php:192
143
+ msgid "Two-chip color area sensor"
144
+ msgstr "2 チップ色エリアセンサー"
145
+
146
+ #: PelEntryShort.php:194
147
+ msgid "Three-chip color area sensor"
148
+ msgstr "3 チップ色エリアセンサー"
149
+
150
+ #: PelEntryShort.php:196
151
+ msgid "Color sequential area sensor"
152
+ msgstr ""
153
+
154
+ #: PelEntryShort.php:198
155
+ msgid "Trilinear sensor"
156
+ msgstr ""
157
+
158
+ #: PelEntryShort.php:200
159
+ msgid "Color sequential linear sensor"
160
+ msgstr ""
161
+
162
+ #: PelEntryShort.php:211
163
+ msgid "Daylight"
164
+ msgstr "昼光"
165
+
166
+ #: PelEntryShort.php:213
167
+ msgid "Fluorescent"
168
+ msgstr "蛍光"
169
+
170
+ #: PelEntryShort.php:215
171
+ msgid "Tungsten (incandescent light)"
172
+ msgstr "タングステン(白熱光)"
173
+
174
+ #: PelEntryShort.php:217 PelTag.php:1808
175
+ msgid "Flash"
176
+ msgstr "フラッシュ"
177
+
178
+ #: PelEntryShort.php:219
179
+ msgid "Fine weather"
180
+ msgstr "晴天"
181
+
182
+ #: PelEntryShort.php:221
183
+ msgid "Cloudy weather"
184
+ msgstr "曇天"
185
+
186
+ #: PelEntryShort.php:223
187
+ msgid "Shade"
188
+ msgstr "影"
189
+
190
+ #: PelEntryShort.php:225
191
+ msgid "Daylight fluorescent"
192
+ msgstr "昼光蛍光"
193
+
194
+ #: PelEntryShort.php:227
195
+ msgid "Day white fluorescent"
196
+ msgstr ""
197
+
198
+ #: PelEntryShort.php:229
199
+ msgid "Cool white fluorescent"
200
+ msgstr ""
201
+
202
+ #: PelEntryShort.php:231
203
+ msgid "White fluorescent"
204
+ msgstr "白蛍光"
205
+
206
+ #: PelEntryShort.php:233
207
+ msgid "Standard light A"
208
+ msgstr "標準ライト A"
209
+
210
+ #: PelEntryShort.php:235
211
+ msgid "Standard light B"
212
+ msgstr "標準ライト B"
213
+
214
+ #: PelEntryShort.php:237
215
+ msgid "Standard light C"
216
+ msgstr "標準ライト C"
217
+
218
+ #: PelEntryShort.php:239
219
+ msgid "D55"
220
+ msgstr "D55"
221
+
222
+ #: PelEntryShort.php:241
223
+ msgid "D65"
224
+ msgstr "D65"
225
+
226
+ #: PelEntryShort.php:243
227
+ msgid "D75"
228
+ msgstr "D75"
229
+
230
+ #: PelEntryShort.php:245
231
+ msgid "ISO studio tungsten"
232
+ msgstr "ISO スタジオタングステン"
233
+
234
+ #: PelEntryShort.php:257
235
+ msgid "Inch"
236
+ msgstr "インチ"
237
+
238
+ #: PelEntryShort.php:259
239
+ msgid "Centimeter"
240
+ msgstr "センチメートル"
241
+
242
+ #: PelEntryShort.php:270
243
+ msgid "Manual"
244
+ msgstr "マニュアル"
245
+
246
+ #: PelEntryShort.php:272
247
+ msgid "Normal program"
248
+ msgstr "通常プログラム"
249
+
250
+ #: PelEntryShort.php:274
251
+ msgid "Aperture priority"
252
+ msgstr "口径優先度"
253
+
254
+ #: PelEntryShort.php:276
255
+ msgid "Shutter priority"
256
+ msgstr "シャッター優先度"
257
+
258
+ #: PelEntryShort.php:278
259
+ msgid "Creative program (biased toward depth of field)"
260
+ msgstr ""
261
+
262
+ #: PelEntryShort.php:280
263
+ msgid "Action program (biased toward fast shutter speed)"
264
+ msgstr ""
265
+
266
+ #: PelEntryShort.php:282
267
+ msgid "Portrait mode (for closeup photos with the background out of focus"
268
+ msgstr ""
269
+
270
+ #: PelEntryShort.php:284
271
+ msgid "Landscape mode (for landscape photos with the background in focus"
272
+ msgstr ""
273
+
274
+ #: PelEntryShort.php:293
275
+ msgid "top - left"
276
+ msgstr "上 - 左"
277
+
278
+ #: PelEntryShort.php:295
279
+ msgid "top - right"
280
+ msgstr "上 - 右"
281
+
282
+ #: PelEntryShort.php:297
283
+ msgid "bottom - right"
284
+ msgstr "下 - 右"
285
+
286
+ #: PelEntryShort.php:299
287
+ msgid "bottom - left"
288
+ msgstr "下 - 左"
289
+
290
+ #: PelEntryShort.php:301
291
+ msgid "left - top"
292
+ msgstr "左 - 上"
293
+
294
+ #: PelEntryShort.php:303
295
+ msgid "right - top"
296
+ msgstr "右 - 上"
297
+
298
+ #: PelEntryShort.php:305
299
+ msgid "right - bottom"
300
+ msgstr "右 - 下"
301
+
302
+ #: PelEntryShort.php:307
303
+ msgid "left - bottom"
304
+ msgstr "左 - 下"
305
+
306
+ #: PelEntryShort.php:316
307
+ msgid "centered"
308
+ msgstr ""
309
+
310
+ #: PelEntryShort.php:318
311
+ msgid "co-sited"
312
+ msgstr ""
313
+
314
+ #: PelEntryShort.php:351
315
+ msgid "Uncalibrated"
316
+ msgstr ""
317
+
318
+ #: PelEntryShort.php:360
319
+ msgid "Flash did not fire."
320
+ msgstr "フラッシュを発光しませんでした。"
321
+
322
+ #: PelEntryShort.php:362
323
+ msgid "Flash fired."
324
+ msgstr "フラッシュを発光しました。"
325
+
326
+ #: PelEntryShort.php:364
327
+ msgid "Strobe return light not detected."
328
+ msgstr "ストロボの光の返りを検知しませんでした。"
329
+
330
+ #: PelEntryShort.php:366
331
+ msgid "Strobe return light detected."
332
+ msgstr "ストロボの光の返りを検知しました。"
333
+
334
+ #: PelEntryShort.php:368
335
+ msgid "Flash fired, compulsory flash mode."
336
+ msgstr "フラッシュを強制フラッシュモードで発光しました。"
337
+
338
+ #: PelEntryShort.php:370
339
+ msgid "Flash fired, compulsory flash mode, return light not detected."
340
+ msgstr ""
341
+ "フラッシュを強制フラッシュモードで発光、の光の返りを検知しませんでした。"
342
+
343
+ #: PelEntryShort.php:372
344
+ msgid "Flash fired, compulsory flash mode, return light detected."
345
+ msgstr "フラッシュを強制フラッシュモードで発光、の光の返りを検知しました。"
346
+
347
+ #: PelEntryShort.php:374
348
+ msgid "Flash did not fire, compulsory flash mode."
349
+ msgstr "フラッシュを強制フラッシュモードで発光しませんでした。"
350
+
351
+ #: PelEntryShort.php:376
352
+ msgid "Flash did not fire, auto mode."
353
+ msgstr "フラッシュを自動モードで発光しませんでした。"
354
+
355
+ #: PelEntryShort.php:378
356
+ msgid "Flash fired, auto mode."
357
+ msgstr "自動モードでフラッシュを発光しました。"
358
+
359
+ #: PelEntryShort.php:380
360
+ msgid "Flash fired, auto mode, return light not detected."
361
+ msgstr "自動モードでフラッシュを発光、光の返りを検知しませんでした。"
362
+
363
+ #: PelEntryShort.php:382
364
+ msgid "Flash fired, auto mode, return light detected."
365
+ msgstr "自動モードでフラッシュを発光、光の返りを検知しました。"
366
+
367
+ #: PelEntryShort.php:384
368
+ msgid "No flash function."
369
+ msgstr "フラッシュ機能がありません。"
370
+
371
+ #: PelEntryShort.php:386
372
+ msgid "Flash fired, red-eye reduction mode."
373
+ msgstr "赤目軽減モードでフラッシュを発光しました。"
374
+
375
+ #: PelEntryShort.php:388
376
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
377
+ msgstr "赤目軽減モードでフラッシュを発光、光の返りを検知しませんでした。"
378
+
379
+ #: PelEntryShort.php:390
380
+ msgid "Flash fired, red-eye reduction mode, return light detected."
381
+ msgstr "赤目軽減モードでフラッシュを発光、光の返りを検知しました。"
382
+
383
+ #: PelEntryShort.php:392
384
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
385
+ msgstr "強制フラッシュモード、赤目軽減モードでフラッシュを発光しました。"
386
+
387
+ #: PelEntryShort.php:394
388
+ msgid ""
389
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
390
+ "detected."
391
+ msgstr ""
392
+ "強制フラッシュモード、赤目軽減モードでフラッシュを発光、光の返りを検知しませ"
393
+ "んでした。"
394
+
395
+ #: PelEntryShort.php:396
396
+ msgid ""
397
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
398
+ "detected."
399
+ msgstr ""
400
+ "強制フラッシュモード、赤目軽減モードでフラッシュを発光、光の返りを検知しまし"
401
+ "た。"
402
+
403
+ #: PelEntryShort.php:398
404
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
405
+ msgstr "赤目軽減モード、自動モードでフラッシュを発光しませんでした。"
406
+
407
+ #: PelEntryShort.php:400
408
+ msgid "Flash fired, auto mode, red-eye reduction mode."
409
+ msgstr "赤目軽減モード、自動モードでフラッシュを発光しました。"
410
+
411
+ #: PelEntryShort.php:402
412
+ msgid ""
413
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
414
+ msgstr ""
415
+
416
+ #: PelEntryShort.php:404
417
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
418
+ msgstr ""
419
+
420
+ #: PelEntryShort.php:413
421
+ msgid "Normal process"
422
+ msgstr "通常処理"
423
+
424
+ #: PelEntryShort.php:415
425
+ msgid "Custom process"
426
+ msgstr "カスタム処理"
427
+
428
+ #: PelEntryShort.php:424
429
+ msgid "Auto exposure"
430
+ msgstr "自動露出"
431
+
432
+ #: PelEntryShort.php:426
433
+ msgid "Manual exposure"
434
+ msgstr "マニュアル露出"
435
+
436
+ #: PelEntryShort.php:428
437
+ msgid "Auto bracket"
438
+ msgstr "自動ブラケット"
439
+
440
+ #: PelEntryShort.php:437
441
+ msgid "Auto white balance"
442
+ msgstr "自動ホワイトバランス"
443
+
444
+ #: PelEntryShort.php:439
445
+ msgid "Manual white balance"
446
+ msgstr "マニュアルホワイトバランス"
447
+
448
+ #: PelEntryShort.php:448
449
+ msgid "Standard"
450
+ msgstr "標準"
451
+
452
+ #: PelEntryShort.php:450
453
+ msgid "Landscape"
454
+ msgstr "ランドスケープ"
455
+
456
+ #: PelEntryShort.php:452
457
+ msgid "Portrait"
458
+ msgstr "ポートレイト"
459
+
460
+ #: PelEntryShort.php:454
461
+ msgid "Night scene"
462
+ msgstr "ナイトシーン"
463
+
464
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
465
+ msgid "Normal"
466
+ msgstr "通常"
467
+
468
+ #: PelEntryShort.php:465
469
+ msgid "Low gain up"
470
+ msgstr "ローゲインをアップ"
471
+
472
+ #: PelEntryShort.php:467
473
+ msgid "High gain up"
474
+ msgstr "ハイゲインをアップ"
475
+
476
+ #: PelEntryShort.php:469
477
+ msgid "Low gain down"
478
+ msgstr "ローゲインをダウン"
479
+
480
+ #: PelEntryShort.php:471
481
+ msgid "High gain down"
482
+ msgstr "ハイゲインをダウン"
483
+
484
+ #: PelEntryShort.php:482
485
+ msgid "Low saturation"
486
+ msgstr "低い彩度"
487
+
488
+ #: PelEntryShort.php:484
489
+ msgid "High saturation"
490
+ msgstr "高い彩度"
491
+
492
+ #: PelEntryShort.php:496
493
+ msgid "Soft"
494
+ msgstr "ソフト"
495
+
496
+ #: PelEntryShort.php:498
497
+ msgid "Hard"
498
+ msgstr "ハード"
499
+
500
+ #: PelEntryShort.php:509
501
+ msgid "Macro"
502
+ msgstr "マクロ"
503
+
504
+ #: PelEntryShort.php:511
505
+ msgid "Close view"
506
+ msgstr "接写"
507
+
508
+ #: PelEntryShort.php:513
509
+ msgid "Distant view"
510
+ msgstr "望遠"
511
+
512
+ #: PelEntryShort.php:521
513
+ #, php-format
514
+ msgid "(x,y) = (%d,%d)"
515
+ msgstr "(x,y) = (%d,%d)"
516
+
517
+ #: PelEntryShort.php:523
518
+ #, php-format
519
+ msgid "Within distance %d of (x,y) = (%d,%d)"
520
+ msgstr ""
521
+
522
+ #: PelEntryShort.php:526
523
+ #, php-format
524
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
525
+ msgstr ""
526
+
527
+ #: PelEntryShort.php:531
528
+ #, php-format
529
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
530
+ msgstr ""
531
+
532
+ #: PelEntryUndefined.php:390
533
+ #, php-format
534
+ msgid "Exif %s"
535
+ msgstr "EXIF %s"
536
+
537
+ #: PelEntryUndefined.php:392
538
+ #, php-format
539
+ msgid "Exif Version %s"
540
+ msgstr "EXIF バージョン %s"
541
+
542
+ #: PelEntryUndefined.php:396
543
+ #, php-format
544
+ msgid "FlashPix %s"
545
+ msgstr "FlashPix %s"
546
+
547
+ #: PelEntryUndefined.php:398
548
+ #, php-format
549
+ msgid "FlashPix Version %s"
550
+ msgstr "FlashPix バージョン %s"
551
+
552
+ #: PelEntryUndefined.php:402
553
+ #, php-format
554
+ msgid "Interoperability %s"
555
+ msgstr ""
556
+
557
+ #: PelEntryUndefined.php:404
558
+ #, php-format
559
+ msgid "Interoperability Version %s"
560
+ msgstr ""
561
+
562
+ #: PelEntryUndefined.php:410
563
+ #, php-format
564
+ msgid "Version %s"
565
+ msgstr "バージョン %s"
566
+
567
+ #: PelExif.php:169
568
+ msgid "Dumping Exif data...\n"
569
+ msgstr "EXIF データのダンプ中...\n"
570
+
571
+ #: PelFormat.php:192 PelFormat.php:220
572
+ #, php-format
573
+ msgid "Unknown format: 0x%X"
574
+ msgstr "不明の形式: 0x%X"
575
+
576
+ #: PelIfd.php:1180
577
+ #, php-format
578
+ msgid "Dumping IFD %s with %d entries...\n"
579
+ msgstr ""
580
+
581
+ #: PelIfd.php:1186
582
+ #, php-format
583
+ msgid "Dumping %d sub IFDs...\n"
584
+ msgstr ""
585
+
586
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
587
+ #, php-format
588
+ msgid "Unknown marker: 0x%02X"
589
+ msgstr "未知のマーカー: 0x%02X"
590
+
591
+ #: PelJpegMarker.php:302
592
+ msgid "Encoding (baseline)"
593
+ msgstr "エンコード (ベースライン)"
594
+
595
+ #: PelJpegMarker.php:304
596
+ msgid "Encoding (extended sequential)"
597
+ msgstr "エンコード (拡張シーケンシャル)"
598
+
599
+ #: PelJpegMarker.php:306
600
+ msgid "Encoding (progressive)"
601
+ msgstr "エンコード (プログレッシブ)"
602
+
603
+ #: PelJpegMarker.php:308
604
+ msgid "Encoding (lossless)"
605
+ msgstr "エンコード (ロスレス)"
606
+
607
+ #: PelJpegMarker.php:310
608
+ msgid "Encoding (differential sequential)"
609
+ msgstr "エンコード (微分シーケンシャル)"
610
+
611
+ #: PelJpegMarker.php:312
612
+ msgid "Encoding (differential progressive)"
613
+ msgstr "エンコード (微分プログレッシブ)"
614
+
615
+ #: PelJpegMarker.php:314
616
+ msgid "Encoding (differential lossless)"
617
+ msgstr "エンコード (微分ロスレス)"
618
+
619
+ #: PelJpegMarker.php:316
620
+ msgid "Encoding (extended sequential, arithmetic)"
621
+ msgstr ""
622
+
623
+ #: PelJpegMarker.php:318
624
+ msgid "Encoding (progressive, arithmetic)"
625
+ msgstr ""
626
+
627
+ #: PelJpegMarker.php:320
628
+ msgid "Encoding (lossless, arithmetic)"
629
+ msgstr ""
630
+
631
+ #: PelJpegMarker.php:322
632
+ msgid "Encoding (differential sequential, arithmetic)"
633
+ msgstr ""
634
+
635
+ #: PelJpegMarker.php:324
636
+ msgid "Encoding (differential progressive, arithmetic)"
637
+ msgstr ""
638
+
639
+ #: PelJpegMarker.php:326
640
+ msgid "Encoding (differential lossless, arithmetic)"
641
+ msgstr ""
642
+
643
+ #: PelJpegMarker.php:328
644
+ msgid "Start of image"
645
+ msgstr "画像の開始"
646
+
647
+ #: PelJpegMarker.php:330
648
+ msgid "End of image"
649
+ msgstr "画像の終わり"
650
+
651
+ #: PelJpegMarker.php:332
652
+ msgid "Start of scan"
653
+ msgstr "スキャンの開始"
654
+
655
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
656
+ msgid "Comment"
657
+ msgstr "コメント"
658
+
659
+ #: PelJpegMarker.php:336
660
+ msgid "Define Huffman table"
661
+ msgstr "ハフマンテーブル定義"
662
+
663
+ #: PelJpegMarker.php:338
664
+ msgid "Extension"
665
+ msgstr "拡張"
666
+
667
+ #: PelJpegMarker.php:340
668
+ msgid "Define arithmetic coding conditioning"
669
+ msgstr ""
670
+
671
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
672
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
673
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
674
+ #, php-format
675
+ msgid "Restart %d"
676
+ msgstr ""
677
+
678
+ #: PelJpegMarker.php:358
679
+ msgid "Define quantization table"
680
+ msgstr ""
681
+
682
+ #: PelJpegMarker.php:360
683
+ msgid "Define number of lines"
684
+ msgstr ""
685
+
686
+ #: PelJpegMarker.php:362
687
+ msgid "Define restart interval"
688
+ msgstr "再起動感覚の定義"
689
+
690
+ #: PelJpegMarker.php:364
691
+ msgid "Define hierarchical progression"
692
+ msgstr ""
693
+
694
+ #: PelJpegMarker.php:366
695
+ msgid "Expand reference component"
696
+ msgstr ""
697
+
698
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
699
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
700
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
701
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
702
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
703
+ #: PelJpegMarker.php:398
704
+ #, php-format
705
+ msgid "Application segment %d"
706
+ msgstr ""
707
+
708
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
709
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
710
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
711
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
712
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
713
+ #, php-format
714
+ msgid "Extension %d"
715
+ msgstr ""
716
+
717
+ #: PelJpeg.php:543
718
+ msgid "Dumping JPEG data...\n"
719
+ msgstr "JPEG データのダンプ中...\n"
720
+
721
+ #: PelJpeg.php:547
722
+ #, php-format
723
+ msgid "Section %d (marker 0x%02X - %s):\n"
724
+ msgstr "セクション %d (メーカー 0x%02X - %s):\n"
725
+
726
+ #: PelJpeg.php:549
727
+ #, php-format
728
+ msgid " Description: %s\n"
729
+ msgstr " 説明: %s\n"
730
+
731
+ #: PelJpeg.php:557
732
+ msgid " Content : Exif data\n"
733
+ msgstr " 内容 : EXIF データ\n"
734
+
735
+ #: PelJpeg.php:560
736
+ #, fuzzy, php-format
737
+ msgid " Content : %s\n"
738
+ msgstr " 内容 : 不明\n"
739
+
740
+ #: PelJpeg.php:562
741
+ msgid " Content : Unknown\n"
742
+ msgstr " 内容 : 不明\n"
743
+
744
+ #: PelTag.php:1649
745
+ #, php-format
746
+ msgid "Unknown: 0x%04X"
747
+ msgstr "不明: 0x%04X"
748
+
749
+ #: PelTag.php:1678
750
+ msgid "Interoperability Index"
751
+ msgstr ""
752
+
753
+ #: PelTag.php:1680
754
+ msgid "Interoperability Version"
755
+ msgstr ""
756
+
757
+ #: PelTag.php:1682
758
+ msgid "Image Width"
759
+ msgstr "画像の幅"
760
+
761
+ #: PelTag.php:1684
762
+ msgid "Image Length"
763
+ msgstr "画像の長さ"
764
+
765
+ #: PelTag.php:1686
766
+ msgid "Bits per Sample"
767
+ msgstr "ビット毎サンプル"
768
+
769
+ #: PelTag.php:1688
770
+ msgid "Compression"
771
+ msgstr "圧縮"
772
+
773
+ #: PelTag.php:1690
774
+ msgid "Photometric Interpretation"
775
+ msgstr ""
776
+
777
+ #: PelTag.php:1692
778
+ msgid "Fill Order"
779
+ msgstr "フィルオーダー"
780
+
781
+ #: PelTag.php:1694
782
+ msgid "Document Name"
783
+ msgstr "ドキュメント名"
784
+
785
+ #: PelTag.php:1696
786
+ msgid "Image Description"
787
+ msgstr "画像の詳細"
788
+
789
+ #: PelTag.php:1698
790
+ msgid "Manufacturer"
791
+ msgstr "メーカー"
792
+
793
+ #: PelTag.php:1700
794
+ msgid "Model"
795
+ msgstr "モデル"
796
+
797
+ #: PelTag.php:1702
798
+ msgid "Strip Offsets"
799
+ msgstr ""
800
+
801
+ #: PelTag.php:1704
802
+ msgid "Orientation"
803
+ msgstr ""
804
+
805
+ #: PelTag.php:1706
806
+ msgid "Samples per Pixel"
807
+ msgstr "サンプル毎ピクセル"
808
+
809
+ #: PelTag.php:1708
810
+ msgid "Rows per Strip"
811
+ msgstr ""
812
+
813
+ #: PelTag.php:1710
814
+ msgid "Strip Byte Count"
815
+ msgstr ""
816
+
817
+ #: PelTag.php:1712
818
+ msgid "x-Resolution"
819
+ msgstr "水平解像度"
820
+
821
+ #: PelTag.php:1714
822
+ msgid "y-Resolution"
823
+ msgstr "垂直解像度"
824
+
825
+ #: PelTag.php:1716
826
+ msgid "Planar Configuration"
827
+ msgstr ""
828
+
829
+ #: PelTag.php:1718
830
+ msgid "Resolution Unit"
831
+ msgstr "解像度の単位"
832
+
833
+ #: PelTag.php:1720
834
+ msgid "Transfer Function"
835
+ msgstr ""
836
+
837
+ #: PelTag.php:1722
838
+ msgid "Software"
839
+ msgstr "ソフトウェア"
840
+
841
+ #: PelTag.php:1724
842
+ msgid "Date and Time"
843
+ msgstr "日付と時間"
844
+
845
+ #: PelTag.php:1726
846
+ msgid "Artist"
847
+ msgstr "アーティスト"
848
+
849
+ #: PelTag.php:1728
850
+ msgid "White Point"
851
+ msgstr "ホワイトポイント"
852
+
853
+ #: PelTag.php:1730
854
+ msgid "Primary Chromaticities"
855
+ msgstr ""
856
+
857
+ #: PelTag.php:1732
858
+ msgid "Transfer Range"
859
+ msgstr ""
860
+
861
+ #: PelTag.php:1734
862
+ msgid "JPEGProc"
863
+ msgstr "JPEGProc"
864
+
865
+ #: PelTag.php:1736
866
+ msgid "JPEG Interchange Format"
867
+ msgstr ""
868
+
869
+ #: PelTag.php:1738
870
+ msgid "JPEG Interchange Format Length"
871
+ msgstr ""
872
+
873
+ #: PelTag.php:1740
874
+ msgid "YCbCr Coefficients"
875
+ msgstr "YCbCr 係数"
876
+
877
+ #: PelTag.php:1742
878
+ msgid "YCbCr Sub-Sampling"
879
+ msgstr "YCbCr サブサンプリング"
880
+
881
+ #: PelTag.php:1744
882
+ msgid "YCbCr Positioning"
883
+ msgstr "YCbCr 位置"
884
+
885
+ #: PelTag.php:1746
886
+ msgid "Reference Black/White"
887
+ msgstr "黒/白参照"
888
+
889
+ #: PelTag.php:1748
890
+ msgid "Related Image File Format"
891
+ msgstr "関連画像ファイルの形式"
892
+
893
+ #: PelTag.php:1750
894
+ msgid "Related Image Width"
895
+ msgstr "関連画像の幅"
896
+
897
+ #: PelTag.php:1752
898
+ msgid "Related Image Length"
899
+ msgstr "関連画像の長さ"
900
+
901
+ #: PelTag.php:1754
902
+ msgid "CFA Repeat Pattern Dim"
903
+ msgstr ""
904
+
905
+ #: PelTag.php:1756
906
+ msgid "CFA Pattern"
907
+ msgstr "CFA パターン"
908
+
909
+ #: PelTag.php:1758
910
+ msgid "Battery Level"
911
+ msgstr "バッテリーレベル"
912
+
913
+ #: PelTag.php:1760
914
+ msgid "Copyright"
915
+ msgstr "コピーライト"
916
+
917
+ #: PelTag.php:1762
918
+ msgid "Exposure Time"
919
+ msgstr "露出時間"
920
+
921
+ #: PelTag.php:1764
922
+ msgid "FNumber"
923
+ msgstr "F 値"
924
+
925
+ #: PelTag.php:1766
926
+ msgid "IPTC/NAA"
927
+ msgstr "IPTC/NAA"
928
+
929
+ #: PelTag.php:1768
930
+ msgid "Exif IFD Pointer"
931
+ msgstr "EXIF IFD ポインター"
932
+
933
+ #: PelTag.php:1770
934
+ msgid "Inter Color Profile"
935
+ msgstr ""
936
+
937
+ #: PelTag.php:1772
938
+ msgid "Exposure Program"
939
+ msgstr "露出プログラム"
940
+
941
+ #: PelTag.php:1774
942
+ msgid "Spectral Sensitivity"
943
+ msgstr "スペクトル感度"
944
+
945
+ #: PelTag.php:1776
946
+ msgid "GPS Info IFD Pointer"
947
+ msgstr "GPS 情報 IFD ポインター"
948
+
949
+ #: PelTag.php:1778
950
+ msgid "ISO Speed Ratings"
951
+ msgstr "ISO 速度率"
952
+
953
+ #: PelTag.php:1780
954
+ msgid "OECF"
955
+ msgstr "OECF"
956
+
957
+ #: PelTag.php:1782
958
+ msgid "Exif Version"
959
+ msgstr "EXIF バージョン"
960
+
961
+ #: PelTag.php:1784
962
+ msgid "Date and Time (original)"
963
+ msgstr "日付と時間 (オリジナル)"
964
+
965
+ #: PelTag.php:1786
966
+ msgid "Date and Time (digitized)"
967
+ msgstr "日付と時間 (デジタイズ)"
968
+
969
+ #: PelTag.php:1788
970
+ msgid "Components Configuration"
971
+ msgstr "コンポーネント設定"
972
+
973
+ #: PelTag.php:1790
974
+ msgid "Compressed Bits per Pixel"
975
+ msgstr "圧縮のビット毎ピクセル"
976
+
977
+ #: PelTag.php:1792
978
+ msgid "Shutter speed"
979
+ msgstr "シャッタースピード"
980
+
981
+ #: PelTag.php:1794
982
+ msgid "Aperture"
983
+ msgstr "口径"
984
+
985
+ #: PelTag.php:1796
986
+ msgid "Brightness"
987
+ msgstr "無頼とネス"
988
+
989
+ #: PelTag.php:1798
990
+ msgid "Exposure Bias"
991
+ msgstr "露出バイアス"
992
+
993
+ #: PelTag.php:1800
994
+ msgid "Max Aperture Value"
995
+ msgstr "最大口径値"
996
+
997
+ #: PelTag.php:1802
998
+ msgid "Subject Distance"
999
+ msgstr ""
1000
+
1001
+ #: PelTag.php:1804
1002
+ msgid "Metering Mode"
1003
+ msgstr ""
1004
+
1005
+ #: PelTag.php:1806
1006
+ msgid "Light Source"
1007
+ msgstr "光源"
1008
+
1009
+ #: PelTag.php:1810
1010
+ msgid "Focal Length"
1011
+ msgstr "ローカル長"
1012
+
1013
+ #: PelTag.php:1812
1014
+ msgid "Maker Note"
1015
+ msgstr "メーカー注釈"
1016
+
1017
+ #: PelTag.php:1814
1018
+ msgid "User Comment"
1019
+ msgstr "ユーザーコメント"
1020
+
1021
+ #: PelTag.php:1816
1022
+ msgid "SubSec Time"
1023
+ msgstr ""
1024
+
1025
+ #: PelTag.php:1818
1026
+ msgid "SubSec Time Original"
1027
+ msgstr ""
1028
+
1029
+ #: PelTag.php:1820
1030
+ msgid "SubSec Time Digitized"
1031
+ msgstr ""
1032
+
1033
+ #: PelTag.php:1832
1034
+ msgid "FlashPix Version"
1035
+ msgstr "FlashPix バージョン"
1036
+
1037
+ #: PelTag.php:1834
1038
+ msgid "Color Space"
1039
+ msgstr "色空間"
1040
+
1041
+ #: PelTag.php:1836
1042
+ msgid "Pixel x-Dimension"
1043
+ msgstr ""
1044
+
1045
+ #: PelTag.php:1838
1046
+ msgid "Pixel y-Dimension"
1047
+ msgstr ""
1048
+
1049
+ #: PelTag.php:1840
1050
+ msgid "Related Sound File"
1051
+ msgstr "関連音声ファイル"
1052
+
1053
+ #: PelTag.php:1842
1054
+ msgid "Interoperability IFD Pointer"
1055
+ msgstr ""
1056
+
1057
+ #: PelTag.php:1844
1058
+ msgid "Flash Energy"
1059
+ msgstr "フラッシュエネルギー"
1060
+
1061
+ #: PelTag.php:1846
1062
+ msgid "Spatial Frequency Response"
1063
+ msgstr ""
1064
+
1065
+ #: PelTag.php:1848
1066
+ msgid "Focal Plane x-Resolution"
1067
+ msgstr "焦点面水平解像度"
1068
+
1069
+ #: PelTag.php:1850
1070
+ msgid "Focal Plane y-Resolution"
1071
+ msgstr "焦点面垂直解像度"
1072
+
1073
+ #: PelTag.php:1852
1074
+ msgid "Focal Plane Resolution Unit"
1075
+ msgstr "焦点面解像度単位"
1076
+
1077
+ #: PelTag.php:1854
1078
+ msgid "Subject Location"
1079
+ msgstr ""
1080
+
1081
+ #: PelTag.php:1856
1082
+ msgid "Exposure index"
1083
+ msgstr "露出インデックス"
1084
+
1085
+ #: PelTag.php:1858
1086
+ msgid "Sensing Method"
1087
+ msgstr ""
1088
+
1089
+ #: PelTag.php:1860
1090
+ msgid "File Source"
1091
+ msgstr "ファイルソース"
1092
+
1093
+ #: PelTag.php:1862
1094
+ msgid "Scene Type"
1095
+ msgstr ""
1096
+
1097
+ #: PelTag.php:1864
1098
+ msgid "Subject Area"
1099
+ msgstr ""
1100
+
1101
+ #: PelTag.php:1866
1102
+ msgid "Custom Rendered"
1103
+ msgstr ""
1104
+
1105
+ #: PelTag.php:1868
1106
+ msgid "Exposure Mode"
1107
+ msgstr "露出モード"
1108
+
1109
+ #: PelTag.php:1870
1110
+ msgid "White Balance"
1111
+ msgstr "ホワイトバランス"
1112
+
1113
+ #: PelTag.php:1872
1114
+ msgid "Digital Zoom Ratio"
1115
+ msgstr "デジタルズーム率"
1116
+
1117
+ #: PelTag.php:1874
1118
+ msgid "Focal Length In 35mm Film"
1119
+ msgstr "35mm フィルムの焦点長"
1120
+
1121
+ #: PelTag.php:1876
1122
+ msgid "Scene Capture Type"
1123
+ msgstr ""
1124
+
1125
+ #: PelTag.php:1878
1126
+ msgid "Gain Control"
1127
+ msgstr "ゲイン制御"
1128
+
1129
+ #: PelTag.php:1880
1130
+ msgid "Contrast"
1131
+ msgstr "コントラスト"
1132
+
1133
+ #: PelTag.php:1882
1134
+ msgid "Saturation"
1135
+ msgstr "彩度"
1136
+
1137
+ #: PelTag.php:1884
1138
+ msgid "Sharpness"
1139
+ msgstr "シャープネス"
1140
+
1141
+ #: PelTag.php:1886
1142
+ msgid "Device Setting Description"
1143
+ msgstr "デバイス設定の説明"
1144
+
1145
+ #: PelTag.php:1888
1146
+ msgid "Subject Distance Range"
1147
+ msgstr ""
1148
+
1149
+ #: PelTag.php:1890
1150
+ msgid "Image Unique ID"
1151
+ msgstr "画像一意 ID"
1152
+
1153
+ #: PelTag.php:1892
1154
+ msgid "Gamma"
1155
+ msgstr "ガンマ"
1156
+
1157
+ #: PelTag.php:1894
1158
+ msgid "Print IM"
1159
+ msgstr "印刷 IM"
1160
+
1161
+ #: PelTag.php:1964
1162
+ #, php-format
1163
+ msgid "Unknown Tag: 0x%04X"
1164
+ msgstr "未知のタグ: 0x%04X"
1165
+
1166
+ #: PelTiff.php:255
1167
+ #, php-format
1168
+ msgid "Dumping TIFF data...\n"
1169
+ msgstr "TIFF データのダンプ中...\n"
1170
+
1171
+ #~ msgid "The lens aperture. The unit is the APEX value."
1172
+ #~ msgstr "レンズ口径です。単位はユニットは APEX 値です。"
1173
+
1174
+ #~ msgid "The image title as defined by the user in Windows XP."
1175
+ #~ msgstr "Windows XP ユーザにより定義された画像の題名です。"
1176
+
1177
+ #~ msgid "The image comment as defined by the user in Windows XP."
1178
+ #~ msgstr "Windows XP ユーザにより定義された画像のコメントです。"
1179
+
1180
+ #~ msgid "The image author as defined by the user in Windows XP."
1181
+ #~ msgstr "Windows XP ユーザにより定義された画像の作成者です。"
1182
+
1183
+ #~ msgid "The image keywords as defined by the user in Windows XP."
1184
+ #~ msgstr "Windows XP ユーザにより定義された画像のキーワードです。"
1185
+
1186
+ #~ msgid "The image subject as defined by the user in Windows XP."
1187
+ #~ msgstr "Windows XP ユーザにより定義された画像の題名です。"
1188
+
1189
+ #~ msgid "The FlashPix format version supported by a FPXR file."
1190
+ #~ msgstr "FPXR ファイルによりサポートされたフォーマットのバージョンです。"
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/nl.po ADDED
@@ -0,0 +1,1181 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Dutch translation for the PHP Exif Library (PEL).
2
+ # Copyright (C) 2004, 2005, 2006 Martin Geisler
3
+ # This file is distributed under the term of the GPL.
4
+ #
5
+ # First Author: Erik Oskam <info@eowd.nl>, 2010
6
+ msgid ""
7
+ msgstr ""
8
+ "Project-Id-Version: PEL\n"
9
+ "Report-Msgid-Bugs-To: \n"
10
+ "POT-Creation-Date: 2010-12-04 21:26+0100\n"
11
+ "Last-Translator: Erik Oskam <info@eowd.nl>\n"
12
+ "Language-Team: None\n"
13
+ "MIME-Version: 1.0\n"
14
+ "Content-Type: text/plain; charset=UTF-8\n"
15
+ "Content-Transfer-Encoding: 8bit\n"
16
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
+
18
+ #: PelDataWindow.php:517
19
+ #, php-format
20
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
21
+ msgstr "DataWindow: %d bytes i [%d, %d] af %d bytes"
22
+
23
+ #: PelEntryAscii.php:465
24
+ msgid "(Photographer)"
25
+ msgstr "(Fotofraaf)"
26
+
27
+ #: PelEntryAscii.php:466
28
+ msgid "(Editor)"
29
+ msgstr "(Redacteur)"
30
+
31
+ #: PelEntry.php:369
32
+ #, php-format
33
+ msgid " Tag: 0x%04X (%s)\n"
34
+ msgstr " Tag: 0x%04X (%s)\n"
35
+
36
+ #: PelEntry.php:371
37
+ #, php-format
38
+ msgid " Format : %d (%s)\n"
39
+ msgstr " Formaat : %d (%s)\n"
40
+
41
+ #: PelEntry.php:373
42
+ #, php-format
43
+ msgid " Components: %d\n"
44
+ msgstr " Componenten: %d\n"
45
+
46
+ #: PelEntry.php:376
47
+ #, php-format
48
+ msgid " Value : %s\n"
49
+ msgstr " Waarde : %s\n"
50
+
51
+ #: PelEntry.php:377
52
+ #, php-format
53
+ msgid " Text : %s\n"
54
+ msgstr " Tekst : %s\n"
55
+
56
+ #: PelEntryRational.php:136 PelEntryRational.php:141
57
+ #, php-format
58
+ msgid "f/%.01f"
59
+ msgstr "f/%.01f"
60
+
61
+ #: PelEntryRational.php:146
62
+ #, php-format
63
+ msgid "%.1f mm"
64
+ msgstr "%.1f mm"
65
+
66
+ #: PelEntryRational.php:151
67
+ #, php-format
68
+ msgid "%.1f m"
69
+ msgstr "%.1f m"
70
+
71
+ #: PelEntryRational.php:157
72
+ #, php-format
73
+ msgid "1/%d sec."
74
+ msgstr "1/%d sek."
75
+
76
+ #: PelEntryRational.php:159
77
+ #, php-format
78
+ msgid "%d sec."
79
+ msgstr "%d sek."
80
+
81
+ #: PelEntryRational.php:267
82
+ #, php-format
83
+ msgid "%.0f/%.0f sec. (APEX: %d)"
84
+ msgstr "%.0f/%.0f sek. (APEX: %d)"
85
+
86
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
87
+ msgid "Unknown"
88
+ msgstr "Onbekend"
89
+
90
+ #: PelEntryShort.php:144
91
+ msgid "Average"
92
+ msgstr "Gemmiddelde"
93
+
94
+ #: PelEntryShort.php:146
95
+ msgid "Center-Weighted Average"
96
+ msgstr "Centrumgericht Gemiddelde"
97
+
98
+ #: PelEntryShort.php:148
99
+ msgid "Spot"
100
+ msgstr "Spot"
101
+
102
+ #: PelEntryShort.php:150
103
+ msgid "Multi Spot"
104
+ msgstr "Multi Spot"
105
+
106
+ #: PelEntryShort.php:152
107
+ msgid "Pattern"
108
+ msgstr "Patroon"
109
+
110
+ #: PelEntryShort.php:154
111
+ msgid "Partial"
112
+ msgstr "Gedeeltelijk"
113
+
114
+ #: PelEntryShort.php:156 PelEntryShort.php:247
115
+ msgid "Other"
116
+ msgstr "Anders"
117
+
118
+ #: PelEntryShort.php:165
119
+ msgid "Uncompressed"
120
+ msgstr "Ongecomprimeerd"
121
+
122
+ #: PelEntryShort.php:167
123
+ msgid "JPEG compression"
124
+ msgstr "JPEG compressie"
125
+
126
+ #: PelEntryShort.php:177
127
+ msgid "chunky format"
128
+ msgstr "chunky format"
129
+
130
+ #: PelEntryShort.php:179
131
+ msgid "planar format"
132
+ msgstr "planair format"
133
+
134
+ #: PelEntryShort.php:188 PelEntryShort.php:268
135
+ msgid "Not defined"
136
+ msgstr "Niet gedefinieerd"
137
+
138
+ #: PelEntryShort.php:190
139
+ msgid "One-chip color area sensor"
140
+ msgstr "Enkele chip kleursensor"
141
+
142
+ #: PelEntryShort.php:192
143
+ msgid "Two-chip color area sensor"
144
+ msgstr "Twee-chips kleursensor"
145
+
146
+ #: PelEntryShort.php:194
147
+ msgid "Three-chip color area sensor"
148
+ msgstr "Drie chips, kleursensor"
149
+
150
+ #: PelEntryShort.php:196
151
+ msgid "Color sequential area sensor"
152
+ msgstr "Kleur-sequentiele sensor"
153
+
154
+ #: PelEntryShort.php:198
155
+ msgid "Trilinear sensor"
156
+ msgstr "Trilinaire sensor"
157
+
158
+ #: PelEntryShort.php:200
159
+ msgid "Color sequential linear sensor"
160
+ msgstr "Lineaire kleur-sequentiele sensor"
161
+
162
+ #: PelEntryShort.php:211
163
+ msgid "Daylight"
164
+ msgstr "Daglicht"
165
+
166
+ #: PelEntryShort.php:213
167
+ msgid "Fluorescent"
168
+ msgstr "Fluorescent"
169
+
170
+ #: PelEntryShort.php:215
171
+ msgid "Tungsten (incandescent light)"
172
+ msgstr "Tungsten (gloeilamp)"
173
+
174
+ #: PelEntryShort.php:217 PelTag.php:1808
175
+ msgid "Flash"
176
+ msgstr "Flits"
177
+
178
+ #: PelEntryShort.php:219
179
+ msgid "Fine weather"
180
+ msgstr "Helder weer"
181
+
182
+ #: PelEntryShort.php:221
183
+ msgid "Cloudy weather"
184
+ msgstr "Bewolkt weer"
185
+
186
+ #: PelEntryShort.php:223
187
+ msgid "Shade"
188
+ msgstr "Skygge"
189
+
190
+ #: PelEntryShort.php:225
191
+ msgid "Daylight fluorescent"
192
+ msgstr "Daglicht fluorescent"
193
+
194
+ #: PelEntryShort.php:227
195
+ msgid "Day white fluorescent"
196
+ msgstr "Daglicht wit fluorescent"
197
+
198
+ #: PelEntryShort.php:229
199
+ msgid "Cool white fluorescent"
200
+ msgstr "Koud wit fluorescent"
201
+
202
+ #: PelEntryShort.php:231
203
+ msgid "White fluorescent"
204
+ msgstr "Wit fluorescent"
205
+
206
+ #: PelEntryShort.php:233
207
+ msgid "Standard light A"
208
+ msgstr "Standaard licht A"
209
+
210
+ #: PelEntryShort.php:235
211
+ msgid "Standard light B"
212
+ msgstr "Standaard licht B"
213
+
214
+ #: PelEntryShort.php:237
215
+ msgid "Standard light C"
216
+ msgstr "Standaard licht A"
217
+
218
+ #: PelEntryShort.php:239
219
+ msgid "D55"
220
+ msgstr "D55"
221
+
222
+ #: PelEntryShort.php:241
223
+ msgid "D65"
224
+ msgstr "D65"
225
+
226
+ #: PelEntryShort.php:243
227
+ msgid "D75"
228
+ msgstr "D75"
229
+
230
+ #: PelEntryShort.php:245
231
+ msgid "ISO studio tungsten"
232
+ msgstr "ISO studio tungsten"
233
+
234
+ #: PelEntryShort.php:257
235
+ msgid "Inch"
236
+ msgstr "Inch"
237
+
238
+ #: PelEntryShort.php:259
239
+ msgid "Centimeter"
240
+ msgstr "Centimeter"
241
+
242
+ #: PelEntryShort.php:270
243
+ msgid "Manual"
244
+ msgstr "Handmatig"
245
+
246
+ #: PelEntryShort.php:272
247
+ msgid "Normal program"
248
+ msgstr "Normaal programma"
249
+
250
+ #: PelEntryShort.php:274
251
+ msgid "Aperture priority"
252
+ msgstr "Diafragmavoorkeuze"
253
+
254
+ #: PelEntryShort.php:276
255
+ msgid "Shutter priority"
256
+ msgstr "Sluitertijdvoorkeuze"
257
+
258
+ #: PelEntryShort.php:278
259
+ msgid "Creative program (biased toward depth of field)"
260
+ msgstr "Creatief programma (voorkeur voor velddiepte)"
261
+
262
+ #: PelEntryShort.php:280
263
+ msgid "Action program (biased toward fast shutter speed)"
264
+ msgstr "Sportstand (voorkeur voor korte sluitertijd)"
265
+
266
+ #: PelEntryShort.php:282
267
+ msgid "Portrait mode (for closeup photos with the background out of focus"
268
+ msgstr "Portretstand (voor closeup foto's met de achtergrond uit focus)"
269
+
270
+ #: PelEntryShort.php:284
271
+ msgid "Landscape mode (for landscape photos with the background in focus"
272
+ msgstr "Landschapstand (voor landschapsfoto's met de achtergron in focus)"
273
+
274
+ #: PelEntryShort.php:293
275
+ msgid "top - left"
276
+ msgstr "boven - links"
277
+
278
+ #: PelEntryShort.php:295
279
+ msgid "top - right"
280
+ msgstr "boven - rechts"
281
+
282
+ #: PelEntryShort.php:297
283
+ msgid "bottom - right"
284
+ msgstr "onder - rechts"
285
+
286
+ #: PelEntryShort.php:299
287
+ msgid "bottom - left"
288
+ msgstr "onder - links"
289
+
290
+ #: PelEntryShort.php:301
291
+ msgid "left - top"
292
+ msgstr "links - boven"
293
+
294
+ #: PelEntryShort.php:303
295
+ msgid "right - top"
296
+ msgstr "rechts - boven"
297
+
298
+ #: PelEntryShort.php:3055
299
+ msgid "right - bottom"
300
+ msgstr "rechts - onder"
301
+
302
+ #: PelEntryShort.php:307
303
+ msgid "left - bottom"
304
+ msgstr "links - onder"
305
+
306
+ #: PelEntryShort.php:316
307
+ msgid "centered"
308
+ msgstr "gencentreerd"
309
+
310
+ #: PelEntryShort.php:318
311
+ msgid "co-sited"
312
+ msgstr "co-sited"
313
+
314
+ #: PelEntryShort.php:351
315
+ msgid "Uncalibrated"
316
+ msgstr "Ongecalibreerd"
317
+
318
+ #: PelEntryShort.php:360
319
+ msgid "Flash did not fire."
320
+ msgstr "Niet geflitst."
321
+
322
+ #: PelEntryShort.php:362
323
+ msgid "Flash fired."
324
+ msgstr "Geflitst."
325
+
326
+ #: PelEntryShort.php:364
327
+ msgid "Strobe return light not detected."
328
+ msgstr "Weerkaatst flitslicht niet gedetecteerd."
329
+
330
+ #: PelEntryShort.php:366
331
+ msgid "Strobe return light detected."
332
+ msgstr "Weerkaatst flitslicht gedetecteerd."
333
+
334
+ #: PelEntryShort.php:368
335
+ msgid "Flash fired, compulsory flash mode."
336
+ msgstr "Geflitst, invulflitsstand gebruikt (altijd flitsen)"
337
+
338
+ #: PelEntryShort.php:370
339
+ msgid "Flash fired, compulsory flash mode, return light not detected."
340
+ msgstr ""
341
+ "Geflitst, invulflitsstand gebruikt (altijd flitsen), weerkaatst flitslicht "
342
+ "niet gedetecteerd."
343
+
344
+ #: PelEntryShort.php:372
345
+ msgid "Flash fired, compulsory flash mode, return light detected."
346
+ msgstr ""
347
+ "Geflitst, invulflitsstand gebruikt (altijd flitsen), weerkaatst flitslicht "
348
+ "gedetecteerd."
349
+
350
+ #: PelEntryShort.php:374
351
+ msgid "Flash did not fire, compulsory flash mode."
352
+ msgstr "Niet geflitst, invulflitsstand gebruikt (altijd flitsen)."
353
+
354
+ #: PelEntryShort.php:376
355
+ msgid "Flash did not fire, auto mode."
356
+ msgstr "Niet geflitst, automatische stand"
357
+
358
+ #: PelEntryShort.php:378
359
+ msgid "Flash fired, auto mode."
360
+ msgstr "Geflitst, automatische stand."
361
+
362
+ #: PelEntryShort.php:380
363
+ msgid "Flash fired, auto mode, return light not detected."
364
+ msgstr "Geflitst, automatische stand, weerkaatst flitslicht niet gedetecteerd."
365
+
366
+ #: PelEntryShort.php:382
367
+ msgid "Flash fired, auto mode, return light detected."
368
+ msgstr "Geflitst, automatische stand, weerkaatst flitslicht gedetecteerd."
369
+
370
+ #: PelEntryShort.php:384
371
+ msgid "No flash function."
372
+ msgstr "Geen flitsfunctie"
373
+
374
+ #: PelEntryShort.php:386
375
+ msgid "Flash fired, red-eye reduction mode."
376
+ msgstr "Geflitst, rode-ogenreductie ingeschakeld."
377
+
378
+ #: PelEntryShort.php:388
379
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
380
+ msgstr ""
381
+ "Geflitst, rode-ogenreductie ingeschakeld, weerkaatst flistlicht niet "
382
+ "gedetecteerd."
383
+
384
+ #: PelEntryShort.php:390
385
+ msgid "Flash fired, red-eye reduction mode, return light detected."
386
+ msgstr ""
387
+ "Geflitst, rode-ogenreductie ingeschakeld, weerkaatst flistlicht gedetecteerd."
388
+
389
+ #: PelEntryShort.php:392
390
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
391
+ msgstr ""
392
+ "Geflitst, invulflitsstand gebruikt (altijd flitsen), rode-ogenreductie "
393
+ "ingeschakeld."
394
+
395
+ #: PelEntryShort.php:394
396
+ msgid ""
397
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
398
+ "detected."
399
+ msgstr ""
400
+ "Geflistst, invulflitsstand gebruikt (altijd flitsen), rode-ogenreductie "
401
+ "ingeschakeld, weerkaatst flistlicht niet gedetecteerd."
402
+
403
+ #: PelEntryShort.php:396
404
+ msgid ""
405
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
406
+ "detected."
407
+ msgstr ""
408
+ "Geflistst, invulflitsstand gebruikt (altijd flitsen), rode-ogenreductie "
409
+ "ingeschakeld, weerkaatst flistlicht gedetecteerd."
410
+
411
+ #: PelEntryShort.php:398
412
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
413
+ msgstr "Niet geflitst, automatische stand, rode-ogenreductie ingeschakeld."
414
+
415
+ #: PelEntryShort.php:400
416
+ msgid "Flash fired, auto mode, red-eye reduction mode."
417
+ msgstr "Geflitst, automatische stand, rode-ogenreductie ingeschakeld."
418
+
419
+ #: PelEntryShort.php:402
420
+ msgid ""
421
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
422
+ msgstr ""
423
+ "Geflitst, automatische stand, weerkaatst flitslicht niet gedetecteerd, "
424
+ "rode-ogenreductie ingeschakeld."
425
+
426
+ #: PelEntryShort.php:404
427
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
428
+ msgstr ""
429
+ "Geflitst, automatische stand, weerkaatst flitslicht gedetecteerd, "
430
+ "rode-ogenreductie ingeschakeld."
431
+
432
+ #: PelEntryShort.php:413
433
+ msgid "Normal process"
434
+ msgstr "Normaal proces"
435
+
436
+ #: PelEntryShort.php:415
437
+ msgid "Custom process"
438
+ msgstr "Aangepast proces"
439
+
440
+ #: PelEntryShort.php:424
441
+ msgid "Auto exposure"
442
+ msgstr "Automatische belichting"
443
+
444
+ #: PelEntryShort.php:426
445
+ msgid "Manual exposure"
446
+ msgstr "Handmatige belichting"
447
+
448
+ #: PelEntryShort.php:428
449
+ msgid "Auto bracket"
450
+ msgstr "Auto bracketing"
451
+
452
+ #: PelEntryShort.php:437
453
+ msgid "Auto white balance"
454
+ msgstr "Automatiche witbalans"
455
+
456
+ #: PelEntryShort.php:439
457
+ msgid "Manual white balance"
458
+ msgstr "Handmatig witbalans"
459
+
460
+ #: PelEntryShort.php:448
461
+ msgid "Standard"
462
+ msgstr "Standaard"
463
+
464
+ #: PelEntryShort.php:450
465
+ msgid "Landscape"
466
+ msgstr "Liggend (landschap)"
467
+
468
+ #: PelEntryShort.php:452
469
+ msgid "Portrait"
470
+ msgstr "Staand (portret)"
471
+
472
+ #: PelEntryShort.php:454
473
+ msgid "Night scene"
474
+ msgstr "Nachtscene"
475
+
476
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
477
+ msgid "Normal"
478
+ msgstr "Normaal"
479
+
480
+ #: PelEntryShort.php:465
481
+ msgid "Low gain up"
482
+ msgstr "Lage versterking"
483
+
484
+ #: PelEntryShort.php:467
485
+ msgid "High gain up"
486
+ msgstr "Hoge versterking"
487
+
488
+ #: PelEntryShort.php:469
489
+ msgid "Low gain down"
490
+ msgstr "Lage verzwakking"
491
+
492
+ #: PelEntryShort.php:471
493
+ msgid "High gain down"
494
+ msgstr "Hoge verzwakking"
495
+
496
+ #: PelEntryShort.php:482
497
+ msgid "Low saturation"
498
+ msgstr "Lage kleurverzadiging"
499
+
500
+ #: PelEntryShort.php:484
501
+ msgid "High saturation"
502
+ msgstr "Hoge kleurverzadiging"
503
+
504
+ #: PelEntryShort.php:496
505
+ msgid "Soft"
506
+ msgstr "Zacht"
507
+
508
+ #: PelEntryShort.php:498
509
+ msgid "Hard"
510
+ msgstr "Hard"
511
+
512
+ #: PelEntryShort.php:509
513
+ msgid "Macro"
514
+ msgstr "Makro"
515
+
516
+ #: PelEntryShort.php:511
517
+ msgid "Close view"
518
+ msgstr "Dichtbij "
519
+
520
+ #: PelEntryShort.php:513
521
+ msgid "Distant view"
522
+ msgstr "Ver weg"
523
+
524
+ #: PelEntryShort.php:521
525
+ #, php-format
526
+ msgid "(x,y) = (%d,%d)"
527
+ msgstr "(x,y) = (%d,%d)"
528
+
529
+ #: PelEntryShort.php:523
530
+ #, php-format
531
+ msgid "Within distance %d of (x,y) = (%d,%d)"
532
+ msgstr "Binnen afstand %d van (x,y) = (%d,%d)"
533
+
534
+ #: PelEntryShort.php:526
535
+ #, php-format
536
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
537
+ msgstr "Binnen rechthoek (breedte %d, hooggte %d) om (x,y) = (%d,%d)"
538
+
539
+ #: PelEntryShort.php:531
540
+ #, php-format
541
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
542
+ msgstr "Onverwacht aantal componenten (%d, waar 2, 3 of 4 werden verwacht)."
543
+
544
+ #: PelEntryUndefined.php:390
545
+ #, php-format
546
+ msgid "Exif %s"
547
+ msgstr "Exif %s"
548
+
549
+ #: PelEntryUndefined.php:392
550
+ #, php-format
551
+ msgid "Exif Version %s"
552
+ msgstr "Exif version %s"
553
+
554
+ #: PelEntryUndefined.php:396
555
+ #, php-format
556
+ msgid "FlashPix %s"
557
+ msgstr "FlashPix %s"
558
+
559
+ #: PelEntryUndefined.php:398
560
+ #, php-format
561
+ msgid "FlashPix Version %s"
562
+ msgstr "FlashPix versie %s"
563
+
564
+ #: PelEntryUndefined.php:402
565
+ #, php-format
566
+ msgid "Interoperability %s"
567
+ msgstr "Interoperabiliteit %s"
568
+
569
+ #: PelEntryUndefined.php:404
570
+ #, php-format
571
+ msgid "Interoperability Version %s"
572
+ msgstr "Interoperabiliteit-versie %s"
573
+
574
+ #: PelEntryUndefined.php:410
575
+ #, php-format
576
+ msgid "Version %s"
577
+ msgstr "Versie %s"
578
+
579
+ #: PelExif.php:169
580
+ msgid "Dumping Exif data...\n"
581
+ msgstr "Exif data dumpen...\n"
582
+
583
+ #: PelFormat.php:192 PelFormat.php:220
584
+ #, php-format
585
+ msgid "Unknown format: 0x%X"
586
+ msgstr "Onbekend formaat: 0x%X"
587
+
588
+ #: PelIfd.php:1180
589
+ #, php-format
590
+ msgid "Dumping IFD %s with %d entries...\n"
591
+ msgstr "IFD %s met %d items dumpen...\n"
592
+
593
+ #: PelIfd.php:1186
594
+ #, php-format
595
+ msgid "Dumping %d sub IFDs...\n"
596
+ msgstr "%d sub-IFD's dumpen...\n"
597
+
598
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
599
+ #, php-format
600
+ msgid "Unknown marker: 0x%02X"
601
+ msgstr "Onbekende code: 0x%02X"
602
+
603
+ #: PelJpegMarker.php:302
604
+ msgid "Encoding (baseline)"
605
+ msgstr "Coderen (baseline)"
606
+
607
+ #: PelJpegMarker.php:304
608
+ msgid "Encoding (extended sequential)"
609
+ msgstr "Coderen (uitgebreid sequentieel)"
610
+
611
+ #: PelJpegMarker.php:306
612
+ msgid "Encoding (progressive)"
613
+ msgstr "Coderen (progressief)"
614
+
615
+ #: PelJpegMarker.php:308
616
+ msgid "Encoding (lossless)"
617
+ msgstr "Coderen (zonder verlies)"
618
+
619
+ #: PelJpegMarker.php:310
620
+ msgid "Encoding (differential sequential)"
621
+ msgstr "Coderen (differentiaal sequentieel)"
622
+
623
+ #: PelJpegMarker.php:312
624
+ msgid "Encoding (differential progressive)"
625
+ msgstr "Coderen (differentiaal progressief)"
626
+
627
+ #: PelJpegMarker.php:314
628
+ msgid "Encoding (differential lossless)"
629
+ msgstr "Coderen (differentiaal zonder verlies)"
630
+
631
+ #: PelJpegMarker.php:316
632
+ msgid "Encoding (extended sequential, arithmetic)"
633
+ msgstr "Coderen (uitgebried sequentieel, rekenkundig)"
634
+
635
+ #: PelJpegMarker.php:318
636
+ msgid "Encoding (progressive, arithmetic)"
637
+ msgstr "Coderen (progressief, rekenkundig)"
638
+
639
+ #: PelJpegMarker.php:320
640
+ msgid "Encoding (lossless, arithmetic)"
641
+ msgstr "Coderen (zonder verlies, rekenkundig)"
642
+
643
+ #: PelJpegMarker.php:322
644
+ msgid "Encoding (differential sequential, arithmetic)"
645
+ msgstr "Coderen (differentiaal sequentieel, rekenkundig)"
646
+
647
+ #: PelJpegMarker.php:324
648
+ msgid "Encoding (differential progressive, arithmetic)"
649
+ msgstr "Coderen (differentiaal progressief, rekenkundig)"
650
+
651
+ #: PelJpegMarker.php:326
652
+ msgid "Encoding (differential lossless, arithmetic)"
653
+ msgstr "Coderen (differentiaal zonder verlies, rekenkundig)"
654
+
655
+ #: PelJpegMarker.php:328
656
+ msgid "Start of image"
657
+ msgstr "Start van afbeelding"
658
+
659
+ #: PelJpegMarker.php:330
660
+ msgid "End of image"
661
+ msgstr "Eind van afbeelding"
662
+
663
+ #: PelJpegMarker.php:332
664
+ msgid "Start of scan"
665
+ msgstr "Start van scan"
666
+
667
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
668
+ msgid "Comment"
669
+ msgstr "Commentaar"
670
+
671
+ #: PelJpegMarker.php:336
672
+ msgid "Define Huffman table"
673
+ msgstr "Definieer Huffman tabel"
674
+
675
+ #: PelJpegMarker.php:338
676
+ msgid "Extension"
677
+ msgstr "Uitbreiding"
678
+
679
+ #: PelJpegMarker.php:340
680
+ msgid "Define arithmetic coding conditioning"
681
+ msgstr "Definieer rekenkundige codering"
682
+
683
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
684
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
685
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
686
+ #, php-format
687
+ msgid "Restart %d"
688
+ msgstr "Herstart %d"
689
+
690
+ #: PelJpegMarker.php:358
691
+ msgid "Define quantization table"
692
+ msgstr "Definieer kwantisatietabel"
693
+
694
+ #: PelJpegMarker.php:360
695
+ msgid "Define number of lines"
696
+ msgstr "Definieer het aantal regels"
697
+
698
+ #: PelJpegMarker.php:362
699
+ msgid "Define restart interval"
700
+ msgstr "Definieer herstartinterval"
701
+
702
+ #: PelJpegMarker.php:364
703
+ msgid "Define hierarchical progression"
704
+ msgstr "Definieer hierarchische progressie"
705
+
706
+ #: PelJpegMarker.php:366
707
+ msgid "Expand reference component"
708
+ msgstr "Referentie-onderdeel uitbreiden"
709
+
710
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
711
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
712
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
713
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
714
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
715
+ #: PelJpegMarker.php:398
716
+ #, php-format
717
+ msgid "Application segment %d"
718
+ msgstr "Applicatiesegment %d"
719
+
720
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
721
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
722
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
723
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
724
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
725
+ #, php-format
726
+ msgid "Extension %d"
727
+ msgstr "Uitbreiding %d"
728
+
729
+ #: PelJpeg.php:543
730
+ msgid "Dumping JPEG data...\n"
731
+ msgstr "JPEG data dumpen...\n"
732
+
733
+ #: PelJpeg.php:547
734
+ #, php-format
735
+ msgid "Section %d (marker 0x%02X - %s):\n"
736
+ msgstr "Sectie %d (markering 0x%02X - %s):\n"
737
+
738
+ #: PelJpeg.php:549
739
+ #, php-format
740
+ msgid " Description: %s\n"
741
+ msgstr " Omschrijving: %s\n"
742
+
743
+ #: PelJpeg.php:557
744
+ msgid " Content : Exif data\n"
745
+ msgstr " Inhoud : Exif data\n"
746
+
747
+ #: PelJpeg.php:560
748
+ #, php-format
749
+ msgid " Content : %s\n"
750
+ msgstr " Inhoud : %s\n"
751
+
752
+ #: PelJpeg.php:562
753
+ msgid " Content : Unknown\n"
754
+ msgstr " Inhoud : Ukendt\n"
755
+
756
+ #: PelTag.php:1649
757
+ #, php-format
758
+ msgid "Unknown: 0x%04X"
759
+ msgstr "Onbekend: 0x%04X"
760
+
761
+ #: PelTag.php:1678
762
+ msgid "Interoperability Index"
763
+ msgstr "Interoperabiliteitsindex"
764
+
765
+ #: PelTag.php:1680
766
+ msgid "Interoperability Version"
767
+ msgstr "Interoperabiliteitsversie"
768
+
769
+ #: PelTag.php:1682
770
+ msgid "Image Width"
771
+ msgstr "Afbeeldingsbreedte"
772
+
773
+ #: PelTag.php:1684
774
+ msgid "Image Length"
775
+ msgstr "Afbeeldingslengte"
776
+
777
+ #: PelTag.php:1686
778
+ msgid "Bits per Sample"
779
+ msgstr "Bits per onderdeel"
780
+
781
+ #: PelTag.php:1688
782
+ msgid "Compression"
783
+ msgstr "Compressie"
784
+
785
+ #: PelTag.php:1690
786
+ msgid "Photometric Interpretation"
787
+ msgstr "Fotometrische Interpretatie"
788
+
789
+ #: PelTag.php:1692
790
+ msgid "Fill Order"
791
+ msgstr "Vullingsvolgorde"
792
+
793
+ #: PelTag.php:1694
794
+ msgid "Document Name"
795
+ msgstr "Dokumentnaam"
796
+
797
+ #: PelTag.php:1696
798
+ msgid "Image Description"
799
+ msgstr "Afbeeldingsbeschrijving"
800
+
801
+ #: PelTag.php:1698
802
+ msgid "Manufacturer"
803
+ msgstr "Fabrikant"
804
+
805
+ #: PelTag.php:1700
806
+ msgid "Model"
807
+ msgstr "Model"
808
+
809
+ #: PelTag.php:1702
810
+ msgid "Strip Offsets"
811
+ msgstr ""
812
+
813
+ #: PelTag.php:1704
814
+ msgid "Orientation"
815
+ msgstr "Orientatie"
816
+
817
+ #: PelTag.php:1706
818
+ msgid "Samples per Pixel"
819
+ msgstr "Samples per Pixel"
820
+
821
+ #: PelTag.php:1708
822
+ msgid "Rows per Strip"
823
+ msgstr "Rijen per strip"
824
+
825
+ #: PelTag.php:1710
826
+ msgid "Strip Byte Count"
827
+ msgstr ""
828
+
829
+ #: PelTag.php:1712
830
+ msgid "x-Resolution"
831
+ msgstr "x-resolutie"
832
+
833
+ #: PelTag.php:1714
834
+ msgid "y-Resolution"
835
+ msgstr "y-resolutie"
836
+
837
+ #: PelTag.php:1716
838
+ msgid "Planar Configuration"
839
+ msgstr "Planconfiguratie"
840
+
841
+ #: PelTag.php:1718
842
+ msgid "Resolution Unit"
843
+ msgstr "Resolutie-eenheid"
844
+
845
+ #: PelTag.php:1720
846
+ msgid "Transfer Function"
847
+ msgstr "Overdrachtsmethode"
848
+
849
+ #: PelTag.php:1722
850
+ msgid "Software"
851
+ msgstr "Software"
852
+
853
+ #: PelTag.php:1724
854
+ msgid "Date and Time"
855
+ msgstr "Datum en tijd"
856
+
857
+ #: PelTag.php:1726
858
+ msgid "Artist"
859
+ msgstr "Artiest"
860
+
861
+ #: PelTag.php:1728
862
+ msgid "White Point"
863
+ msgstr "Witpunt"
864
+
865
+ #: PelTag.php:1730
866
+ msgid "Primary Chromaticities"
867
+ msgstr "Primaire Chromaticiteiten"
868
+
869
+ #: PelTag.php:1732
870
+ msgid "Transfer Range"
871
+ msgstr "Overdrachtsbereik"
872
+
873
+ #: PelTag.php:1734
874
+ msgid "JPEG Process"
875
+ msgstr "JPEG proces"
876
+
877
+ #: PelTag.php:1736
878
+ msgid "JPEG Interchange Format"
879
+ msgstr "JPEG Interchange Format"
880
+
881
+ #: PelTag.php:1738
882
+ msgid "JPEG Interchange Format Length"
883
+ msgstr "JPEG Interchange Format Length"
884
+
885
+ #: PelTag.php:1740
886
+ msgid "YCbCr Coefficients"
887
+ msgstr "YCbCr coefficienten"
888
+
889
+ #: PelTag.php:1742
890
+ msgid "YCbCr Sub-Sampling"
891
+ msgstr "YCbCr Sub-Sampling"
892
+
893
+ #: PelTag.php:1744
894
+ msgid "YCbCr Positioning"
895
+ msgstr "YCbCr positionering"
896
+
897
+ #: PelTag.php:1746
898
+ msgid "Reference Black/White"
899
+ msgstr "Referentie zwart/wit"
900
+
901
+ #: PelTag.php:1748
902
+ msgid "Related Image File Format"
903
+ msgstr "Gerelateerd afbeeldingsbestandsformaat"
904
+
905
+ #: PelTag.php:1750
906
+ msgid "Related Image Width"
907
+ msgstr "Gerelateerde afbeedlingsbreedte"
908
+
909
+ #: PelTag.php:1752
910
+ msgid "Related Image Length"
911
+ msgstr "Gerelateerde afbeedlingslengte"
912
+
913
+ #: PelTag.php:1754
914
+ msgid "CFA Repeat Pattern Dim"
915
+ msgstr ""
916
+
917
+ #: PelTag.php:1756
918
+ msgid "CFA Pattern"
919
+ msgstr "CFA-patroon"
920
+
921
+ #: PelTag.php:1758
922
+ msgid "Battery Level"
923
+ msgstr "Batterij-niveau"
924
+
925
+ #: PelTag.php:1760
926
+ msgid "Copyright"
927
+ msgstr "Auteursrecht"
928
+
929
+ #: PelTag.php:1762
930
+ msgid "Exposure Time"
931
+ msgstr "Belichtingstijd"
932
+
933
+ #: PelTag.php:1764
934
+ msgid "FNumber"
935
+ msgstr "F-getal"
936
+
937
+ #: PelTag.php:1766
938
+ msgid "IPTC/NAA"
939
+ msgstr "IPTC/NAA"
940
+
941
+ #: PelTag.php:1768
942
+ msgid "Exif IFD Pointer"
943
+ msgstr "Exif IFD Pointer"
944
+
945
+ #: PelTag.php:1770
946
+ msgid "Inter Color Profile"
947
+ msgstr "Inter kleurprofiel"
948
+
949
+ #: PelTag.php:1772
950
+ msgid "Exposure Program"
951
+ msgstr "Belichtingsprogramma"
952
+
953
+ #: PelTag.php:1774
954
+ msgid "Spectral Sensitivity"
955
+ msgstr "Spektrale gevoeligheid"
956
+
957
+ #: PelTag.php:1776
958
+ msgid "GPS Info IFD Pointer"
959
+ msgstr "GPS Info IFD Pointer"
960
+
961
+ #: PelTag.php:1778
962
+ msgid "ISO Speed Ratings"
963
+ msgstr "ISO-waarden"
964
+
965
+ #: PelTag.php:1780
966
+ msgid "OECF"
967
+ msgstr "OECF"
968
+
969
+ #: PelTag.php:1782
970
+ msgid "Exif Version"
971
+ msgstr "Exif versie"
972
+
973
+ #: PelTag.php:1784
974
+ msgid "Date and Time (original)"
975
+ msgstr "Datum en tijd (origineel)"
976
+
977
+ #: PelTag.php:1786
978
+ msgid "Date and Time (digitized)"
979
+ msgstr "Datum en tijd (gedigitaliseerd)"
980
+
981
+ #: PelTag.php:1788
982
+ msgid "Components Configuration"
983
+ msgstr "Componententconfiguratie"
984
+
985
+ #: PelTag.php:1790
986
+ msgid "Compressed Bits per Pixel"
987
+ msgstr "Gecomprimeerd aantal bits per pixel"
988
+
989
+ #: PelTag.php:1792
990
+ msgid "Shutter speed"
991
+ msgstr "Sluitertijd"
992
+
993
+ #: PelTag.php:1794
994
+ msgid "Aperture"
995
+ msgstr "Diafragma"
996
+
997
+ #: PelTag.php:1796
998
+ msgid "Brightness"
999
+ msgstr "Helderheid"
1000
+
1001
+ #: PelTag.php:1798
1002
+ msgid "Exposure Bias"
1003
+ msgstr "Belichtingscorrectie"
1004
+
1005
+ #: PelTag.php:1800
1006
+ msgid "Max Aperture Value"
1007
+ msgstr "Maximaal diafragma"
1008
+
1009
+ #: PelTag.php:1802
1010
+ msgid "Subject Distance"
1011
+ msgstr "Onderwerpsafstand"
1012
+
1013
+ #: PelTag.php:1804
1014
+ msgid "Metering Mode"
1015
+ msgstr "Lichtmeting"
1016
+
1017
+ #: PelTag.php:1806
1018
+ msgid "Light Source"
1019
+ msgstr "Lichtbron"
1020
+
1021
+ #: PelTag.php:1810
1022
+ msgid "Focal Length"
1023
+ msgstr "Brandpuntsafstand"
1024
+
1025
+ #: PelTag.php:1812
1026
+ msgid "Maker Note"
1027
+ msgstr "Opmerking van maker"
1028
+
1029
+ #: PelTag.php:1814
1030
+ msgid "User Comment"
1031
+ msgstr "Gebruikerscommentaarr"
1032
+
1033
+ #: PelTag.php:1816
1034
+ msgid "SubSec Time"
1035
+ msgstr "SubSec Tijd"
1036
+
1037
+ #: PelTag.php:1818
1038
+ msgid "SubSec Time Original"
1039
+ msgstr "SubSec Tijd (origineel)"
1040
+
1041
+ #: PelTag.php:1820
1042
+ msgid "SubSec Time Digitized"
1043
+ msgstr "SubSec Tijd (gedigitaliseerd)"
1044
+
1045
+ #: PelTag.php:1832
1046
+ msgid "FlashPix Version"
1047
+ msgstr "FlashPix versie"
1048
+
1049
+ #: PelTag.php:1834
1050
+ msgid "Color Space"
1051
+ msgstr "Kleurruimte"
1052
+
1053
+ #: PelTag.php:1836
1054
+ msgid "Pixel x-Dimension"
1055
+ msgstr "Pixel x-dimensie"
1056
+
1057
+ #: PelTag.php:1838
1058
+ msgid "Pixel y-Dimension"
1059
+ msgstr "Pixel y-dimensie"
1060
+
1061
+ #: PelTag.php:1840
1062
+ msgid "Related Sound File"
1063
+ msgstr "Gerelateerd geluidsbestand"
1064
+
1065
+ #: PelTag.php:1842
1066
+ msgid "Interoperability IFD Pointer"
1067
+ msgstr "Interoperabiliteits-IFD-Pointer"
1068
+
1069
+ #: PelTag.php:1844
1070
+ msgid "Flash Energy"
1071
+ msgstr "Flitsenergie"
1072
+
1073
+ #: PelTag.php:1846
1074
+ msgid "Spatial Frequency Response"
1075
+ msgstr "Ruimtelijke frequentie"
1076
+
1077
+ #: PelTag.php:1848
1078
+ msgid "Focal Plane x-Resolution"
1079
+ msgstr "x-resolutie focusvlak"
1080
+
1081
+ #: PelTag.php:1850
1082
+ msgid "Focal Plane y-Resolution"
1083
+ msgstr "y-resolutie focusvlak"
1084
+
1085
+ #: PelTag.php:1852
1086
+ msgid "Focal Plane Resolution Unit"
1087
+ msgstr "Eenheid resolutie focusvlak"
1088
+
1089
+ #: PelTag.php:1854
1090
+ msgid "Subject Location"
1091
+ msgstr "Locatie van onderwerp"
1092
+
1093
+ #: PelTag.php:1856
1094
+ msgid "Exposure index"
1095
+ msgstr "Belichtingsindex"
1096
+
1097
+ #: PelTag.php:1858
1098
+ msgid "Sensing Method"
1099
+ msgstr "Meetmethode"
1100
+
1101
+ #: PelTag.php:1860
1102
+ msgid "File Source"
1103
+ msgstr "Fil kilde"
1104
+
1105
+ #: PelTag.php:1862
1106
+ msgid "Scene Type"
1107
+ msgstr "Scenetype"
1108
+
1109
+ #: PelTag.php:1864
1110
+ msgid "Subject Area"
1111
+ msgstr "Onderwerpruimte"
1112
+
1113
+ #: PelTag.php:1866
1114
+ msgid "Custom Rendered"
1115
+ msgstr "ustom Rendered"
1116
+
1117
+ #: PelTag.php:1868
1118
+ msgid "Exposure Mode"
1119
+ msgstr "Belichtingsinstelling"
1120
+
1121
+ #: PelTag.php:1870
1122
+ msgid "White Balance"
1123
+ msgstr "Witbalans"
1124
+
1125
+ #: PelTag.php:1872
1126
+ msgid "Digital Zoom Ratio"
1127
+ msgstr "Digitale zoomfactoe"
1128
+
1129
+ #: PelTag.php:1874
1130
+ msgid "Focal Length In 35mm Film"
1131
+ msgstr "Brandpunt bij gebruik 35mm film"
1132
+
1133
+ #: PelTag.php:1876
1134
+ msgid "Scene Capture Type"
1135
+ msgstr "Scenetype"
1136
+
1137
+ #: PelTag.php:1878
1138
+ msgid "Gain Control"
1139
+ msgstr "Belichtingscorrectie"
1140
+
1141
+ #: PelTag.php:1880
1142
+ msgid "Contrast"
1143
+ msgstr "Contrast"
1144
+
1145
+ #: PelTag.php:1882
1146
+ msgid "Saturation"
1147
+ msgstr "Kleurverzadiging"
1148
+
1149
+ #: PelTag.php:1884
1150
+ msgid "Sharpness"
1151
+ msgstr "Scherpte"
1152
+
1153
+ #: PelTag.php:1886
1154
+ msgid "Device Setting Description"
1155
+ msgstr "Beschrijving apparaatinstellingen"
1156
+
1157
+ #: PelTag.php:1888
1158
+ msgid "Subject Distance Range"
1159
+ msgstr "Afstand tot onderwerp"
1160
+
1161
+ #: PelTag.php:1890
1162
+ msgid "Image Unique ID"
1163
+ msgstr "Uniek ID voor afbeelding"
1164
+
1165
+ #: PelTag.php:1892
1166
+ msgid "Gamma"
1167
+ msgstr "Gamma"
1168
+
1169
+ #: PelTag.php:1894
1170
+ msgid "Print IM"
1171
+ msgstr ""
1172
+
1173
+ #: PelTag.php:1964
1174
+ #, php-format
1175
+ msgid "Unknown Tag: 0x%04X"
1176
+ msgstr "Onbekende tag: 0x%04X"
1177
+
1178
+ #: PelTiff.php:255
1179
+ #, php-format
1180
+ msgid "Dumping TIFF data...\n"
1181
+ msgstr "TIFF data dumpen...\n"
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/pel.pot ADDED
@@ -0,0 +1,1165 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2006-11-19 20:48+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=CHARSET\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+
19
+ #: PelDataWindow.php:517
20
+ #, php-format
21
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
22
+ msgstr ""
23
+
24
+ #: PelEntryAscii.php:465
25
+ msgid "(Photographer)"
26
+ msgstr ""
27
+
28
+ #: PelEntryAscii.php:466
29
+ msgid "(Editor)"
30
+ msgstr ""
31
+
32
+ #: PelEntry.php:369
33
+ #, php-format
34
+ msgid " Tag: 0x%04X (%s)\n"
35
+ msgstr ""
36
+
37
+ #: PelEntry.php:371
38
+ #, php-format
39
+ msgid " Format : %d (%s)\n"
40
+ msgstr ""
41
+
42
+ #: PelEntry.php:373
43
+ #, php-format
44
+ msgid " Components: %d\n"
45
+ msgstr ""
46
+
47
+ #: PelEntry.php:376
48
+ #, php-format
49
+ msgid " Value : %s\n"
50
+ msgstr ""
51
+
52
+ #: PelEntry.php:377
53
+ #, php-format
54
+ msgid " Text : %s\n"
55
+ msgstr ""
56
+
57
+ #: PelEntryRational.php:136 PelEntryRational.php:141
58
+ #, php-format
59
+ msgid "f/%.01f"
60
+ msgstr ""
61
+
62
+ #: PelEntryRational.php:146
63
+ #, php-format
64
+ msgid "%.1f mm"
65
+ msgstr ""
66
+
67
+ #: PelEntryRational.php:151
68
+ #, php-format
69
+ msgid "%.1f m"
70
+ msgstr ""
71
+
72
+ #: PelEntryRational.php:157
73
+ #, php-format
74
+ msgid "1/%d sec."
75
+ msgstr ""
76
+
77
+ #: PelEntryRational.php:159
78
+ #, php-format
79
+ msgid "%d sec."
80
+ msgstr ""
81
+
82
+ #: PelEntryRational.php:267
83
+ #, php-format
84
+ msgid "%.0f/%.0f sec. (APEX: %d)"
85
+ msgstr ""
86
+
87
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
88
+ msgid "Unknown"
89
+ msgstr ""
90
+
91
+ #: PelEntryShort.php:144
92
+ msgid "Average"
93
+ msgstr ""
94
+
95
+ #: PelEntryShort.php:146
96
+ msgid "Center-Weighted Average"
97
+ msgstr ""
98
+
99
+ #: PelEntryShort.php:148
100
+ msgid "Spot"
101
+ msgstr ""
102
+
103
+ #: PelEntryShort.php:150
104
+ msgid "Multi Spot"
105
+ msgstr ""
106
+
107
+ #: PelEntryShort.php:152
108
+ msgid "Pattern"
109
+ msgstr ""
110
+
111
+ #: PelEntryShort.php:154
112
+ msgid "Partial"
113
+ msgstr ""
114
+
115
+ #: PelEntryShort.php:156 PelEntryShort.php:247
116
+ msgid "Other"
117
+ msgstr ""
118
+
119
+ #: PelEntryShort.php:165
120
+ msgid "Uncompressed"
121
+ msgstr ""
122
+
123
+ #: PelEntryShort.php:167
124
+ msgid "JPEG compression"
125
+ msgstr ""
126
+
127
+ #: PelEntryShort.php:177
128
+ msgid "chunky format"
129
+ msgstr ""
130
+
131
+ #: PelEntryShort.php:179
132
+ msgid "planar format"
133
+ msgstr ""
134
+
135
+ #: PelEntryShort.php:188 PelEntryShort.php:268
136
+ msgid "Not defined"
137
+ msgstr ""
138
+
139
+ #: PelEntryShort.php:190
140
+ msgid "One-chip color area sensor"
141
+ msgstr ""
142
+
143
+ #: PelEntryShort.php:192
144
+ msgid "Two-chip color area sensor"
145
+ msgstr ""
146
+
147
+ #: PelEntryShort.php:194
148
+ msgid "Three-chip color area sensor"
149
+ msgstr ""
150
+
151
+ #: PelEntryShort.php:196
152
+ msgid "Color sequential area sensor"
153
+ msgstr ""
154
+
155
+ #: PelEntryShort.php:198
156
+ msgid "Trilinear sensor"
157
+ msgstr ""
158
+
159
+ #: PelEntryShort.php:200
160
+ msgid "Color sequential linear sensor"
161
+ msgstr ""
162
+
163
+ #: PelEntryShort.php:211
164
+ msgid "Daylight"
165
+ msgstr ""
166
+
167
+ #: PelEntryShort.php:213
168
+ msgid "Fluorescent"
169
+ msgstr ""
170
+
171
+ #: PelEntryShort.php:215
172
+ msgid "Tungsten (incandescent light)"
173
+ msgstr ""
174
+
175
+ #: PelEntryShort.php:217 PelTag.php:1808
176
+ msgid "Flash"
177
+ msgstr ""
178
+
179
+ #: PelEntryShort.php:219
180
+ msgid "Fine weather"
181
+ msgstr ""
182
+
183
+ #: PelEntryShort.php:221
184
+ msgid "Cloudy weather"
185
+ msgstr ""
186
+
187
+ #: PelEntryShort.php:223
188
+ msgid "Shade"
189
+ msgstr ""
190
+
191
+ #: PelEntryShort.php:225
192
+ msgid "Daylight fluorescent"
193
+ msgstr ""
194
+
195
+ #: PelEntryShort.php:227
196
+ msgid "Day white fluorescent"
197
+ msgstr ""
198
+
199
+ #: PelEntryShort.php:229
200
+ msgid "Cool white fluorescent"
201
+ msgstr ""
202
+
203
+ #: PelEntryShort.php:231
204
+ msgid "White fluorescent"
205
+ msgstr ""
206
+
207
+ #: PelEntryShort.php:233
208
+ msgid "Standard light A"
209
+ msgstr ""
210
+
211
+ #: PelEntryShort.php:235
212
+ msgid "Standard light B"
213
+ msgstr ""
214
+
215
+ #: PelEntryShort.php:237
216
+ msgid "Standard light C"
217
+ msgstr ""
218
+
219
+ #: PelEntryShort.php:239
220
+ msgid "D55"
221
+ msgstr ""
222
+
223
+ #: PelEntryShort.php:241
224
+ msgid "D65"
225
+ msgstr ""
226
+
227
+ #: PelEntryShort.php:243
228
+ msgid "D75"
229
+ msgstr ""
230
+
231
+ #: PelEntryShort.php:245
232
+ msgid "ISO studio tungsten"
233
+ msgstr ""
234
+
235
+ #: PelEntryShort.php:257
236
+ msgid "Inch"
237
+ msgstr ""
238
+
239
+ #: PelEntryShort.php:259
240
+ msgid "Centimeter"
241
+ msgstr ""
242
+
243
+ #: PelEntryShort.php:270
244
+ msgid "Manual"
245
+ msgstr ""
246
+
247
+ #: PelEntryShort.php:272
248
+ msgid "Normal program"
249
+ msgstr ""
250
+
251
+ #: PelEntryShort.php:274
252
+ msgid "Aperture priority"
253
+ msgstr ""
254
+
255
+ #: PelEntryShort.php:276
256
+ msgid "Shutter priority"
257
+ msgstr ""
258
+
259
+ #: PelEntryShort.php:278
260
+ msgid "Creative program (biased toward depth of field)"
261
+ msgstr ""
262
+
263
+ #: PelEntryShort.php:280
264
+ msgid "Action program (biased toward fast shutter speed)"
265
+ msgstr ""
266
+
267
+ #: PelEntryShort.php:282
268
+ msgid "Portrait mode (for closeup photos with the background out of focus"
269
+ msgstr ""
270
+
271
+ #: PelEntryShort.php:284
272
+ msgid "Landscape mode (for landscape photos with the background in focus"
273
+ msgstr ""
274
+
275
+ #: PelEntryShort.php:293
276
+ msgid "top - left"
277
+ msgstr ""
278
+
279
+ #: PelEntryShort.php:295
280
+ msgid "top - right"
281
+ msgstr ""
282
+
283
+ #: PelEntryShort.php:297
284
+ msgid "bottom - right"
285
+ msgstr ""
286
+
287
+ #: PelEntryShort.php:299
288
+ msgid "bottom - left"
289
+ msgstr ""
290
+
291
+ #: PelEntryShort.php:301
292
+ msgid "left - top"
293
+ msgstr ""
294
+
295
+ #: PelEntryShort.php:303
296
+ msgid "right - top"
297
+ msgstr ""
298
+
299
+ #: PelEntryShort.php:305
300
+ msgid "right - bottom"
301
+ msgstr ""
302
+
303
+ #: PelEntryShort.php:307
304
+ msgid "left - bottom"
305
+ msgstr ""
306
+
307
+ #: PelEntryShort.php:316
308
+ msgid "centered"
309
+ msgstr ""
310
+
311
+ #: PelEntryShort.php:318
312
+ msgid "co-sited"
313
+ msgstr ""
314
+
315
+ #: PelEntryShort.php:351
316
+ msgid "Uncalibrated"
317
+ msgstr ""
318
+
319
+ #: PelEntryShort.php:360
320
+ msgid "Flash did not fire."
321
+ msgstr ""
322
+
323
+ #: PelEntryShort.php:362
324
+ msgid "Flash fired."
325
+ msgstr ""
326
+
327
+ #: PelEntryShort.php:364
328
+ msgid "Strobe return light not detected."
329
+ msgstr ""
330
+
331
+ #: PelEntryShort.php:366
332
+ msgid "Strobe return light detected."
333
+ msgstr ""
334
+
335
+ #: PelEntryShort.php:368
336
+ msgid "Flash fired, compulsory flash mode."
337
+ msgstr ""
338
+
339
+ #: PelEntryShort.php:370
340
+ msgid "Flash fired, compulsory flash mode, return light not detected."
341
+ msgstr ""
342
+
343
+ #: PelEntryShort.php:372
344
+ msgid "Flash fired, compulsory flash mode, return light detected."
345
+ msgstr ""
346
+
347
+ #: PelEntryShort.php:374
348
+ msgid "Flash did not fire, compulsory flash mode."
349
+ msgstr ""
350
+
351
+ #: PelEntryShort.php:376
352
+ msgid "Flash did not fire, auto mode."
353
+ msgstr ""
354
+
355
+ #: PelEntryShort.php:378
356
+ msgid "Flash fired, auto mode."
357
+ msgstr ""
358
+
359
+ #: PelEntryShort.php:380
360
+ msgid "Flash fired, auto mode, return light not detected."
361
+ msgstr ""
362
+
363
+ #: PelEntryShort.php:382
364
+ msgid "Flash fired, auto mode, return light detected."
365
+ msgstr ""
366
+
367
+ #: PelEntryShort.php:384
368
+ msgid "No flash function."
369
+ msgstr ""
370
+
371
+ #: PelEntryShort.php:386
372
+ msgid "Flash fired, red-eye reduction mode."
373
+ msgstr ""
374
+
375
+ #: PelEntryShort.php:388
376
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
377
+ msgstr ""
378
+
379
+ #: PelEntryShort.php:390
380
+ msgid "Flash fired, red-eye reduction mode, return light detected."
381
+ msgstr ""
382
+
383
+ #: PelEntryShort.php:392
384
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
385
+ msgstr ""
386
+
387
+ #: PelEntryShort.php:394
388
+ msgid ""
389
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
390
+ "detected."
391
+ msgstr ""
392
+
393
+ #: PelEntryShort.php:396
394
+ msgid ""
395
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
396
+ "detected."
397
+ msgstr ""
398
+
399
+ #: PelEntryShort.php:398
400
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
401
+ msgstr ""
402
+
403
+ #: PelEntryShort.php:400
404
+ msgid "Flash fired, auto mode, red-eye reduction mode."
405
+ msgstr ""
406
+
407
+ #: PelEntryShort.php:402
408
+ msgid ""
409
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
410
+ msgstr ""
411
+
412
+ #: PelEntryShort.php:404
413
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
414
+ msgstr ""
415
+
416
+ #: PelEntryShort.php:413
417
+ msgid "Normal process"
418
+ msgstr ""
419
+
420
+ #: PelEntryShort.php:415
421
+ msgid "Custom process"
422
+ msgstr ""
423
+
424
+ #: PelEntryShort.php:424
425
+ msgid "Auto exposure"
426
+ msgstr ""
427
+
428
+ #: PelEntryShort.php:426
429
+ msgid "Manual exposure"
430
+ msgstr ""
431
+
432
+ #: PelEntryShort.php:428
433
+ msgid "Auto bracket"
434
+ msgstr ""
435
+
436
+ #: PelEntryShort.php:437
437
+ msgid "Auto white balance"
438
+ msgstr ""
439
+
440
+ #: PelEntryShort.php:439
441
+ msgid "Manual white balance"
442
+ msgstr ""
443
+
444
+ #: PelEntryShort.php:448
445
+ msgid "Standard"
446
+ msgstr ""
447
+
448
+ #: PelEntryShort.php:450
449
+ msgid "Landscape"
450
+ msgstr ""
451
+
452
+ #: PelEntryShort.php:452
453
+ msgid "Portrait"
454
+ msgstr ""
455
+
456
+ #: PelEntryShort.php:454
457
+ msgid "Night scene"
458
+ msgstr ""
459
+
460
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
461
+ msgid "Normal"
462
+ msgstr ""
463
+
464
+ #: PelEntryShort.php:465
465
+ msgid "Low gain up"
466
+ msgstr ""
467
+
468
+ #: PelEntryShort.php:467
469
+ msgid "High gain up"
470
+ msgstr ""
471
+
472
+ #: PelEntryShort.php:469
473
+ msgid "Low gain down"
474
+ msgstr ""
475
+
476
+ #: PelEntryShort.php:471
477
+ msgid "High gain down"
478
+ msgstr ""
479
+
480
+ #: PelEntryShort.php:482
481
+ msgid "Low saturation"
482
+ msgstr ""
483
+
484
+ #: PelEntryShort.php:484
485
+ msgid "High saturation"
486
+ msgstr ""
487
+
488
+ #: PelEntryShort.php:496
489
+ msgid "Soft"
490
+ msgstr ""
491
+
492
+ #: PelEntryShort.php:498
493
+ msgid "Hard"
494
+ msgstr ""
495
+
496
+ #: PelEntryShort.php:509
497
+ msgid "Macro"
498
+ msgstr ""
499
+
500
+ #: PelEntryShort.php:511
501
+ msgid "Close view"
502
+ msgstr ""
503
+
504
+ #: PelEntryShort.php:513
505
+ msgid "Distant view"
506
+ msgstr ""
507
+
508
+ #: PelEntryShort.php:521
509
+ #, php-format
510
+ msgid "(x,y) = (%d,%d)"
511
+ msgstr ""
512
+
513
+ #: PelEntryShort.php:523
514
+ #, php-format
515
+ msgid "Within distance %d of (x,y) = (%d,%d)"
516
+ msgstr ""
517
+
518
+ #: PelEntryShort.php:526
519
+ #, php-format
520
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
521
+ msgstr ""
522
+
523
+ #: PelEntryShort.php:531
524
+ #, php-format
525
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
526
+ msgstr ""
527
+
528
+ #: PelEntryUndefined.php:390
529
+ #, php-format
530
+ msgid "Exif %s"
531
+ msgstr ""
532
+
533
+ #: PelEntryUndefined.php:392
534
+ #, php-format
535
+ msgid "Exif Version %s"
536
+ msgstr ""
537
+
538
+ #: PelEntryUndefined.php:396
539
+ #, php-format
540
+ msgid "FlashPix %s"
541
+ msgstr ""
542
+
543
+ #: PelEntryUndefined.php:398
544
+ #, php-format
545
+ msgid "FlashPix Version %s"
546
+ msgstr ""
547
+
548
+ #: PelEntryUndefined.php:402
549
+ #, php-format
550
+ msgid "Interoperability %s"
551
+ msgstr ""
552
+
553
+ #: PelEntryUndefined.php:404
554
+ #, php-format
555
+ msgid "Interoperability Version %s"
556
+ msgstr ""
557
+
558
+ #: PelEntryUndefined.php:410
559
+ #, php-format
560
+ msgid "Version %s"
561
+ msgstr ""
562
+
563
+ #: PelExif.php:169
564
+ msgid "Dumping Exif data...\n"
565
+ msgstr ""
566
+
567
+ #: PelFormat.php:192 PelFormat.php:220
568
+ #, php-format
569
+ msgid "Unknown format: 0x%X"
570
+ msgstr ""
571
+
572
+ #: PelIfd.php:1180
573
+ #, php-format
574
+ msgid "Dumping IFD %s with %d entries...\n"
575
+ msgstr ""
576
+
577
+ #: PelIfd.php:1186
578
+ #, php-format
579
+ msgid "Dumping %d sub IFDs...\n"
580
+ msgstr ""
581
+
582
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
583
+ #, php-format
584
+ msgid "Unknown marker: 0x%02X"
585
+ msgstr ""
586
+
587
+ #: PelJpegMarker.php:302
588
+ msgid "Encoding (baseline)"
589
+ msgstr ""
590
+
591
+ #: PelJpegMarker.php:304
592
+ msgid "Encoding (extended sequential)"
593
+ msgstr ""
594
+
595
+ #: PelJpegMarker.php:306
596
+ msgid "Encoding (progressive)"
597
+ msgstr ""
598
+
599
+ #: PelJpegMarker.php:308
600
+ msgid "Encoding (lossless)"
601
+ msgstr ""
602
+
603
+ #: PelJpegMarker.php:310
604
+ msgid "Encoding (differential sequential)"
605
+ msgstr ""
606
+
607
+ #: PelJpegMarker.php:312
608
+ msgid "Encoding (differential progressive)"
609
+ msgstr ""
610
+
611
+ #: PelJpegMarker.php:314
612
+ msgid "Encoding (differential lossless)"
613
+ msgstr ""
614
+
615
+ #: PelJpegMarker.php:316
616
+ msgid "Encoding (extended sequential, arithmetic)"
617
+ msgstr ""
618
+
619
+ #: PelJpegMarker.php:318
620
+ msgid "Encoding (progressive, arithmetic)"
621
+ msgstr ""
622
+
623
+ #: PelJpegMarker.php:320
624
+ msgid "Encoding (lossless, arithmetic)"
625
+ msgstr ""
626
+
627
+ #: PelJpegMarker.php:322
628
+ msgid "Encoding (differential sequential, arithmetic)"
629
+ msgstr ""
630
+
631
+ #: PelJpegMarker.php:324
632
+ msgid "Encoding (differential progressive, arithmetic)"
633
+ msgstr ""
634
+
635
+ #: PelJpegMarker.php:326
636
+ msgid "Encoding (differential lossless, arithmetic)"
637
+ msgstr ""
638
+
639
+ #: PelJpegMarker.php:328
640
+ msgid "Start of image"
641
+ msgstr ""
642
+
643
+ #: PelJpegMarker.php:330
644
+ msgid "End of image"
645
+ msgstr ""
646
+
647
+ #: PelJpegMarker.php:332
648
+ msgid "Start of scan"
649
+ msgstr ""
650
+
651
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
652
+ msgid "Comment"
653
+ msgstr ""
654
+
655
+ #: PelJpegMarker.php:336
656
+ msgid "Define Huffman table"
657
+ msgstr ""
658
+
659
+ #: PelJpegMarker.php:338
660
+ msgid "Extension"
661
+ msgstr ""
662
+
663
+ #: PelJpegMarker.php:340
664
+ msgid "Define arithmetic coding conditioning"
665
+ msgstr ""
666
+
667
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
668
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
669
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
670
+ #, php-format
671
+ msgid "Restart %d"
672
+ msgstr ""
673
+
674
+ #: PelJpegMarker.php:358
675
+ msgid "Define quantization table"
676
+ msgstr ""
677
+
678
+ #: PelJpegMarker.php:360
679
+ msgid "Define number of lines"
680
+ msgstr ""
681
+
682
+ #: PelJpegMarker.php:362
683
+ msgid "Define restart interval"
684
+ msgstr ""
685
+
686
+ #: PelJpegMarker.php:364
687
+ msgid "Define hierarchical progression"
688
+ msgstr ""
689
+
690
+ #: PelJpegMarker.php:366
691
+ msgid "Expand reference component"
692
+ msgstr ""
693
+
694
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
695
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
696
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
697
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
698
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
699
+ #: PelJpegMarker.php:398
700
+ #, php-format
701
+ msgid "Application segment %d"
702
+ msgstr ""
703
+
704
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
705
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
706
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
707
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
708
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
709
+ #, php-format
710
+ msgid "Extension %d"
711
+ msgstr ""
712
+
713
+ #: PelJpeg.php:543
714
+ msgid "Dumping JPEG data...\n"
715
+ msgstr ""
716
+
717
+ #: PelJpeg.php:547
718
+ #, php-format
719
+ msgid "Section %d (marker 0x%02X - %s):\n"
720
+ msgstr ""
721
+
722
+ #: PelJpeg.php:549
723
+ #, php-format
724
+ msgid " Description: %s\n"
725
+ msgstr ""
726
+
727
+ #: PelJpeg.php:557
728
+ msgid " Content : Exif data\n"
729
+ msgstr ""
730
+
731
+ #: PelJpeg.php:560
732
+ #, php-format
733
+ msgid " Content : %s\n"
734
+ msgstr ""
735
+
736
+ #: PelJpeg.php:562
737
+ msgid " Content : Unknown\n"
738
+ msgstr ""
739
+
740
+ #: PelTag.php:1649
741
+ #, php-format
742
+ msgid "Unknown: 0x%04X"
743
+ msgstr ""
744
+
745
+ #: PelTag.php:1678
746
+ msgid "Interoperability Index"
747
+ msgstr ""
748
+
749
+ #: PelTag.php:1680
750
+ msgid "Interoperability Version"
751
+ msgstr ""
752
+
753
+ #: PelTag.php:1682
754
+ msgid "Image Width"
755
+ msgstr ""
756
+
757
+ #: PelTag.php:1684
758
+ msgid "Image Length"
759
+ msgstr ""
760
+
761
+ #: PelTag.php:1686
762
+ msgid "Bits per Sample"
763
+ msgstr ""
764
+
765
+ #: PelTag.php:1688
766
+ msgid "Compression"
767
+ msgstr ""
768
+
769
+ #: PelTag.php:1690
770
+ msgid "Photometric Interpretation"
771
+ msgstr ""
772
+
773
+ #: PelTag.php:1692
774
+ msgid "Fill Order"
775
+ msgstr ""
776
+
777
+ #: PelTag.php:1694
778
+ msgid "Document Name"
779
+ msgstr ""
780
+
781
+ #: PelTag.php:1696
782
+ msgid "Image Description"
783
+ msgstr ""
784
+
785
+ #: PelTag.php:1698
786
+ msgid "Manufacturer"
787
+ msgstr ""
788
+
789
+ #: PelTag.php:1700
790
+ msgid "Model"
791
+ msgstr ""
792
+
793
+ #: PelTag.php:1702
794
+ msgid "Strip Offsets"
795
+ msgstr ""
796
+
797
+ #: PelTag.php:1704
798
+ msgid "Orientation"
799
+ msgstr ""
800
+
801
+ #: PelTag.php:1706
802
+ msgid "Samples per Pixel"
803
+ msgstr ""
804
+
805
+ #: PelTag.php:1708
806
+ msgid "Rows per Strip"
807
+ msgstr ""
808
+
809
+ #: PelTag.php:1710
810
+ msgid "Strip Byte Count"
811
+ msgstr ""
812
+
813
+ #: PelTag.php:1712
814
+ msgid "x-Resolution"
815
+ msgstr ""
816
+
817
+ #: PelTag.php:1714
818
+ msgid "y-Resolution"
819
+ msgstr ""
820
+
821
+ #: PelTag.php:1716
822
+ msgid "Planar Configuration"
823
+ msgstr ""
824
+
825
+ #: PelTag.php:1718
826
+ msgid "Resolution Unit"
827
+ msgstr ""
828
+
829
+ #: PelTag.php:1720
830
+ msgid "Transfer Function"
831
+ msgstr ""
832
+
833
+ #: PelTag.php:1722
834
+ msgid "Software"
835
+ msgstr ""
836
+
837
+ #: PelTag.php:1724
838
+ msgid "Date and Time"
839
+ msgstr ""
840
+
841
+ #: PelTag.php:1726
842
+ msgid "Artist"
843
+ msgstr ""
844
+
845
+ #: PelTag.php:1728
846
+ msgid "White Point"
847
+ msgstr ""
848
+
849
+ #: PelTag.php:1730
850
+ msgid "Primary Chromaticities"
851
+ msgstr ""
852
+
853
+ #: PelTag.php:1732
854
+ msgid "Transfer Range"
855
+ msgstr ""
856
+
857
+ #: PelTag.php:1734
858
+ msgid "JPEGProc"
859
+ msgstr ""
860
+
861
+ #: PelTag.php:1736
862
+ msgid "JPEG Interchange Format"
863
+ msgstr ""
864
+
865
+ #: PelTag.php:1738
866
+ msgid "JPEG Interchange Format Length"
867
+ msgstr ""
868
+
869
+ #: PelTag.php:1740
870
+ msgid "YCbCr Coefficients"
871
+ msgstr ""
872
+
873
+ #: PelTag.php:1742
874
+ msgid "YCbCr Sub-Sampling"
875
+ msgstr ""
876
+
877
+ #: PelTag.php:1744
878
+ msgid "YCbCr Positioning"
879
+ msgstr ""
880
+
881
+ #: PelTag.php:1746
882
+ msgid "Reference Black/White"
883
+ msgstr ""
884
+
885
+ #: PelTag.php:1748
886
+ msgid "Related Image File Format"
887
+ msgstr ""
888
+
889
+ #: PelTag.php:1750
890
+ msgid "Related Image Width"
891
+ msgstr ""
892
+
893
+ #: PelTag.php:1752
894
+ msgid "Related Image Length"
895
+ msgstr ""
896
+
897
+ #: PelTag.php:1754
898
+ msgid "CFA Repeat Pattern Dim"
899
+ msgstr ""
900
+
901
+ #: PelTag.php:1756
902
+ msgid "CFA Pattern"
903
+ msgstr ""
904
+
905
+ #: PelTag.php:1758
906
+ msgid "Battery Level"
907
+ msgstr ""
908
+
909
+ #: PelTag.php:1760
910
+ msgid "Copyright"
911
+ msgstr ""
912
+
913
+ #: PelTag.php:1762
914
+ msgid "Exposure Time"
915
+ msgstr ""
916
+
917
+ #: PelTag.php:1764
918
+ msgid "FNumber"
919
+ msgstr ""
920
+
921
+ #: PelTag.php:1766
922
+ msgid "IPTC/NAA"
923
+ msgstr ""
924
+
925
+ #: PelTag.php:1768
926
+ msgid "Exif IFD Pointer"
927
+ msgstr ""
928
+
929
+ #: PelTag.php:1770
930
+ msgid "Inter Color Profile"
931
+ msgstr ""
932
+
933
+ #: PelTag.php:1772
934
+ msgid "Exposure Program"
935
+ msgstr ""
936
+
937
+ #: PelTag.php:1774
938
+ msgid "Spectral Sensitivity"
939
+ msgstr ""
940
+
941
+ #: PelTag.php:1776
942
+ msgid "GPS Info IFD Pointer"
943
+ msgstr ""
944
+
945
+ #: PelTag.php:1778
946
+ msgid "ISO Speed Ratings"
947
+ msgstr ""
948
+
949
+ #: PelTag.php:1780
950
+ msgid "OECF"
951
+ msgstr ""
952
+
953
+ #: PelTag.php:1782
954
+ msgid "Exif Version"
955
+ msgstr ""
956
+
957
+ #: PelTag.php:1784
958
+ msgid "Date and Time (original)"
959
+ msgstr ""
960
+
961
+ #: PelTag.php:1786
962
+ msgid "Date and Time (digitized)"
963
+ msgstr ""
964
+
965
+ #: PelTag.php:1788
966
+ msgid "Components Configuration"
967
+ msgstr ""
968
+
969
+ #: PelTag.php:1790
970
+ msgid "Compressed Bits per Pixel"
971
+ msgstr ""
972
+
973
+ #: PelTag.php:1792
974
+ msgid "Shutter speed"
975
+ msgstr ""
976
+
977
+ #: PelTag.php:1794
978
+ msgid "Aperture"
979
+ msgstr ""
980
+
981
+ #: PelTag.php:1796
982
+ msgid "Brightness"
983
+ msgstr ""
984
+
985
+ #: PelTag.php:1798
986
+ msgid "Exposure Bias"
987
+ msgstr ""
988
+
989
+ #: PelTag.php:1800
990
+ msgid "Max Aperture Value"
991
+ msgstr ""
992
+
993
+ #: PelTag.php:1802
994
+ msgid "Subject Distance"
995
+ msgstr ""
996
+
997
+ #: PelTag.php:1804
998
+ msgid "Metering Mode"
999
+ msgstr ""
1000
+
1001
+ #: PelTag.php:1806
1002
+ msgid "Light Source"
1003
+ msgstr ""
1004
+
1005
+ #: PelTag.php:1810
1006
+ msgid "Focal Length"
1007
+ msgstr ""
1008
+
1009
+ #: PelTag.php:1812
1010
+ msgid "Maker Note"
1011
+ msgstr ""
1012
+
1013
+ #: PelTag.php:1814
1014
+ msgid "User Comment"
1015
+ msgstr ""
1016
+
1017
+ #: PelTag.php:1816
1018
+ msgid "SubSec Time"
1019
+ msgstr ""
1020
+
1021
+ #: PelTag.php:1818
1022
+ msgid "SubSec Time Original"
1023
+ msgstr ""
1024
+
1025
+ #: PelTag.php:1820
1026
+ msgid "SubSec Time Digitized"
1027
+ msgstr ""
1028
+
1029
+ #: PelTag.php:1832
1030
+ msgid "FlashPix Version"
1031
+ msgstr ""
1032
+
1033
+ #: PelTag.php:1834
1034
+ msgid "Color Space"
1035
+ msgstr ""
1036
+
1037
+ #: PelTag.php:1836
1038
+ msgid "Pixel x-Dimension"
1039
+ msgstr ""
1040
+
1041
+ #: PelTag.php:1838
1042
+ msgid "Pixel y-Dimension"
1043
+ msgstr ""
1044
+
1045
+ #: PelTag.php:1840
1046
+ msgid "Related Sound File"
1047
+ msgstr ""
1048
+
1049
+ #: PelTag.php:1842
1050
+ msgid "Interoperability IFD Pointer"
1051
+ msgstr ""
1052
+
1053
+ #: PelTag.php:1844
1054
+ msgid "Flash Energy"
1055
+ msgstr ""
1056
+
1057
+ #: PelTag.php:1846
1058
+ msgid "Spatial Frequency Response"
1059
+ msgstr ""
1060
+
1061
+ #: PelTag.php:1848
1062
+ msgid "Focal Plane x-Resolution"
1063
+ msgstr ""
1064
+
1065
+ #: PelTag.php:1850
1066
+ msgid "Focal Plane y-Resolution"
1067
+ msgstr ""
1068
+
1069
+ #: PelTag.php:1852
1070
+ msgid "Focal Plane Resolution Unit"
1071
+ msgstr ""
1072
+
1073
+ #: PelTag.php:1854
1074
+ msgid "Subject Location"
1075
+ msgstr ""
1076
+
1077
+ #: PelTag.php:1856
1078
+ msgid "Exposure index"
1079
+ msgstr ""
1080
+
1081
+ #: PelTag.php:1858
1082
+ msgid "Sensing Method"
1083
+ msgstr ""
1084
+
1085
+ #: PelTag.php:1860
1086
+ msgid "File Source"
1087
+ msgstr ""
1088
+
1089
+ #: PelTag.php:1862
1090
+ msgid "Scene Type"
1091
+ msgstr ""
1092
+
1093
+ #: PelTag.php:1864
1094
+ msgid "Subject Area"
1095
+ msgstr ""
1096
+
1097
+ #: PelTag.php:1866
1098
+ msgid "Custom Rendered"
1099
+ msgstr ""
1100
+
1101
+ #: PelTag.php:1868
1102
+ msgid "Exposure Mode"
1103
+ msgstr ""
1104
+
1105
+ #: PelTag.php:1870
1106
+ msgid "White Balance"
1107
+ msgstr ""
1108
+
1109
+ #: PelTag.php:1872
1110
+ msgid "Digital Zoom Ratio"
1111
+ msgstr ""
1112
+
1113
+ #: PelTag.php:1874
1114
+ msgid "Focal Length In 35mm Film"
1115
+ msgstr ""
1116
+
1117
+ #: PelTag.php:1876
1118
+ msgid "Scene Capture Type"
1119
+ msgstr ""
1120
+
1121
+ #: PelTag.php:1878
1122
+ msgid "Gain Control"
1123
+ msgstr ""
1124
+
1125
+ #: PelTag.php:1880
1126
+ msgid "Contrast"
1127
+ msgstr ""
1128
+
1129
+ #: PelTag.php:1882
1130
+ msgid "Saturation"
1131
+ msgstr ""
1132
+
1133
+ #: PelTag.php:1884
1134
+ msgid "Sharpness"
1135
+ msgstr ""
1136
+
1137
+ #: PelTag.php:1886
1138
+ msgid "Device Setting Description"
1139
+ msgstr ""
1140
+
1141
+ #: PelTag.php:1888
1142
+ msgid "Subject Distance Range"
1143
+ msgstr ""
1144
+
1145
+ #: PelTag.php:1890
1146
+ msgid "Image Unique ID"
1147
+ msgstr ""
1148
+
1149
+ #: PelTag.php:1892
1150
+ msgid "Gamma"
1151
+ msgstr ""
1152
+
1153
+ #: PelTag.php:1894
1154
+ msgid "Print IM"
1155
+ msgstr ""
1156
+
1157
+ #: PelTag.php:1964
1158
+ #, php-format
1159
+ msgid "Unknown Tag: 0x%04X"
1160
+ msgstr ""
1161
+
1162
+ #: PelTiff.php:255
1163
+ #, php-format
1164
+ msgid "Dumping TIFF data...\n"
1165
+ msgstr ""
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/po/pl.po ADDED
@@ -0,0 +1,3053 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Polish translation for the PHP Exif Library (PEL).
2
+ # Originally from libexif.
3
+ # Copyright (C) 2005 Martin Geisler
4
+ # This file is distributed under the term of the GPL.
5
+ # Jakub Bogusz <qboosh@pld-linux.org>, 2005.
6
+ #
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: libexif 0.6.12\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2006-11-19 20:48+0100\n"
12
+ "PO-Revision-Date: 2005-10-03 13:44+0200\n"
13
+ "Last-Translator: Jakub Bogusz <qboosh@pld-linux.org>\n"
14
+ "Language-Team: Polish <translation-team-pl@lists.sourceforge.net>\n"
15
+ "MIME-Version: 1.0\n"
16
+ "Content-Type: text/plain; charset=UTF-8\n"
17
+ "Content-Transfer-Encoding: 8bit\n"
18
+
19
+ #: PelDataWindow.php:517
20
+ #, php-format
21
+ msgid "DataWindow: %d bytes in [%d, %d] of %d bytes"
22
+ msgstr ""
23
+
24
+ #: PelEntryAscii.php:465
25
+ msgid "(Photographer)"
26
+ msgstr "(Fotograf)"
27
+
28
+ #: PelEntryAscii.php:466
29
+ msgid "(Editor)"
30
+ msgstr "(Redaktor)"
31
+
32
+ #: PelEntry.php:369
33
+ #, php-format
34
+ msgid " Tag: 0x%04X (%s)\n"
35
+ msgstr ""
36
+
37
+ #: PelEntry.php:371
38
+ #, php-format
39
+ msgid " Format : %d (%s)\n"
40
+ msgstr ""
41
+
42
+ #: PelEntry.php:373
43
+ #, php-format
44
+ msgid " Components: %d\n"
45
+ msgstr ""
46
+
47
+ #: PelEntry.php:376
48
+ #, php-format
49
+ msgid " Value : %s\n"
50
+ msgstr ""
51
+
52
+ #: PelEntry.php:377
53
+ #, php-format
54
+ msgid " Text : %s\n"
55
+ msgstr ""
56
+
57
+ #: PelEntryRational.php:136 PelEntryRational.php:141
58
+ #, php-format
59
+ msgid "f/%.01f"
60
+ msgstr ""
61
+
62
+ #: PelEntryRational.php:146
63
+ #, php-format
64
+ msgid "%.1f mm"
65
+ msgstr ""
66
+
67
+ #: PelEntryRational.php:151
68
+ #, php-format
69
+ msgid "%.1f m"
70
+ msgstr ""
71
+
72
+ #: PelEntryRational.php:157
73
+ #, fuzzy, php-format
74
+ msgid "1/%d sec."
75
+ msgstr "1/%d"
76
+
77
+ #: PelEntryRational.php:159
78
+ #, php-format
79
+ msgid "%d sec."
80
+ msgstr ""
81
+
82
+ #: PelEntryRational.php:267
83
+ #, php-format
84
+ msgid "%.0f/%.0f sec. (APEX: %d)"
85
+ msgstr ""
86
+
87
+ #: PelEntryShort.php:142 PelEntryShort.php:209 PelEntryShort.php:507
88
+ msgid "Unknown"
89
+ msgstr "Brak informacji"
90
+
91
+ #: PelEntryShort.php:144
92
+ msgid "Average"
93
+ msgstr "Średnia"
94
+
95
+ #: PelEntryShort.php:146
96
+ msgid "Center-Weighted Average"
97
+ msgstr "Średnia centralnie ważona"
98
+
99
+ #: PelEntryShort.php:148
100
+ msgid "Spot"
101
+ msgstr "Punktowy"
102
+
103
+ #: PelEntryShort.php:150
104
+ msgid "Multi Spot"
105
+ msgstr "Wielopunktowy"
106
+
107
+ #: PelEntryShort.php:152
108
+ msgid "Pattern"
109
+ msgstr "Wzorzec"
110
+
111
+ #: PelEntryShort.php:154
112
+ msgid "Partial"
113
+ msgstr "Częściowy"
114
+
115
+ #: PelEntryShort.php:156 PelEntryShort.php:247
116
+ msgid "Other"
117
+ msgstr "Inny"
118
+
119
+ #: PelEntryShort.php:165
120
+ msgid "Uncompressed"
121
+ msgstr "Bez kompresji"
122
+
123
+ #: PelEntryShort.php:167
124
+ msgid "JPEG compression"
125
+ msgstr "Kompresja JPEG"
126
+
127
+ #: PelEntryShort.php:177
128
+ msgid "chunky format"
129
+ msgstr "format blokowy"
130
+
131
+ #: PelEntryShort.php:179
132
+ msgid "planar format"
133
+ msgstr "format płaski"
134
+
135
+ #: PelEntryShort.php:188 PelEntryShort.php:268
136
+ msgid "Not defined"
137
+ msgstr "Nieokreślony"
138
+
139
+ #: PelEntryShort.php:190
140
+ msgid "One-chip color area sensor"
141
+ msgstr "Jednoukładowy czujnik obszaru koloru"
142
+
143
+ #: PelEntryShort.php:192
144
+ msgid "Two-chip color area sensor"
145
+ msgstr "Dwuukładowy czujnik obszaru koloru"
146
+
147
+ #: PelEntryShort.php:194
148
+ msgid "Three-chip color area sensor"
149
+ msgstr "Trzyukładowy czujnik obszaru koloru"
150
+
151
+ #: PelEntryShort.php:196
152
+ msgid "Color sequential area sensor"
153
+ msgstr "Czujnik sekwencyjny obszaru koloru"
154
+
155
+ #: PelEntryShort.php:198
156
+ msgid "Trilinear sensor"
157
+ msgstr "Czujnik trzyliniowy"
158
+
159
+ #: PelEntryShort.php:200
160
+ msgid "Color sequential linear sensor"
161
+ msgstr "Czujnik sekwencyjny liniowy koloru"
162
+
163
+ #: PelEntryShort.php:211
164
+ msgid "Daylight"
165
+ msgstr "Światło dzienne"
166
+
167
+ #: PelEntryShort.php:213
168
+ msgid "Fluorescent"
169
+ msgstr "Fluorescencja"
170
+
171
+ #: PelEntryShort.php:215
172
+ #, fuzzy
173
+ msgid "Tungsten (incandescent light)"
174
+ msgstr "Żarówka wolframowa"
175
+
176
+ #: PelEntryShort.php:217 PelTag.php:1808
177
+ msgid "Flash"
178
+ msgstr "Flesz"
179
+
180
+ #: PelEntryShort.php:219
181
+ msgid "Fine weather"
182
+ msgstr "Dobra pogoda"
183
+
184
+ #: PelEntryShort.php:221
185
+ msgid "Cloudy weather"
186
+ msgstr "Pochmurna pogoda"
187
+
188
+ #: PelEntryShort.php:223
189
+ msgid "Shade"
190
+ msgstr "Cień"
191
+
192
+ #: PelEntryShort.php:225
193
+ msgid "Daylight fluorescent"
194
+ msgstr "Fluorescencyjne światło dzienne"
195
+
196
+ #: PelEntryShort.php:227
197
+ msgid "Day white fluorescent"
198
+ msgstr "Białe fluorescencyjne światło dzienne"
199
+
200
+ #: PelEntryShort.php:229
201
+ msgid "Cool white fluorescent"
202
+ msgstr "Zimne białe światło fluorescencyjne"
203
+
204
+ #: PelEntryShort.php:231
205
+ msgid "White fluorescent"
206
+ msgstr "Białe światło fluorescencyjne"
207
+
208
+ #: PelEntryShort.php:233
209
+ msgid "Standard light A"
210
+ msgstr "Światło standardowe A"
211
+
212
+ #: PelEntryShort.php:235
213
+ msgid "Standard light B"
214
+ msgstr "Światło standardowe B"
215
+
216
+ #: PelEntryShort.php:237
217
+ msgid "Standard light C"
218
+ msgstr "Światło standardowe C"
219
+
220
+ #: PelEntryShort.php:239
221
+ msgid "D55"
222
+ msgstr "D55"
223
+
224
+ #: PelEntryShort.php:241
225
+ msgid "D65"
226
+ msgstr "D65"
227
+
228
+ #: PelEntryShort.php:243
229
+ msgid "D75"
230
+ msgstr "D75"
231
+
232
+ #: PelEntryShort.php:245
233
+ msgid "ISO studio tungsten"
234
+ msgstr "Wolframowe oświetlenie studyjne ISO"
235
+
236
+ #: PelEntryShort.php:257
237
+ msgid "Inch"
238
+ msgstr "Cal"
239
+
240
+ #: PelEntryShort.php:259
241
+ msgid "Centimeter"
242
+ msgstr "Centymetr"
243
+
244
+ #: PelEntryShort.php:270
245
+ msgid "Manual"
246
+ msgstr "Ręczny"
247
+
248
+ #: PelEntryShort.php:272
249
+ msgid "Normal program"
250
+ msgstr "Program zwykły"
251
+
252
+ #: PelEntryShort.php:274
253
+ msgid "Aperture priority"
254
+ msgstr "Priorytet przysłony"
255
+
256
+ #: PelEntryShort.php:276
257
+ msgid "Shutter priority"
258
+ msgstr "Priorytet migawki"
259
+
260
+ #: PelEntryShort.php:278
261
+ msgid "Creative program (biased toward depth of field)"
262
+ msgstr "Program twórczy (nakierowany na głębię obrazu)"
263
+
264
+ #: PelEntryShort.php:280
265
+ #, fuzzy
266
+ msgid "Action program (biased toward fast shutter speed)"
267
+ msgstr "Program twórczy (nakierowany na szybką migawkę)"
268
+
269
+ #: PelEntryShort.php:282
270
+ #, fuzzy
271
+ msgid "Portrait mode (for closeup photos with the background out of focus"
272
+ msgstr "Tryb portretowy (do zbliżeń z tłem poza ogniskiem)"
273
+
274
+ #: PelEntryShort.php:284
275
+ #, fuzzy
276
+ msgid "Landscape mode (for landscape photos with the background in focus"
277
+ msgstr "Tryb pejzażowy (do krajobrazów z tłem w ognisku)"
278
+
279
+ #: PelEntryShort.php:293
280
+ msgid "top - left"
281
+ msgstr "góra - lewo"
282
+
283
+ #: PelEntryShort.php:295
284
+ msgid "top - right"
285
+ msgstr "góra - prawo"
286
+
287
+ #: PelEntryShort.php:297
288
+ msgid "bottom - right"
289
+ msgstr "dół - prawo"
290
+
291
+ #: PelEntryShort.php:299
292
+ msgid "bottom - left"
293
+ msgstr "dół - lewo"
294
+
295
+ #: PelEntryShort.php:301
296
+ msgid "left - top"
297
+ msgstr "lewo - góra"
298
+
299
+ #: PelEntryShort.php:303
300
+ msgid "right - top"
301
+ msgstr "prawo - góra"
302
+
303
+ #: PelEntryShort.php:305
304
+ msgid "right - bottom"
305
+ msgstr "prawo - dół"
306
+
307
+ #: PelEntryShort.php:307
308
+ msgid "left - bottom"
309
+ msgstr "lewo - dół"
310
+
311
+ #: PelEntryShort.php:316
312
+ msgid "centered"
313
+ msgstr "wyśrodkowane"
314
+
315
+ #: PelEntryShort.php:318
316
+ msgid "co-sited"
317
+ msgstr "położone razem"
318
+
319
+ #: PelEntryShort.php:351
320
+ msgid "Uncalibrated"
321
+ msgstr "Nieskalibrowana"
322
+
323
+ #: PelEntryShort.php:360
324
+ msgid "Flash did not fire."
325
+ msgstr "Flesz się nie uruchomił."
326
+
327
+ #: PelEntryShort.php:362
328
+ msgid "Flash fired."
329
+ msgstr "Flesz się uruchomił."
330
+
331
+ #: PelEntryShort.php:364
332
+ msgid "Strobe return light not detected."
333
+ msgstr "Zwrotne światło stroboskopowe nie wykryte."
334
+
335
+ #: PelEntryShort.php:366
336
+ msgid "Strobe return light detected."
337
+ msgstr "Zwrotne światło stroboskopowe wykryte."
338
+
339
+ #: PelEntryShort.php:368
340
+ #, fuzzy
341
+ msgid "Flash fired, compulsory flash mode."
342
+ msgstr "Flesz się uruchomił w trybie pulsującym"
343
+
344
+ #: PelEntryShort.php:370
345
+ #, fuzzy
346
+ msgid "Flash fired, compulsory flash mode, return light not detected."
347
+ msgstr "Flesz się uruchomił w trybie pulsującym, światło zwrotne nie wykryte."
348
+
349
+ #: PelEntryShort.php:372
350
+ #, fuzzy
351
+ msgid "Flash fired, compulsory flash mode, return light detected."
352
+ msgstr "Flesz się uruchomił w trybie pulsującym, światło zwrotne wykryte."
353
+
354
+ #: PelEntryShort.php:374
355
+ #, fuzzy
356
+ msgid "Flash did not fire, compulsory flash mode."
357
+ msgstr "Flesz się nie uruchomił w trybie pulsującym."
358
+
359
+ #: PelEntryShort.php:376
360
+ msgid "Flash did not fire, auto mode."
361
+ msgstr "Flesz się nie uruchomił w trybie automatycznym."
362
+
363
+ #: PelEntryShort.php:378
364
+ msgid "Flash fired, auto mode."
365
+ msgstr "Flesz się uruchomił w trybie automatycznym."
366
+
367
+ #: PelEntryShort.php:380
368
+ msgid "Flash fired, auto mode, return light not detected."
369
+ msgstr ""
370
+ "Flesz się uruchomił w trybie automatycznym, światło zwrotne nie wykryte."
371
+
372
+ #: PelEntryShort.php:382
373
+ msgid "Flash fired, auto mode, return light detected."
374
+ msgstr "Flesz się uruchomił w trybie automatycznym, światło zwrotne wykryte."
375
+
376
+ #: PelEntryShort.php:384
377
+ msgid "No flash function."
378
+ msgstr "Brak flesza."
379
+
380
+ #: PelEntryShort.php:386
381
+ msgid "Flash fired, red-eye reduction mode."
382
+ msgstr "Flesz się uruchomił w trybie redukcji czerwonych oczu."
383
+
384
+ #: PelEntryShort.php:388
385
+ msgid "Flash fired, red-eye reduction mode, return light not detected."
386
+ msgstr ""
387
+ "Flesz się uruchomił w trybie redukcji czerwonych oczu, światło zwrotne nie "
388
+ "wykryte."
389
+
390
+ #: PelEntryShort.php:390
391
+ msgid "Flash fired, red-eye reduction mode, return light detected."
392
+ msgstr ""
393
+ "Flesz się uruchomił w trybie redukcji czerwonych oczu, światło zwrotne "
394
+ "wykryte."
395
+
396
+ #: PelEntryShort.php:392
397
+ msgid "Flash fired, compulsory flash mode, red-eye reduction mode."
398
+ msgstr "Flesz się uruchomił w trybie pulsującym z redukcją czerwonych oczu."
399
+
400
+ #: PelEntryShort.php:394
401
+ #, fuzzy
402
+ msgid ""
403
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light not "
404
+ "detected."
405
+ msgstr ""
406
+ "Flesz się uruchomił w trybie pulsującym z redukcją czerwonych oczu, światło "
407
+ "zwrotne nie wykryte"
408
+
409
+ #: PelEntryShort.php:396
410
+ #, fuzzy
411
+ msgid ""
412
+ "Flash fired, compulsory flash mode, red-eye reduction mode, return light "
413
+ "detected."
414
+ msgstr ""
415
+ "Flesz się uruchomił w trybie pulsującym z redukcją czerwonych oczu, światło "
416
+ "zwrotne nie wykryte"
417
+
418
+ #: PelEntryShort.php:398
419
+ #, fuzzy
420
+ msgid "Flash did not fire, auto mode, red-eye reduction mode."
421
+ msgstr ""
422
+ "Flesz się nie uruchomił w trybie automatycznym z redukcją czerwonych oczu"
423
+
424
+ #: PelEntryShort.php:400
425
+ #, fuzzy
426
+ msgid "Flash fired, auto mode, red-eye reduction mode."
427
+ msgstr "Flesz się uruchomił w trybie automatycznym z redukcją czerwonych oczu"
428
+
429
+ #: PelEntryShort.php:402
430
+ msgid ""
431
+ "Flash fired, auto mode, return light not detected, red-eye reduction mode."
432
+ msgstr ""
433
+ "Flesz się uruchomił w trybie automatycznym z redukcją czerwonych oczu, "
434
+ "światło zwrotne nie wykryte."
435
+
436
+ #: PelEntryShort.php:404
437
+ msgid "Flash fired, auto mode, return light detected, red-eye reduction mode."
438
+ msgstr ""
439
+ "Flesz się uruchomił w trybie automatycznym z redukcją czerwonych oczu, "
440
+ "światło zwrotne wykryte."
441
+
442
+ #: PelEntryShort.php:413
443
+ msgid "Normal process"
444
+ msgstr "Przebieg zwykły"
445
+
446
+ #: PelEntryShort.php:415
447
+ msgid "Custom process"
448
+ msgstr "Przebieg własny"
449
+
450
+ #: PelEntryShort.php:424
451
+ msgid "Auto exposure"
452
+ msgstr "Ekspozycja automatyczna"
453
+
454
+ #: PelEntryShort.php:426
455
+ msgid "Manual exposure"
456
+ msgstr "Ekspozycja ręczna"
457
+
458
+ #: PelEntryShort.php:428
459
+ msgid "Auto bracket"
460
+ msgstr "Auto bracket"
461
+
462
+ #: PelEntryShort.php:437
463
+ msgid "Auto white balance"
464
+ msgstr "Automatyczny balans bieli"
465
+
466
+ #: PelEntryShort.php:439
467
+ msgid "Manual white balance"
468
+ msgstr "Ręczny balans bieli"
469
+
470
+ #: PelEntryShort.php:448
471
+ msgid "Standard"
472
+ msgstr "Standardowy"
473
+
474
+ #: PelEntryShort.php:450
475
+ msgid "Landscape"
476
+ msgstr "Pejzaż"
477
+
478
+ #: PelEntryShort.php:452
479
+ msgid "Portrait"
480
+ msgstr "Portret"
481
+
482
+ #: PelEntryShort.php:454
483
+ msgid "Night scene"
484
+ msgstr "Scena nocna"
485
+
486
+ #: PelEntryShort.php:463 PelEntryShort.php:480 PelEntryShort.php:494
487
+ msgid "Normal"
488
+ msgstr "Standard"
489
+
490
+ #: PelEntryShort.php:465
491
+ msgid "Low gain up"
492
+ msgstr "Niskie wzmocnienie na górze"
493
+
494
+ #: PelEntryShort.php:467
495
+ msgid "High gain up"
496
+ msgstr "Wysokie wzmocnienie na górze"
497
+
498
+ #: PelEntryShort.php:469
499
+ msgid "Low gain down"
500
+ msgstr "Niskie wzmocnienie na dole"
501
+
502
+ #: PelEntryShort.php:471
503
+ msgid "High gain down"
504
+ msgstr "Wysokie wzmocnienie na górze"
505
+
506
+ #: PelEntryShort.php:482
507
+ msgid "Low saturation"
508
+ msgstr "Małe nasycenie"
509
+
510
+ #: PelEntryShort.php:484
511
+ msgid "High saturation"
512
+ msgstr "Duże nasycenie"
513
+
514
+ #: PelEntryShort.php:496
515
+ msgid "Soft"
516
+ msgstr "Mała"
517
+
518
+ #: PelEntryShort.php:498
519
+ msgid "Hard"
520
+ msgstr "Duża"
521
+
522
+ #: PelEntryShort.php:509
523
+ msgid "Macro"
524
+ msgstr "Makro"
525
+
526
+ #: PelEntryShort.php:511
527
+ msgid "Close view"
528
+ msgstr "Widok bliski"
529
+
530
+ #: PelEntryShort.php:513
531
+ msgid "Distant view"
532
+ msgstr "Widok daleki"
533
+
534
+ #: PelEntryShort.php:521
535
+ #, php-format
536
+ msgid "(x,y) = (%d,%d)"
537
+ msgstr ""
538
+
539
+ #: PelEntryShort.php:523
540
+ #, fuzzy, php-format
541
+ msgid "Within distance %d of (x,y) = (%d,%d)"
542
+ msgstr "W odległości %i w (x,y) = (%i,%i)"
543
+
544
+ #: PelEntryShort.php:526
545
+ #, fuzzy, php-format
546
+ msgid "Within rectangle (width %d, height %d) around (x,y) = (%d,%d)"
547
+ msgstr ""
548
+ "Wewnątrz prostokąta (szerokość %i, wysokość %i) w okolicy (x,y) = (%i,%i)"
549
+
550
+ #: PelEntryShort.php:531
551
+ #, fuzzy, php-format
552
+ msgid "Unexpected number of components (%d, expected 2, 3, or 4)."
553
+ msgstr "Nieoczekiwana liczba składowych (%li, a oczekiwano 2, 3 lub 4)."
554
+
555
+ #: PelEntryUndefined.php:390
556
+ #, fuzzy, php-format
557
+ msgid "Exif %s"
558
+ msgstr "Wersja Exif"
559
+
560
+ #: PelEntryUndefined.php:392
561
+ #, fuzzy, php-format
562
+ msgid "Exif Version %s"
563
+ msgstr "Wersja Exif"
564
+
565
+ #: PelEntryUndefined.php:396
566
+ #, fuzzy, php-format
567
+ msgid "FlashPix %s"
568
+ msgstr "Użyto flesza"
569
+
570
+ #: PelEntryUndefined.php:398
571
+ #, fuzzy, php-format
572
+ msgid "FlashPix Version %s"
573
+ msgstr "FlashPix w wersji 1.0"
574
+
575
+ #: PelEntryUndefined.php:402
576
+ #, php-format
577
+ msgid "Interoperability %s"
578
+ msgstr ""
579
+
580
+ #: PelEntryUndefined.php:404
581
+ #, php-format
582
+ msgid "Interoperability Version %s"
583
+ msgstr ""
584
+
585
+ #: PelEntryUndefined.php:410
586
+ #, fuzzy, php-format
587
+ msgid "Version %s"
588
+ msgstr "Exif w wersji %d.%d"
589
+
590
+ #: PelExif.php:169
591
+ msgid "Dumping Exif data...\n"
592
+ msgstr ""
593
+
594
+ #: PelFormat.php:192 PelFormat.php:220
595
+ #, php-format
596
+ msgid "Unknown format: 0x%X"
597
+ msgstr ""
598
+
599
+ #: PelIfd.php:1180
600
+ #, php-format
601
+ msgid "Dumping IFD %s with %d entries...\n"
602
+ msgstr ""
603
+
604
+ #: PelIfd.php:1186
605
+ #, php-format
606
+ msgid "Dumping %d sub IFDs...\n"
607
+ msgstr ""
608
+
609
+ #: PelJpegMarker.php:288 PelJpegMarker.php:430
610
+ #, php-format
611
+ msgid "Unknown marker: 0x%02X"
612
+ msgstr ""
613
+
614
+ #: PelJpegMarker.php:302
615
+ msgid "Encoding (baseline)"
616
+ msgstr ""
617
+
618
+ #: PelJpegMarker.php:304
619
+ msgid "Encoding (extended sequential)"
620
+ msgstr ""
621
+
622
+ #: PelJpegMarker.php:306
623
+ msgid "Encoding (progressive)"
624
+ msgstr ""
625
+
626
+ #: PelJpegMarker.php:308
627
+ msgid "Encoding (lossless)"
628
+ msgstr ""
629
+
630
+ #: PelJpegMarker.php:310
631
+ msgid "Encoding (differential sequential)"
632
+ msgstr ""
633
+
634
+ #: PelJpegMarker.php:312
635
+ msgid "Encoding (differential progressive)"
636
+ msgstr ""
637
+
638
+ #: PelJpegMarker.php:314
639
+ msgid "Encoding (differential lossless)"
640
+ msgstr ""
641
+
642
+ #: PelJpegMarker.php:316
643
+ msgid "Encoding (extended sequential, arithmetic)"
644
+ msgstr ""
645
+
646
+ #: PelJpegMarker.php:318
647
+ msgid "Encoding (progressive, arithmetic)"
648
+ msgstr ""
649
+
650
+ #: PelJpegMarker.php:320
651
+ msgid "Encoding (lossless, arithmetic)"
652
+ msgstr ""
653
+
654
+ #: PelJpegMarker.php:322
655
+ msgid "Encoding (differential sequential, arithmetic)"
656
+ msgstr ""
657
+
658
+ #: PelJpegMarker.php:324
659
+ msgid "Encoding (differential progressive, arithmetic)"
660
+ msgstr ""
661
+
662
+ #: PelJpegMarker.php:326
663
+ msgid "Encoding (differential lossless, arithmetic)"
664
+ msgstr ""
665
+
666
+ #: PelJpegMarker.php:328
667
+ msgid "Start of image"
668
+ msgstr ""
669
+
670
+ #: PelJpegMarker.php:330
671
+ msgid "End of image"
672
+ msgstr ""
673
+
674
+ #: PelJpegMarker.php:332
675
+ msgid "Start of scan"
676
+ msgstr ""
677
+
678
+ #: PelJpegMarker.php:334 PelJpegMarker.php:428
679
+ #, fuzzy
680
+ msgid "Comment"
681
+ msgstr "Komentarz użytkownika"
682
+
683
+ #: PelJpegMarker.php:336
684
+ msgid "Define Huffman table"
685
+ msgstr ""
686
+
687
+ #: PelJpegMarker.php:338
688
+ #, fuzzy
689
+ msgid "Extension"
690
+ msgstr "Wersja Exif"
691
+
692
+ #: PelJpegMarker.php:340
693
+ msgid "Define arithmetic coding conditioning"
694
+ msgstr ""
695
+
696
+ #: PelJpegMarker.php:342 PelJpegMarker.php:344 PelJpegMarker.php:346
697
+ #: PelJpegMarker.php:348 PelJpegMarker.php:350 PelJpegMarker.php:352
698
+ #: PelJpegMarker.php:354 PelJpegMarker.php:356
699
+ #, php-format
700
+ msgid "Restart %d"
701
+ msgstr ""
702
+
703
+ #: PelJpegMarker.php:358
704
+ msgid "Define quantization table"
705
+ msgstr ""
706
+
707
+ #: PelJpegMarker.php:360
708
+ msgid "Define number of lines"
709
+ msgstr ""
710
+
711
+ #: PelJpegMarker.php:362
712
+ msgid "Define restart interval"
713
+ msgstr ""
714
+
715
+ #: PelJpegMarker.php:364
716
+ msgid "Define hierarchical progression"
717
+ msgstr ""
718
+
719
+ #: PelJpegMarker.php:366
720
+ msgid "Expand reference component"
721
+ msgstr ""
722
+
723
+ #: PelJpegMarker.php:368 PelJpegMarker.php:370 PelJpegMarker.php:372
724
+ #: PelJpegMarker.php:374 PelJpegMarker.php:376 PelJpegMarker.php:378
725
+ #: PelJpegMarker.php:380 PelJpegMarker.php:382 PelJpegMarker.php:384
726
+ #: PelJpegMarker.php:386 PelJpegMarker.php:388 PelJpegMarker.php:390
727
+ #: PelJpegMarker.php:392 PelJpegMarker.php:394 PelJpegMarker.php:396
728
+ #: PelJpegMarker.php:398
729
+ #, php-format
730
+ msgid "Application segment %d"
731
+ msgstr ""
732
+
733
+ #: PelJpegMarker.php:400 PelJpegMarker.php:402 PelJpegMarker.php:404
734
+ #: PelJpegMarker.php:406 PelJpegMarker.php:408 PelJpegMarker.php:410
735
+ #: PelJpegMarker.php:412 PelJpegMarker.php:414 PelJpegMarker.php:416
736
+ #: PelJpegMarker.php:418 PelJpegMarker.php:420 PelJpegMarker.php:422
737
+ #: PelJpegMarker.php:424 PelJpegMarker.php:426
738
+ #, fuzzy, php-format
739
+ msgid "Extension %d"
740
+ msgstr "Wersja Exif"
741
+
742
+ #: PelJpeg.php:543
743
+ msgid "Dumping JPEG data...\n"
744
+ msgstr ""
745
+
746
+ #: PelJpeg.php:547
747
+ #, php-format
748
+ msgid "Section %d (marker 0x%02X - %s):\n"
749
+ msgstr ""
750
+
751
+ #: PelJpeg.php:549
752
+ #, fuzzy, php-format
753
+ msgid " Description: %s\n"
754
+ msgstr "Opis obrazu"
755
+
756
+ #: PelJpeg.php:557
757
+ msgid " Content : Exif data\n"
758
+ msgstr ""
759
+
760
+ #: PelJpeg.php:560
761
+ #, fuzzy, php-format
762
+ msgid " Content : %s\n"
763
+ msgstr " / Kontrast : "
764
+
765
+ #: PelJpeg.php:562
766
+ msgid " Content : Unknown\n"
767
+ msgstr ""
768
+
769
+ #: PelTag.php:1649
770
+ #, fuzzy, php-format
771
+ msgid "Unknown: 0x%04X"
772
+ msgstr "Brak informacji"
773
+
774
+ #: PelTag.php:1678
775
+ msgid "Interoperability Index"
776
+ msgstr ""
777
+
778
+ #: PelTag.php:1680
779
+ msgid "Interoperability Version"
780
+ msgstr ""
781
+
782
+ #: PelTag.php:1682
783
+ msgid "Image Width"
784
+ msgstr "Szerokość obrazu"
785
+
786
+ #: PelTag.php:1684
787
+ msgid "Image Length"
788
+ msgstr "Długość obrazu"
789
+
790
+ #: PelTag.php:1686
791
+ msgid "Bits per Sample"
792
+ msgstr "Bitów na próbkę"
793
+
794
+ #: PelTag.php:1688
795
+ msgid "Compression"
796
+ msgstr "Kompresja"
797
+
798
+ #: PelTag.php:1690
799
+ msgid "Photometric Interpretation"
800
+ msgstr "Interpretacja fotometryczna"
801
+
802
+ #: PelTag.php:1692
803
+ msgid "Fill Order"
804
+ msgstr "Kolejność wypełniania"
805
+
806
+ #: PelTag.php:1694
807
+ msgid "Document Name"
808
+ msgstr "Nazwa dokumentu"
809
+
810
+ #: PelTag.php:1696
811
+ msgid "Image Description"
812
+ msgstr "Opis obrazu"
813
+
814
+ #: PelTag.php:1698
815
+ msgid "Manufacturer"
816
+ msgstr "Producent"
817
+
818
+ #: PelTag.php:1700
819
+ msgid "Model"
820
+ msgstr "Model"
821
+
822
+ #: PelTag.php:1702
823
+ msgid "Strip Offsets"
824
+ msgstr "Przesunięcia pasów"
825
+
826
+ #: PelTag.php:1704
827
+ msgid "Orientation"
828
+ msgstr "Orientacja"
829
+
830
+ #: PelTag.php:1706
831
+ msgid "Samples per Pixel"
832
+ msgstr "Próbek na piksel"
833
+
834
+ #: PelTag.php:1708
835
+ msgid "Rows per Strip"
836
+ msgstr "Wierszy na pas"
837
+
838
+ #: PelTag.php:1710
839
+ msgid "Strip Byte Count"
840
+ msgstr "Liczba bajtów na pas"
841
+
842
+ #: PelTag.php:1712
843
+ msgid "x-Resolution"
844
+ msgstr "Rozdzielczość X"
845
+
846
+ #: PelTag.php:1714
847
+ msgid "y-Resolution"
848
+ msgstr "Rozdzielczość Y"
849
+
850
+ #: PelTag.php:1716
851
+ msgid "Planar Configuration"
852
+ msgstr "Konfiguracja powierzchni"
853
+
854
+ #: PelTag.php:1718
855
+ msgid "Resolution Unit"
856
+ msgstr "Jednostka rozdzielczości"
857
+
858
+ #: PelTag.php:1720
859
+ msgid "Transfer Function"
860
+ msgstr "Funkcja przejścia"
861
+
862
+ #: PelTag.php:1722
863
+ msgid "Software"
864
+ msgstr "Oprogramowanie"
865
+
866
+ #: PelTag.php:1724
867
+ msgid "Date and Time"
868
+ msgstr "Data i czas"
869
+
870
+ #: PelTag.php:1726
871
+ msgid "Artist"
872
+ msgstr "Autor"
873
+
874
+ #: PelTag.php:1728
875
+ msgid "White Point"
876
+ msgstr "Biały punkt"
877
+
878
+ #: PelTag.php:1730
879
+ msgid "Primary Chromaticities"
880
+ msgstr "Barwy główne"
881
+
882
+ #: PelTag.php:1732
883
+ msgid "Transfer Range"
884
+ msgstr "Zakres przejścia"
885
+
886
+ #: PelTag.php:1734
887
+ msgid "JPEGProc"
888
+ msgstr ""
889
+
890
+ #: PelTag.php:1736
891
+ msgid "JPEG Interchange Format"
892
+ msgstr "Format JPEG"
893
+
894
+ #: PelTag.php:1738
895
+ msgid "JPEG Interchange Format Length"
896
+ msgstr "Długość formatu JPEG"
897
+
898
+ #: PelTag.php:1740
899
+ msgid "YCbCr Coefficients"
900
+ msgstr "Współczynniki YCbCr"
901
+
902
+ #: PelTag.php:1742
903
+ msgid "YCbCr Sub-Sampling"
904
+ msgstr "Podpróbkowanie YCbCr"
905
+
906
+ #: PelTag.php:1744
907
+ msgid "YCbCr Positioning"
908
+ msgstr "Rozmieszczenie YCbCr"
909
+
910
+ #: PelTag.php:1746
911
+ msgid "Reference Black/White"
912
+ msgstr "Czerń/biel odniesienia"
913
+
914
+ #: PelTag.php:1748
915
+ msgid "Related Image File Format"
916
+ msgstr ""
917
+
918
+ #: PelTag.php:1750
919
+ #, fuzzy
920
+ msgid "Related Image Width"
921
+ msgstr "Szerokość obrazu"
922
+
923
+ #: PelTag.php:1752
924
+ #, fuzzy
925
+ msgid "Related Image Length"
926
+ msgstr "Długość obrazu"
927
+
928
+ #: PelTag.php:1754
929
+ #, fuzzy
930
+ msgid "CFA Repeat Pattern Dim"
931
+ msgstr "Wzór CFA"
932
+
933
+ #: PelTag.php:1756
934
+ msgid "CFA Pattern"
935
+ msgstr "Wzór CFA"
936
+
937
+ #: PelTag.php:1758
938
+ msgid "Battery Level"
939
+ msgstr "Poziom baterii"
940
+
941
+ #: PelTag.php:1760
942
+ msgid "Copyright"
943
+ msgstr "Prawa autorskie"
944
+
945
+ #: PelTag.php:1762
946
+ msgid "Exposure Time"
947
+ msgstr "Czas ekspozycji"
948
+
949
+ #: PelTag.php:1764
950
+ #, fuzzy
951
+ msgid "FNumber"
952
+ msgstr "Liczba F."
953
+
954
+ #: PelTag.php:1766
955
+ msgid "IPTC/NAA"
956
+ msgstr ""
957
+
958
+ #: PelTag.php:1768
959
+ msgid "Exif IFD Pointer"
960
+ msgstr ""
961
+
962
+ #: PelTag.php:1770
963
+ msgid "Inter Color Profile"
964
+ msgstr ""
965
+
966
+ #: PelTag.php:1772
967
+ #, fuzzy
968
+ msgid "Exposure Program"
969
+ msgstr "Czas ekspozycji"
970
+
971
+ #: PelTag.php:1774
972
+ msgid "Spectral Sensitivity"
973
+ msgstr "Czułość widmowa"
974
+
975
+ #: PelTag.php:1776
976
+ msgid "GPS Info IFD Pointer"
977
+ msgstr ""
978
+
979
+ #: PelTag.php:1778
980
+ msgid "ISO Speed Ratings"
981
+ msgstr "Oszacowania szybkości ISO"
982
+
983
+ #: PelTag.php:1780
984
+ msgid "OECF"
985
+ msgstr ""
986
+
987
+ #: PelTag.php:1782
988
+ msgid "Exif Version"
989
+ msgstr "Wersja Exif"
990
+
991
+ #: PelTag.php:1784
992
+ msgid "Date and Time (original)"
993
+ msgstr "Data i czas (oryginału)"
994
+
995
+ #: PelTag.php:1786
996
+ msgid "Date and Time (digitized)"
997
+ msgstr "Data i czas (obrazu cyfrowego)"
998
+
999
+ #: PelTag.php:1788
1000
+ #, fuzzy
1001
+ msgid "Components Configuration"
1002
+ msgstr "Konfiguracja powierzchni"
1003
+
1004
+ #: PelTag.php:1790
1005
+ msgid "Compressed Bits per Pixel"
1006
+ msgstr "Skompresowane bity na piksel"
1007
+
1008
+ #: PelTag.php:1792
1009
+ msgid "Shutter speed"
1010
+ msgstr "Szybkość migawki"
1011
+
1012
+ #: PelTag.php:1794
1013
+ msgid "Aperture"
1014
+ msgstr "Przysłona"
1015
+
1016
+ #: PelTag.php:1796
1017
+ msgid "Brightness"
1018
+ msgstr "Jasność"
1019
+
1020
+ #: PelTag.php:1798
1021
+ msgid "Exposure Bias"
1022
+ msgstr "Odchylenie ekspozycji"
1023
+
1024
+ #: PelTag.php:1800
1025
+ #, fuzzy
1026
+ msgid "Max Aperture Value"
1027
+ msgstr "Przysłona"
1028
+
1029
+ #: PelTag.php:1802
1030
+ msgid "Subject Distance"
1031
+ msgstr "Odległość obiektu"
1032
+
1033
+ #: PelTag.php:1804
1034
+ msgid "Metering Mode"
1035
+ msgstr "Tryb pomiaru"
1036
+
1037
+ #: PelTag.php:1806
1038
+ msgid "Light Source"
1039
+ msgstr "Źródło światła"
1040
+
1041
+ #: PelTag.php:1810
1042
+ msgid "Focal Length"
1043
+ msgstr "Ogniskowa"
1044
+
1045
+ #: PelTag.php:1812
1046
+ msgid "Maker Note"
1047
+ msgstr "Uwaga producenta"
1048
+
1049
+ #: PelTag.php:1814
1050
+ msgid "User Comment"
1051
+ msgstr "Komentarz użytkownika"
1052
+
1053
+ #: PelTag.php:1816
1054
+ #, fuzzy
1055
+ msgid "SubSec Time"
1056
+ msgstr "Obszar obiektu"
1057
+
1058
+ #: PelTag.php:1818
1059
+ #, fuzzy
1060
+ msgid "SubSec Time Original"
1061
+ msgstr "Data i czas (oryginału)"
1062
+
1063
+ #: PelTag.php:1820
1064
+ #, fuzzy
1065
+ msgid "SubSec Time Digitized"
1066
+ msgstr "Data i czas (obrazu cyfrowego)"
1067
+
1068
+ #: PelTag.php:1832
1069
+ #, fuzzy
1070
+ msgid "FlashPix Version"
1071
+ msgstr "FlashPix w wersji 1.0"
1072
+
1073
+ #: PelTag.php:1834
1074
+ msgid "Color Space"
1075
+ msgstr "Przestrzeń kolorów"
1076
+
1077
+ #: PelTag.php:1836
1078
+ msgid "Pixel x-Dimension"
1079
+ msgstr ""
1080
+
1081
+ #: PelTag.php:1838
1082
+ msgid "Pixel y-Dimension"
1083
+ msgstr ""
1084
+
1085
+ #: PelTag.php:1840
1086
+ msgid "Related Sound File"
1087
+ msgstr ""
1088
+
1089
+ #: PelTag.php:1842
1090
+ msgid "Interoperability IFD Pointer"
1091
+ msgstr ""
1092
+
1093
+ #: PelTag.php:1844
1094
+ msgid "Flash Energy"
1095
+ msgstr "Energia Flesza"
1096
+
1097
+ #: PelTag.php:1846
1098
+ msgid "Spatial Frequency Response"
1099
+ msgstr "Odpowiedź częstotliwości przestrzennej"
1100
+
1101
+ #: PelTag.php:1848
1102
+ msgid "Focal Plane x-Resolution"
1103
+ msgstr "Rozdzielczość X płaszczyzny ogniskowej"
1104
+
1105
+ #: PelTag.php:1850
1106
+ msgid "Focal Plane y-Resolution"
1107
+ msgstr "Rozdzielczość Y płaszczyzny ogniskowej"
1108
+
1109
+ #: PelTag.php:1852
1110
+ msgid "Focal Plane Resolution Unit"
1111
+ msgstr "Jednostka rozdzielczości płaszczyzny ogniskowej"
1112
+
1113
+ #: PelTag.php:1854
1114
+ msgid "Subject Location"
1115
+ msgstr "Położenie obiektu"
1116
+
1117
+ #: PelTag.php:1856
1118
+ msgid "Exposure index"
1119
+ msgstr "Indeks ekspozycji"
1120
+
1121
+ #: PelTag.php:1858
1122
+ msgid "Sensing Method"
1123
+ msgstr "Rodzaj czujnika"
1124
+
1125
+ #: PelTag.php:1860
1126
+ msgid "File Source"
1127
+ msgstr "Źródło pliku"
1128
+
1129
+ #: PelTag.php:1862
1130
+ msgid "Scene Type"
1131
+ msgstr "Rodzaj sceny"
1132
+
1133
+ #: PelTag.php:1864
1134
+ msgid "Subject Area"
1135
+ msgstr "Obszar obiektu"
1136
+
1137
+ #: PelTag.php:1866
1138
+ msgid "Custom Rendered"
1139
+ msgstr "Własny rendering"
1140
+
1141
+ #: PelTag.php:1868
1142
+ msgid "Exposure Mode"
1143
+ msgstr "Tryb ekspozycji"
1144
+
1145
+ #: PelTag.php:1870
1146
+ msgid "White Balance"
1147
+ msgstr "Balans bieli"
1148
+
1149
+ #: PelTag.php:1872
1150
+ msgid "Digital Zoom Ratio"
1151
+ msgstr "Współczynnik powiększenia cyfrowego"
1152
+
1153
+ #: PelTag.php:1874
1154
+ msgid "Focal Length In 35mm Film"
1155
+ msgstr "Ogniskowa dla filmu 35mm"
1156
+
1157
+ #: PelTag.php:1876
1158
+ msgid "Scene Capture Type"
1159
+ msgstr "Rodzaj uchwycenia sceny"
1160
+
1161
+ #: PelTag.php:1878
1162
+ msgid "Gain Control"
1163
+ msgstr "Regulacja wzmocnienia"
1164
+
1165
+ #: PelTag.php:1880
1166
+ msgid "Contrast"
1167
+ msgstr "Kontrastowość"
1168
+
1169
+ #: PelTag.php:1882
1170
+ msgid "Saturation"
1171
+ msgstr "Nasycenie"
1172
+
1173
+ #: PelTag.php:1884
1174
+ msgid "Sharpness"
1175
+ msgstr "Ostrość"
1176
+
1177
+ #: PelTag.php:1886
1178
+ msgid "Device Setting Description"
1179
+ msgstr "Opis ustawień urządzenia"
1180
+
1181
+ #: PelTag.php:1888
1182
+ msgid "Subject Distance Range"
1183
+ msgstr "Zakres odległości obiektu"
1184
+
1185
+ #: PelTag.php:1890
1186
+ msgid "Image Unique ID"
1187
+ msgstr "Unikalny identyfikator obrazu"
1188
+
1189
+ #: PelTag.php:1892
1190
+ msgid "Gamma"
1191
+ msgstr ""
1192
+
1193
+ #: PelTag.php:1894
1194
+ msgid "Print IM"
1195
+ msgstr ""
1196
+
1197
+ #: PelTag.php:1964
1198
+ #, fuzzy, php-format
1199
+ msgid "Unknown Tag: 0x%04X"
1200
+ msgstr "Nieznany znacznik."
1201
+
1202
+ #: PelTiff.php:255
1203
+ #, php-format
1204
+ msgid "Dumping TIFF data...\n"
1205
+ msgstr ""
1206
+
1207
+ #, fuzzy
1208
+ #~ msgid ""
1209
+ #~ "Indicates the identification of the Interoperability rule. Use \"R98\" "
1210
+ #~ "for stating ExifR98 Rules. Four bytes used including the termination code "
1211
+ #~ "(NULL). See the separate volume of Recommended Exif Interoperability "
1212
+ #~ "Rules (ExifR98) for other tags used for ExifR98."
1213
+ #~ msgstr ""
1214
+ #~ "Oznaczenie identyfikacji reguły współpracy. Należy użyć \"R98\" dla "
1215
+ #~ "oznaczenia reguł ExifR98. Używane są cztery bajty wraz ze znacznikiem "
1216
+ #~ "końca (NULL). Inne znaczniki ExifR98 są opisane w pozycji Recommended "
1217
+ #~ "Exif Interoperability Rules (ExifR98)."
1218
+
1219
+ #~ msgid ""
1220
+ #~ "The number of columns of image data, equal to the number of pixels per "
1221
+ #~ "row. In JPEG compressed data a JPEG marker is used instead of this tag."
1222
+ #~ msgstr ""
1223
+ #~ "Liczba kolumn danych obrazu, różna liczbie pikseli w wierszu. W danych "
1224
+ #~ "skompresowanych algorytmem JPEG zamiast tego znacznika używany jest "
1225
+ #~ "znacznik JPEG."
1226
+
1227
+ #~ msgid ""
1228
+ #~ "The number of rows of image data. In JPEG compressed data a JPEG marker "
1229
+ #~ "is used instead of this tag."
1230
+ #~ msgstr ""
1231
+ #~ "Liczba wierszy danych obrazu. W danych skompresowanych algorytmem JPEG "
1232
+ #~ "zamiast tego znacznika używany jest znacznik JPEG."
1233
+
1234
+ #, fuzzy
1235
+ #~ msgid ""
1236
+ #~ "The number of bits per image component. In this standard each component "
1237
+ #~ "of the image is 8 bits, so the value for this tag is 8. See also "
1238
+ #~ "<SamplesPerPixel>. In JPEG compressed data a JPEG marker is used instead "
1239
+ #~ "of this tag."
1240
+ #~ msgstr ""
1241
+ #~ "Liczba bitów na składową obrazu. W tym standardzie każda składowa obrazu "
1242
+ #~ "ma 8 bitów, więc wartość tego znacznika to 9. Patrz także "
1243
+ #~ "<SamplesPerPixel>. W danych skompresowanych algorytmem JPEG zamiast tego "
1244
+ #~ "znacznika używany jest znacznik JPEG."
1245
+
1246
+ #~ msgid ""
1247
+ #~ "The compression scheme used for the image data. When a primary image is "
1248
+ #~ "JPEG compressed, this designation is not necessary and is omitted. When "
1249
+ #~ "thumbnails use JPEG compression, this tag value is set to 6."
1250
+ #~ msgstr ""
1251
+ #~ "Algorytm kompresji użyty dla danych obrazu. Jeśli główny obraz jest "
1252
+ #~ "skompresowany algorytmem JPEG, to oznaczenie nie jest potrzebne i jest "
1253
+ #~ "pomijane. Jeśli miniaturki używają kompresji JPEG, ten znacznik ma "
1254
+ #~ "wartość 6."
1255
+
1256
+ #~ msgid ""
1257
+ #~ "The pixel composition. In JPEG compressed data a JPEG marker is used "
1258
+ #~ "instead of this tag."
1259
+ #~ msgstr ""
1260
+ #~ "Składowe pikseli. W danych skompresowanych algorytmem JPEG zamiast tego "
1261
+ #~ "znacznika używany jest znacznik JPEG."
1262
+
1263
+ #~ msgid ""
1264
+ #~ "A character string giving the title of the image. It may be a comment "
1265
+ #~ "such as \"1988 company picnic\" or the like. Two-bytes character codes "
1266
+ #~ "cannot be used. When a 2-bytes code is necessary, the Exif Private tag "
1267
+ #~ "<UserComment> is to be used."
1268
+ #~ msgstr ""
1269
+ #~ "Łańcuch znaków nadający obrazowi tytuł. Może być komentarzem takim jak "
1270
+ #~ "\"piknik firmowy 1988\" lub podobnym. Nie można używać dwubajtowych kodów "
1271
+ #~ "znaków. Jeśli dwubajtowe kody znaków są potrzebne, należy użyć znacznika "
1272
+ #~ "Exif Private <UserComment>."
1273
+
1274
+ #~ msgid ""
1275
+ #~ "The manufacturer of the recording equipment. This is the manufacturer of "
1276
+ #~ "the DSC, scanner, video digitizer or other equipment that generated the "
1277
+ #~ "image. When the field is left blank, it is treated as unknown."
1278
+ #~ msgstr ""
1279
+ #~ "Producent urządzenia nagrywającego. Jest to producent DSC, skanera, "
1280
+ #~ "digitalizera albo innego urządzenia, które wygenerowało obraz. Jeśli to "
1281
+ #~ "pole jest puste, jest traktowane jako nieznane."
1282
+
1283
+ #~ msgid ""
1284
+ #~ "The model name or model number of the equipment. This is the model name "
1285
+ #~ "or number of the DSC, scanner, video digitizer or other equipment that "
1286
+ #~ "generated the image. When the field is left blank, it is treated as "
1287
+ #~ "unknown."
1288
+ #~ msgstr ""
1289
+ #~ "Nazwa lub numer modelu urządzenia. Jest to nazwa modelu lub numer DSC, "
1290
+ #~ "skanera, digitalizera albo innego urządzenia, które wygenerowało obraz. "
1291
+ #~ "Jeśli to pole jest puste, jest traktowane jako nieznane."
1292
+
1293
+ #~ msgid ""
1294
+ #~ "For each strip, the byte offset of that strip. It is recommended that "
1295
+ #~ "this be selected so the number of strip bytes does not exceed 64 Kbytes. "
1296
+ #~ "With JPEG compressed data this designation is not needed and is omitted. "
1297
+ #~ "See also <RowsPerStrip> and <StripByteCounts>."
1298
+ #~ msgstr ""
1299
+ #~ "Bajtowe przesunięcie pasa dla każdego pasa. Zaleca się takie dobranie tej "
1300
+ #~ "wartości, by liczba bajtów pasa nie przekraczała 64kB. W danych "
1301
+ #~ "skompresowanych algorytmem JPEG to oznaczenie nie jest potrzebne i jest "
1302
+ #~ "pomijane. Patrz także <RowsPerStrip> i <StripByteCount>."
1303
+
1304
+ #~ msgid "The image orientation viewed in terms of rows and columns."
1305
+ #~ msgstr "Orientacja obrazu widziana w kategoriach wierszy i kolumn."
1306
+
1307
+ #~ msgid ""
1308
+ #~ "The number of components per pixel. Since this standard applies to RGB "
1309
+ #~ "and YCbCr images, the value set for this tag is 3. In JPEG compressed "
1310
+ #~ "data a JPEG marker is used instead of this tag."
1311
+ #~ msgstr ""
1312
+ #~ "Liczba składowych na piksel. Ponieważ ten standard odnosi się do obrazów "
1313
+ #~ "RGB i YCbCr, wartość tego znacznika wynosi 3. W danych skompresowanych "
1314
+ #~ "algorytmem JPEG zamiast tego znacznika używany jest znacznik JPEG."
1315
+
1316
+ #, fuzzy
1317
+ #~ msgid ""
1318
+ #~ "The number of rows per strip. This is the number of rows in the image of "
1319
+ #~ "one strip when an image is divided into strips. With JPEG compressed data "
1320
+ #~ "this designation is not needed and is omitted. See also <StripOffsets> "
1321
+ #~ "and <StripByteCounts>."
1322
+ #~ msgstr ""
1323
+ #~ "Liczba wierszy na pas. Jest to liczba wierszy w obrazie jednego pasa "
1324
+ #~ "kiedy obraz jest podzielony na pasy. W danych skompresowanych algorytmem "
1325
+ #~ "JPEG to oznaczenie nie jest potrzebne i jest pomijane. Patrz także "
1326
+ #~ "<RowsPerStrip> i <StripByteCounts>."
1327
+
1328
+ #~ msgid ""
1329
+ #~ "The total number of bytes in each strip. With JPEG compressed data this "
1330
+ #~ "designation is not needed and is omitted."
1331
+ #~ msgstr ""
1332
+ #~ "Całkowita liczba bajtów w każdym pasie. W danych skompresowanych "
1333
+ #~ "algorytmem JPEG to oznaczenie nie jest potrzebne i jest pomijane."
1334
+
1335
+ #~ msgid ""
1336
+ #~ "The number of pixels per <ResolutionUnit> in the <ImageWidth> direction. "
1337
+ #~ "When the image resolution is unknown, 72 [dpi] is designated."
1338
+ #~ msgstr ""
1339
+ #~ "Liczba pikseli na jednostkę rozdzielczości (<ResolutionUnit>) w kierunku "
1340
+ #~ "szerokości (<ImageWidth>). Kiedy rozdzielczość obrazu jest nieznana, "
1341
+ #~ "przyjmuje się 72 [dpi]."
1342
+
1343
+ #~ msgid ""
1344
+ #~ "The number of pixels per <ResolutionUnit> in the <ImageLength> direction. "
1345
+ #~ "The same value as <XResolution> is designated."
1346
+ #~ msgstr ""
1347
+ #~ "Liczba pikseli na jednostkę rozdzielczości (<ResolutionUnit>) w kierunku "
1348
+ #~ "długości (<ImageLength>). Zakładana jest taka sama wartość jak "
1349
+ #~ "<XResolution>."
1350
+
1351
+ #~ msgid ""
1352
+ #~ "Indicates whether pixel components are recorded in a chunky or planar "
1353
+ #~ "format. In JPEG compressed files a JPEG marker is used instead of this "
1354
+ #~ "tag. If this field does not exist, the TIFF default of 1 (chunky) is "
1355
+ #~ "assumed."
1356
+ #~ msgstr ""
1357
+ #~ "Oznaczenie, czy składowe pikseli są zapisane w formacie blokowym czy "
1358
+ #~ "płaskim. W plikach skompresowanych algorytmem JPEG zamiast tego znacznika "
1359
+ #~ "używany jest znacznik JPEG. Jeśli to pole nie istnieje, domyślne dla TIFF "
1360
+ #~ "jest 1 (blokowy)."
1361
+
1362
+ #~ msgid ""
1363
+ #~ "The unit for measuring <XResolution> and <YResolution>. The same unit is "
1364
+ #~ "used for both <XResolution> and <YResolution>. If the image resolution is "
1365
+ #~ "unknown, 2 (inches) is designated."
1366
+ #~ msgstr ""
1367
+ #~ "Jednostka do wyrażania <XResolution> i <YResolution>. Dla obu wielkości "
1368
+ #~ "używana jest ta sama jednostka. Jeśli rozdzielczość jest nieznana, "
1369
+ #~ "przyjmowane jest 2 (cale)."
1370
+
1371
+ #~ msgid ""
1372
+ #~ "A transfer function for the image, described in tabular style. Normally "
1373
+ #~ "this tag is not necessary, since color space is specified in the color "
1374
+ #~ "space information tag (<ColorSpace>)."
1375
+ #~ msgstr ""
1376
+ #~ "Funkcja przejścia dla obrazu, opisana w postaci tabeli. Zwykle ten "
1377
+ #~ "znacznik nie jest potrzebny, ponieważ przestrzeń kolorów podana jest w "
1378
+ #~ "znaczniku informacji o przestrzeni kolorów (<ColorSpace>)."
1379
+
1380
+ #~ msgid ""
1381
+ #~ "This tag records the name and version of the software or firmware of the "
1382
+ #~ "camera or image input device used to generate the image. The detailed "
1383
+ #~ "format is not specified, but it is recommended that the example shown "
1384
+ #~ "below be followed. When the field is left blank, it is treated as unknown."
1385
+ #~ msgstr ""
1386
+ #~ "Ten znacznik przechowuje nazwę i wersję oprogramowania lub firmware "
1387
+ #~ "kamery albo innego urządzenia wejściowego obrazu użytego do wygenerowania "
1388
+ #~ "obrazu. Szczegółowy format nie jest określony, ale zaleca się "
1389
+ #~ "naśladowanie poniższego przykładu. Jeśli pole jest puste, jest traktowane "
1390
+ #~ "jako nieznane."
1391
+
1392
+ #~ msgid ""
1393
+ #~ "The date and time of image creation. In this standard (Exif-2.1) it is "
1394
+ #~ "the date and time the file was changed."
1395
+ #~ msgstr ""
1396
+ #~ "Data i czas stworzenia obrazu. W tym standardzie (Exif-2.1) jest to data "
1397
+ #~ "i czas zmiany pliku."
1398
+
1399
+ #~ msgid ""
1400
+ #~ "This tag records the name of the camera owner, photographer or image "
1401
+ #~ "creator. The detailed format is not specified, but it is recommended that "
1402
+ #~ "the information be written as in the example below for ease of "
1403
+ #~ "Interoperability. When the field is left blank, it is treated as unknown."
1404
+ #~ msgstr ""
1405
+ #~ "Ten znacznik przechowuje nazwę właściciela aparatu, fotografa lub twórcy "
1406
+ #~ "obrazu. Szczegółowy format nie jest określony, ale zaleca się "
1407
+ #~ "naśladowanie poniższego przykładu dla ułatwienia współpracy. Jeśli pole "
1408
+ #~ "jest puste, jest traktowane jako nieznane."
1409
+
1410
+ #~ msgid ""
1411
+ #~ "The chromaticity of the white point of the image. Normally this tag is "
1412
+ #~ "not necessary, since color space is specified in the colorspace "
1413
+ #~ "information tag (<ColorSpace>)."
1414
+ #~ msgstr ""
1415
+ #~ "Barwa białego punktu obrazu. Zwykle ten znacznik nie jest potrzebny, "
1416
+ #~ "ponieważ przestrzeń kolorów podana jest w znaczniku informacji o "
1417
+ #~ "przestrzeni kolorów (<ColorSpace>)."
1418
+
1419
+ #~ msgid ""
1420
+ #~ "The chromaticity of the three primary colors of the image. Normally this "
1421
+ #~ "tag is not necessary, since colorspace is specified in the colorspace "
1422
+ #~ "information tag (<ColorSpace>)."
1423
+ #~ msgstr ""
1424
+ #~ "Barwa trzech głównych kolorów obrazu. Zwykle ten znacznik nie jest "
1425
+ #~ "potrzebny, ponieważ przestrzeń kolorów podana jest w znaczniku informacji "
1426
+ #~ "o przestrzeni kolorów (<ColorSpace>)."
1427
+
1428
+ #~ msgid ""
1429
+ #~ "The offset to the start byte (SOI) of JPEG compressed thumbnail data. "
1430
+ #~ "This is not used for primary image JPEG data."
1431
+ #~ msgstr ""
1432
+ #~ "Położenie początkowego bajtu (SOI) danych miniaturki skompresowanej JPEG. "
1433
+ #~ "Nie jest używane dla danych JPEG głównego obrazu."
1434
+
1435
+ #~ msgid ""
1436
+ #~ "The number of bytes of JPEG compressed thumbnail data. This is not used "
1437
+ #~ "for primary image JPEG data. JPEG thumbnails are not divided but are "
1438
+ #~ "recorded as a continuous JPEG bitstream from SOI to EOI. Appn and COM "
1439
+ #~ "markers should not be recorded. Compressed thumbnails must be recorded in "
1440
+ #~ "no more than 64 Kbytes, including all other data to be recorded in APP1."
1441
+ #~ msgstr ""
1442
+ #~ "Liczba bajtów danych miniaturki skompresowanej JPEG. Nie jest używana dla "
1443
+ #~ "danych JPEG głównego obrazu. Miniaturki JPEG nie są dzielone, ale "
1444
+ #~ "zapisywane jako ciągły strumień JPEG od SOI do EOI. Znaczniki Appn i COM "
1445
+ #~ "nie powinny być używane. Skompresowane miniaturki muszą być zapisane w "
1446
+ #~ "najwyżej 64kB, włącznie ze wszystkimi innymi danymi zapisanymi w APP1."
1447
+
1448
+ #~ msgid ""
1449
+ #~ "The matrix coefficients for transformation from RGB to YCbCr image data. "
1450
+ #~ "No default is given in TIFF; but here the value given in Appendix E, "
1451
+ #~ "\"Color Space Guidelines\", is used as the default. The color space is "
1452
+ #~ "declared in a color space information tag, with the default being the "
1453
+ #~ "value that gives the optimal image characteristics Interoperability this "
1454
+ #~ "condition."
1455
+ #~ msgstr ""
1456
+ #~ "Macierz współczynników przekształcenia danych obrazu z RGB do YCbCr. Dla "
1457
+ #~ "TIFF nie ma wartości domyślnych, ale wartości podane w załączniku E "
1458
+ #~ "\"Color Space Guidelines\" są używane jako domyślne. Przestrzeń kolorów "
1459
+ #~ "jest określona w znaczniku informacji o przestrzeni kolorów z wartością "
1460
+ #~ "domyślną będącą tą, która daje optymalną charakterystykę obrazu w danym "
1461
+ #~ "przypadku."
1462
+
1463
+ #~ msgid ""
1464
+ #~ "The sampling ratio of chrominance components in relation to the luminance "
1465
+ #~ "component. In JPEG compressed data a JPEG marker is used instead of this "
1466
+ #~ "tag."
1467
+ #~ msgstr ""
1468
+ #~ "Współczynnik próbkowania składowych chrominancji w stosunku do składowej "
1469
+ #~ "luminancji. W danych skompresowanych algorytmem JPEG zamiast tego "
1470
+ #~ "znacznika używany jest znacznik JPEG."
1471
+
1472
+ #~ msgid ""
1473
+ #~ "The position of chrominance components in relation to the luminance "
1474
+ #~ "component. This field is designated only for JPEG compressed data or "
1475
+ #~ "uncompressed YCbCr data. The TIFF default is 1 (centered); but when Y:Cb:"
1476
+ #~ "Cr = 4:2:2 it is recommended in this standard that 2 (co-sited) be used "
1477
+ #~ "to record data, in order to improve the image quality when viewed on TV "
1478
+ #~ "systems. When this field does not exist, the reader shall assume the TIFF "
1479
+ #~ "default. In the case of Y:Cb:Cr = 4:2:0, the TIFF default (centered) is "
1480
+ #~ "recommended. If the reader does not have the capability of supporting "
1481
+ #~ "both kinds of <YCbCrPositioning>, it shall follow the TIFF default "
1482
+ #~ "regardless of the value in this field. It is preferable that readers be "
1483
+ #~ "able to support both centered and co-sited positioning."
1484
+ #~ msgstr ""
1485
+ #~ "Rozmieszczenie składowych chrominancji w stosunku do składowej "
1486
+ #~ "luminancji. To pole ma znaczenie tylko dla danych skompresowanych "
1487
+ #~ "algorytmem JPEG lub nieskompresowanych danych YCbCr. Domyślne dla TIFF "
1488
+ #~ "jest 1 (wyśrodkowane); ale kiedy Y:Cb:Cr = 4:2:2, zaleca się w tym "
1489
+ #~ "standardzie 2 (położone razem) w celu poprawienia jakości obrazu w "
1490
+ #~ "przypadku oglądania na telewizorze. Kiedy to pole nie istnieje, czytający "
1491
+ #~ "powinien założyć wartość domyślną dla TIFF. W przypadku Y:Cb:Cr = 4:2:0, "
1492
+ #~ "zalecana jest wartość domyślna dla TIFF (wyśrodkowane). Jeśli czytający "
1493
+ #~ "nie ma możliwości obsługi obu rodzajów rozmieszczenia, powinien używać "
1494
+ #~ "domyślnej wartości TIFF niezależnie od wartości tego pola. Zaleca się, "
1495
+ #~ "żeby czytający byli w stanie obsłużyć oba rodzaje rozmieszczenia."
1496
+
1497
+ #~ msgid ""
1498
+ #~ "The reference black point value and reference white point value. No "
1499
+ #~ "defaults are given in TIFF, but the values below are given as defaults "
1500
+ #~ "here. The color space is declared in a color space information tag, with "
1501
+ #~ "the default being the value that gives the optimal image characteristics "
1502
+ #~ "Interoperability these conditions."
1503
+ #~ msgstr ""
1504
+ #~ "Wartości czarnego i białego punktu odniesienia. W formacie TIFF nie ma "
1505
+ #~ "wartości domyślnych, ale poniższe są podane tutaj jako domyślne. "
1506
+ #~ "Przestrzeń kolorów jest określona w znaczniku informacji o przestrzeni "
1507
+ #~ "kolorów, z wartością domyślną dającą optymalną charakterystykę obrazu w "
1508
+ #~ "danych warunkach."
1509
+
1510
+ #~ msgid ""
1511
+ #~ "Indicates the color filter array (CFA) geometric pattern of the image "
1512
+ #~ "sensor when a one-chip color area sensor is used. It does not apply to "
1513
+ #~ "all sensing methods."
1514
+ #~ msgstr ""
1515
+ #~ "Oznaczenie wzoru geometrycznego CFA (color filter array - tablicy filtrów "
1516
+ #~ "kolorów) czujnika obrazu w przypadku użycia jednoukładowego czujnika "
1517
+ #~ "obszaru koloru. Nie odnosi się to do wszystkich metod próbkowania."
1518
+
1519
+ #~ msgid ""
1520
+ #~ "Copyright information. In this standard the tag is used to indicate both "
1521
+ #~ "the photographer and editor copyrights. It is the copyright notice of the "
1522
+ #~ "person or organization claiming rights to the image. The Interoperability "
1523
+ #~ "copyright statement including date and rights should be written in this "
1524
+ #~ "field; e.g., \"Copyright, John Smith, 19xx. All rights reserved.\". In "
1525
+ #~ "this standard the field records both the photographer and editor "
1526
+ #~ "copyrights, with each recorded in a separate part of the statement. When "
1527
+ #~ "there is a clear distinction between the photographer and editor "
1528
+ #~ "copyrights, these are to be written in the order of photographer followed "
1529
+ #~ "by editor copyright, separated by NULL (in this case, since the statement "
1530
+ #~ "also ends with a NULL, there are two NULL codes) (see example 1). When "
1531
+ #~ "only the photographer is given, it is terminated by one NULL code (see "
1532
+ #~ "example 2). When only the editor copyright is given, the photographer "
1533
+ #~ "copyright part consists of one space followed by a terminating NULL code, "
1534
+ #~ "then the editor copyright is given (see example 3). When the field is "
1535
+ #~ "left blank, it is treated as unknown."
1536
+ #~ msgstr ""
1537
+ #~ "Informacje o prawach autorskich. Jest to standardowy znacznik używany do "
1538
+ #~ "określenia praw autorskich zarówno fotografa, jak i redaktora. Jest to "
1539
+ #~ "informacja o osobie lub organizacji mającej prawa do obrazu. Standardowe "
1540
+ #~ "oświadczenie o prawach autorskich wraz z datą i prawami powinno być "
1541
+ #~ "zapisane w tym polu, np. \"Copyright, John Smith, 19xx. All rights "
1542
+ #~ "reserved.\". W tym standardzie pola opisują prawa zarówno fotografa, jak "
1543
+ #~ "i redaktora, z których każdy jest opisywany w oddzielnej części "
1544
+ #~ "oświadczenia. Jeśli jest jasne rozróżnienie między prawami fotografa i "
1545
+ #~ "redaktora, powinny być zapisane w kolejności najpierw fotograf, a "
1546
+ #~ "następnie redaktor, oddzielone znakiem NULL (w tym przypadku, jeśli "
1547
+ #~ "oświadczenie także kończy się znakiem NULL, powinny być dwa kody NULL; p. "
1548
+ #~ "przykład 1). Jeśli podano tylko fotografa, jest on kończony kodem NULL "
1549
+ #~ "(p. przykład 2). Jeśli podano tylko prawa redaktora, część przeznaczona "
1550
+ #~ "dla fotografa składa się z jednej spacji i następującego po niej kodu "
1551
+ #~ "NULL, a następnie podane są prawa redaktora (p. przykład 3). Jeśli pole "
1552
+ #~ "jest puste, jest traktowane jako nieznane."
1553
+
1554
+ #~ msgid "Exposure time, given in seconds (sec)."
1555
+ #~ msgstr "Czas ekspozycji podany w sekundach (sek)."
1556
+
1557
+ #~ msgid "The F number."
1558
+ #~ msgstr "Liczba F."
1559
+
1560
+ #~ msgid ""
1561
+ #~ "A pointer to the Exif IFD. Interoperability, Exif IFD has the same "
1562
+ #~ "structure as that of the IFD specified in TIFF. ordinarily, however, it "
1563
+ #~ "does not contain image data as in the case of TIFF."
1564
+ #~ msgstr ""
1565
+ #~ "Wskaźnik na Exif IFD. Exif IFD ma tę samą strukturę co IFD określone w "
1566
+ #~ "TIFF, oczywiście nie zawiera jednak danych obrazu jak w przypadku pliku "
1567
+ #~ "TIFF."
1568
+
1569
+ #~ msgid ""
1570
+ #~ "The class of the program used by the camera to set exposure when the "
1571
+ #~ "picture is taken."
1572
+ #~ msgstr ""
1573
+ #~ "Klasa programu użytego przez aparat do ustawienia ekspozycji przy "
1574
+ #~ "robieniu zdjęcia."
1575
+
1576
+ #, fuzzy
1577
+ #~ msgid ""
1578
+ #~ "Indicates the spectral sensitivity of each channel of the camera used. "
1579
+ #~ "The tag value is an ASCII string compatible with the standard developed "
1580
+ #~ "by the ASTM Technical Committee."
1581
+ #~ msgstr ""
1582
+ #~ "Oznaczenie czułości widmowej każdego kanału używanego przez aparat. "
1583
+ #~ "Wartość znacznika to łańcuch znaków ASCII kompatybilny ze standardem "
1584
+ #~ "stworzonym przez ASTM Technical Committee."
1585
+
1586
+ #~ msgid ""
1587
+ #~ "A pointer to the GPS Info IFD. The Interoperability structure of the GPS "
1588
+ #~ "Info IFD, like that of Exif IFD, has no image data."
1589
+ #~ msgstr ""
1590
+ #~ "Wskaźnik na GPS Info IFD. Struktura GPS Info IFD jest taka, jak Exif IFD, "
1591
+ #~ "ale bez danych obrazu."
1592
+
1593
+ #~ msgid ""
1594
+ #~ "Indicates the ISO Speed and ISO Latitude of the camera or input device as "
1595
+ #~ "specified in ISO 12232."
1596
+ #~ msgstr ""
1597
+ #~ "Określenie szybkości ISO i szerokości ISO aparatu lub urządzenia "
1598
+ #~ "wejściowego zgodne ze specyfikacją ISO 12232."
1599
+
1600
+ #~ msgid ""
1601
+ #~ "Indicates the Opto-Electoric Conversion Function (OECF) specified in ISO "
1602
+ #~ "14524. <OECF> is the relationship between the camera optical input and "
1603
+ #~ "the image values."
1604
+ #~ msgstr ""
1605
+ #~ "Określenie funkcji konwersji optoelektrycznej (OECF - Opto-Electric "
1606
+ #~ "Conversion Function) opisanej w ISO 14524. <OECF> to powiązanie między "
1607
+ #~ "wejściem optycznym aparatu a wartościami obrazu."
1608
+
1609
+ #, fuzzy
1610
+ #~ msgid ""
1611
+ #~ "The version of this standard supported. Nonexistence of this field is "
1612
+ #~ "taken to mean non-conformance to the standard."
1613
+ #~ msgstr ""
1614
+ #~ "Obsługiwana wersja tego standardu. Brak tego pola jest uznawany za "
1615
+ #~ "niezgodność ze standardem."
1616
+
1617
+ #~ msgid ""
1618
+ #~ "The date and time when the original image data was generated. For a "
1619
+ #~ "digital still camera the date and time the picture was taken are recorded."
1620
+ #~ msgstr ""
1621
+ #~ "Data i czas wygenerowania oryginalnych danych obrazu. Dla aparatu "
1622
+ #~ "cyfrowego zapisywana jest data i czas zrobienia zdjęcia."
1623
+
1624
+ #~ msgid "The date and time when the image was stored as digital data. "
1625
+ #~ msgstr "Data i czas zapisania obrazu jako danych cyfrowych. "
1626
+
1627
+ #~ msgid ""
1628
+ #~ "Information specific to compressed data. The channels of each component "
1629
+ #~ "are arranged in order from the 1st component to the 4th. For uncompressed "
1630
+ #~ "data the data arrangement is given in the <PhotometricInterpretation> "
1631
+ #~ "tag. However, since <PhotometricInterpretation> can only express the "
1632
+ #~ "order of Y, Cb and Cr, this tag is provided for cases when compressed "
1633
+ #~ "data uses components other than Y, Cb, and Cr and to enable support of "
1634
+ #~ "other sequences."
1635
+ #~ msgstr ""
1636
+ #~ "Informacje specyficzne dla skompresowanych danych. Kanały każdej "
1637
+ #~ "składowej są układane w kolejności od 1. do 4. Dla danych "
1638
+ #~ "nieskompresowanych ułożenie danych jest podane w znaczniku "
1639
+ #~ "<PhotometricInterpretation>. Jednak ponieważ <PhotometricInterpretation> "
1640
+ #~ "może wyrazić jedynie kolejność Y, Cb i Cr, ten znacznik został dodany dla "
1641
+ #~ "przypadków, kiedy skompresowane dane używają składowych innych niż Y, Cb "
1642
+ #~ "i Cr oraz aby umożliwić obsługę innych sekwencji."
1643
+
1644
+ #~ msgid ""
1645
+ #~ "Information specific to compressed data. The compression mode used for a "
1646
+ #~ "compressed image is indicated in unit bits per pixel."
1647
+ #~ msgstr ""
1648
+ #~ "Informacja specyficzna dla skompresowanych danych. Rodzaj kompresji użyty "
1649
+ #~ "dla skompresowanego obrazu jest określony w jednostkach bitów na piksel."
1650
+
1651
+ #~ msgid ""
1652
+ #~ "Shutter speed. The unit is the APEX (Additive System of Photographic "
1653
+ #~ "Exposure) setting (see Appendix C)."
1654
+ #~ msgstr ""
1655
+ #~ "Szybkość migawki. Jednostką jest ustawienie APEX (Additive System of "
1656
+ #~ "Photographic Exposure; p. załącznik C)."
1657
+
1658
+ #~ msgid "The lens aperture. The unit is the APEX value."
1659
+ #~ msgstr "Przysłona obiektywu. Jednostką jest wartość APEX."
1660
+
1661
+ #~ msgid ""
1662
+ #~ "The value of brightness. The unit is the APEX value. Ordinarily it is "
1663
+ #~ "given in the range of -99.99 to 99.99."
1664
+ #~ msgstr ""
1665
+ #~ "Wartość jasności. Jednostką jest wartość APEX. Zwykle jest podana w "
1666
+ #~ "przedziale od -99.99 do 99.99."
1667
+
1668
+ #~ msgid ""
1669
+ #~ "The exposure bias. The units is the APEX value. Ordinarily it is given in "
1670
+ #~ "the range of -99.99 to 99.99."
1671
+ #~ msgstr ""
1672
+ #~ "Odchylenie ekspozycji. Jednostką jest wartość APEX. Zwykle jest podana w "
1673
+ #~ "przedziale od -99.99 do 99.99."
1674
+
1675
+ #~ msgid ""
1676
+ #~ "The smallest F number of the lens. The unit is the APEX value. Ordinarily "
1677
+ #~ "it is given in the range of 00.00 to 99.99, but it is not limited to this "
1678
+ #~ "range."
1679
+ #~ msgstr ""
1680
+ #~ "Najmniejsza liczba F obiektywu. Jednostką jest wartość APEX. Zwykle jest "
1681
+ #~ "podana w przedziale od -99.99 do 99.99, ale nie ma ograniczenia do tego "
1682
+ #~ "zakresu."
1683
+
1684
+ #~ msgid "The distance to the subject, given in meters."
1685
+ #~ msgstr "Odległość obiektu podana w metrach"
1686
+
1687
+ #~ msgid "The metering mode."
1688
+ #~ msgstr "Tryb pomiaru."
1689
+
1690
+ #~ msgid "The kind of light source."
1691
+ #~ msgstr "Rodzaj źródła światła."
1692
+
1693
+ #~ msgid ""
1694
+ #~ "This tag is recorded when an image is taken using a strobe light (flash)."
1695
+ #~ msgstr ""
1696
+ #~ "Ten znacznik jest zapisywany kiedy zdjęcie było robione z użyciem światła "
1697
+ #~ "stroboskopowego (flesza)."
1698
+
1699
+ #~ msgid ""
1700
+ #~ "The actual focal length of the lens, in mm. Conversion is not made to the "
1701
+ #~ "focal length of a 35 mm film camera."
1702
+ #~ msgstr ""
1703
+ #~ "Rzeczywista ogniskowa obiektywu w mm, bez przekształcenia do ogniskowej "
1704
+ #~ "dla aparatu na film 35 mm."
1705
+
1706
+ #~ msgid ""
1707
+ #~ "A tag for manufacturers of Exif writers to record any desired "
1708
+ #~ "information. The contents are up to the manufacturer."
1709
+ #~ msgstr ""
1710
+ #~ "Znacznik dla producentów urządzeń zapisujących Exif do zapisywania "
1711
+ #~ "dowolnie wybranych informacji. Zawartość zależy od producenta."
1712
+
1713
+ #, fuzzy
1714
+ #~ msgid ""
1715
+ #~ "A tag for Exif users to write keywords or comments on the image besides "
1716
+ #~ "those in <ImageDescription>, and without the character code limitations "
1717
+ #~ "of the <ImageDescription> tag. The character code used in the "
1718
+ #~ "<UserComment> tag is identified based on an ID code in a fixed 8-byte "
1719
+ #~ "area at the start of the tag data area. The unused portion of the area is "
1720
+ #~ "padded with NULL (\"00.h\"). ID codes are assigned by means of "
1721
+ #~ "registration. The designation method and references for each character "
1722
+ #~ "code are given in Table 6. The value of CountN is determined based on the "
1723
+ #~ "8 bytes in the character code area and the number of bytes in the user "
1724
+ #~ "comment part. Since the TYPE is not ASCII, NULL termination is not "
1725
+ #~ "necessary (see Fig. 9). The ID code for the <UserComment> area may be a "
1726
+ #~ "Defined code such as JIS or ASCII, or may be Undefined. The Undefined "
1727
+ #~ "name is UndefinedText, and the ID code is filled with 8 bytes of all "
1728
+ #~ "\"NULL\" (\"00.H\"). An Exif reader that reads the <UserComment> tag must "
1729
+ #~ "have a function for determining the ID code. This function is not "
1730
+ #~ "required in Exif readers that do not use the <UserComment> tag (see Table "
1731
+ #~ "7). When a <UserComment> area is set aside, it is recommended that the ID "
1732
+ #~ "code be ASCII and that the following user comment part be filled with "
1733
+ #~ "blank characters [20.H]."
1734
+ #~ msgstr ""
1735
+ #~ "Znacznik dla użytkowników formatu Exif do zapisywania słów kluczowych lub "
1736
+ #~ "komentarzy do obrazu poza tymi w <ImageDescription> i bez ograniczeń co "
1737
+ #~ "do kodów znaków w znaczniku <ImageDescription>. Kody znaków używane w "
1738
+ #~ "znaczniku <UserComment> są określane w oparciu o kod ID w stałym polu 8-"
1739
+ #~ "bajtowym na początku obszaru danych znacznika. Nieużywana część tego "
1740
+ #~ "obszaru jest wypełniania znakami NULL (\"00.h\"). Kody ID są przypisywane "
1741
+ #~ "poprzez rejestrację. Metoda określania i odniesienia dla każdego zestawu "
1742
+ #~ "znaków są podane w tabeli 6. Wartość CountN jest określana w oparciu o 8 "
1743
+ #~ "bajtów z obszaru kodowania znaków i liczby bajtów w części zawierającej "
1744
+ #~ "komentarz użytkownika. Ponieważ typ pola nie jest ASCII, nie jest "
1745
+ #~ "potrzebne kończenie łańcucha znakiem NULL (p. rys. 9). Kod ID dla obszaru "
1746
+ #~ "<UserComment> może być zdefiniowanym kodem takim jak JIS lub ASCII, albo "
1747
+ #~ "może być nieokreślony. Nazwa pola nieokreślonego (Undefined) to "
1748
+ #~ "UndefinedText, a jego kod ID jest wypełniany 8 bajtami znaków NULL (\"00.H"
1749
+ #~ "\"). Czytający Exif, który ma czytać znacznik <UserComment> musi mieć "
1750
+ #~ "funkcję określania kodu ID. Funkcja ta nie jest wymagana dla czytających "
1751
+ #~ "Exif nie używających znacznika <UserComment> (p. tabela 7). Kiedy "
1752
+ #~ "znacznik <UserComment> jest pozostawiony nie używany, zaleca się żeby kod "
1753
+ #~ "ID był ASCII, a następująca po nim część z komentarzem użytkownika była "
1754
+ #~ "wypełniona pustymi znakami [20.h]."
1755
+
1756
+ #~ msgid "A tag used to record fractions of seconds for the <DateTime> tag."
1757
+ #~ msgstr ""
1758
+ #~ "Znacznik używany do zapisywania ułamków sekund dla znacznika <DateTime>."
1759
+
1760
+ #~ msgid ""
1761
+ #~ "A tag used to record fractions of seconds for the <DateTimeOriginal> tag."
1762
+ #~ msgstr ""
1763
+ #~ "Znacznik używany do zapisywania ułamków sekund dla znacznika "
1764
+ #~ "<DateTimeOriginal>."
1765
+
1766
+ #~ msgid ""
1767
+ #~ "A tag used to record fractions of seconds for the <DateTimeDigitized> tag."
1768
+ #~ msgstr ""
1769
+ #~ "Znacznik używany do zapisywania ułamków sekund dla znacznika "
1770
+ #~ "<DateTimeDigitized>."
1771
+
1772
+ #~ msgid "The FlashPix format version supported by a FPXR file."
1773
+ #~ msgstr "Wersja formatu FlashPix obsługiwana przez plik FPXR."
1774
+
1775
+ #~ msgid ""
1776
+ #~ "The color space information tag is always recorded as the color space "
1777
+ #~ "specifier. Normally sRGB (=1) is used to define the color space based on "
1778
+ #~ "the PC monitor conditions and environment. If a color space other than "
1779
+ #~ "sRGB is used, Uncalibrated (=FFFF.H) is set. Image data recorded as "
1780
+ #~ "Uncalibrated can be treated as sRGB when it is converted to FlashPix. On "
1781
+ #~ "sRGB see Appendix E."
1782
+ #~ msgstr ""
1783
+ #~ "Znacznik informacji o przestrzeni kolorów jest zawsze zapisywany w celu "
1784
+ #~ "określenia przestrzeni kolorów. Zwykle używane jest sRGB (=1) do "
1785
+ #~ "określenia przestrzeni kolorów w oparciu o warunki i środowisko monitora "
1786
+ #~ "PC. Jeśli użyta jest inna przestrzeń kolorów niż sRGB, ustawiona jest "
1787
+ #~ "wartość \"nieskalibrowana\" (Uncalibrated, =FFFF.H). Dane obrazu zapisane "
1788
+ #~ "jako nieskalibrowane mogą być traktowane jako sRGB przy konwersji do "
1789
+ #~ "FlashPix. O sRGB p. załącznik E."
1790
+
1791
+ #, fuzzy
1792
+ #~ msgid ""
1793
+ #~ "Information specific to compressed data. When a compressed file is "
1794
+ #~ "recorded, the valid width of the meaningful image must be recorded in "
1795
+ #~ "this tag, whether or not there is padding data or a restart marker. This "
1796
+ #~ "tag should not exist in an uncompressed file. For details see section "
1797
+ #~ "2.8.1 and Appendix F of the Exif 2.2 standard."
1798
+ #~ msgstr ""
1799
+ #~ "Informacje specyficzne dla skompresowanych danych. Kiedy zapisywany jest "
1800
+ #~ "skompresowany plik, w tym znaczniku musi być zapisana poprawna szerokość "
1801
+ #~ "znaczącego obrazu, niezależnie od istnienia danych dopełniających czy "
1802
+ #~ "znacznika restartu. Ten znacznik nie powinien istnieć w pliku "
1803
+ #~ "nieskompresowanym. Szczegóły w sekcji 2.8.1 i załączniku F."
1804
+
1805
+ #, fuzzy
1806
+ #~ msgid ""
1807
+ #~ "Information specific to compressed data. When a compressed file is "
1808
+ #~ "recorded, the valid height of the meaningful image must be recorded in "
1809
+ #~ "this tag, whether or not there is padding data or a restart marker. This "
1810
+ #~ "tag should not exist in an uncompressed file. For details see section "
1811
+ #~ "2.8.1 and Appendix F of the Exif 2.2 standard. Since data padding is "
1812
+ #~ "unnecessary in the vertical direction, the number of lines recorded in "
1813
+ #~ "this valid image height tag will in fact be the same as that recorded in "
1814
+ #~ "the SOF."
1815
+ #~ msgstr ""
1816
+ #~ "Informacje specyficzne dla skompresowanych danych. Kiedy zapisywany jest "
1817
+ #~ "skompresowany plik, w tym znaczniku musi być zapisana poprawna wysokość "
1818
+ #~ "znaczącego obrazu, niezależnie od istnienia danych dopełniających czy "
1819
+ #~ "znacznika restartu. Ten znacznik nie powinien istnieć w pliku "
1820
+ #~ "nieskompresowanym. Szczegóły w sekcji 2.8.1 i załączniku F. Ponieważ "
1821
+ #~ "dopełnianie danych w kierunku pionowym nie jest potrzebne, liczba linii "
1822
+ #~ "zapisana w tym polu będzie w praktyce równa tej zapisanej w SOF."
1823
+
1824
+ #, fuzzy
1825
+ #~ msgid ""
1826
+ #~ "This tag is used to record the name of an audio file related to the image "
1827
+ #~ "data. The only relational information recorded here is the Exif audio "
1828
+ #~ "file name and extension (an ASCII string consisting of 8 characters + '.' "
1829
+ #~ "+ 3 characters). The path is not recorded. Stipulations on audio are "
1830
+ #~ "given in section 3.6.3 of the Exif 2.2 standard. File naming conventions "
1831
+ #~ "are given in section 3.7.1. When using this tag, audio files must be "
1832
+ #~ "recorded in conformance to the Exif audio format. Writers are also "
1833
+ #~ "allowed to store the data such as Audio within APP2 as FlashPix extension "
1834
+ #~ "stream data. Audio files must be recorded in conformance to the Exif "
1835
+ #~ "audio format. The mapping of Exif image files and audio files is done in "
1836
+ #~ "any of the three ways shown in Table 8. If multiple files are mapped to "
1837
+ #~ "one file as in [2] or [3] of this table, the above format is used to "
1838
+ #~ "record just one audio file name. If there are multiple audio files, the "
1839
+ #~ "first recorded file is given. In the case of [3] in Table 8, for example, "
1840
+ #~ "for the Exif image file \"DSC00001.JPG\" only \"SND00001.WAV\" is given "
1841
+ #~ "as the related Exif audio file. When there are three Exif audio files "
1842
+ #~ "\"SND00001.WAV\", \"SND00002.WAV\" and \"SND00003.WAV\", the Exif image "
1843
+ #~ "file name for each of them, \"DSC00001.JPG\", is indicated. By combining "
1844
+ #~ "multiple relational information, a variety of playback possibilities can "
1845
+ #~ "be supported. The method of using relational information is left to the "
1846
+ #~ "implementation on the playback side. Since this information is an ASCII "
1847
+ #~ "character string, it is terminated by NULL. When this tag is used to map "
1848
+ #~ "audio files, the relation of the audio file to image data must also be "
1849
+ #~ "indicated on the audio file end."
1850
+ #~ msgstr ""
1851
+ #~ "Ten znacznik służy co zapisywania nazwy pliku dźwiękowego związanego z "
1852
+ #~ "danymi obrazu. Jedyną informacją relacyjną zapisywaną tutaj jest nazwa "
1853
+ #~ "pliku dźwiękowego Exif i rozszerzenie (łańcuch ASCII składający się z 8 "
1854
+ #~ "znaków + '.' + 3 znaków). Ścieżka nie jest zapisywana. Zastrzeżenia "
1855
+ #~ "odnośnie dźwięku są podane w sekcji 3.6.3. Konwencje nazywania plików są "
1856
+ #~ "podane w sekcji 3.7.1. Kiedy używany jest ten znacznik, pliki dźwiękowe "
1857
+ #~ "muszą być zapisane zgodnie z formatem dźwięku Exif. Zapisujący mogą także "
1858
+ #~ "zapisywać dane takie jak dźwięk wewnątrz danych strumieni rozszerzeń APP2 "
1859
+ #~ "lub FlashPix. Pliki dźwiękowe muszą być zapisane zgodnie z formatem "
1860
+ #~ "dźwięku Exif. Odwzorowanie między plikami obrazów Exif a plikami "
1861
+ #~ "dźwiękowymi Exif jest wykonywane na trzy sposoby pokazane w tabeli 8. "
1862
+ #~ "Jeśli wiele plików jest odwzorowywanych na jeden plik, jak w przypadku "
1863
+ #~ "[2] lub [3] w tabeli, powyższy format służy do zapisywania tylko jednej "
1864
+ #~ "nazwy pliku dźwiękowego. Jeśli jest wiele plików dźwiękowych, podawany "
1865
+ #~ "jest pierwszy plik. W przypadku [3] w tabeli 8 na przykład dla pliku "
1866
+ #~ "obrazu Exif \"DSC00001.JPG\" jako powiązany plik dźwiękowy Exif podany "
1867
+ #~ "jest jedynie \"SND00001.WAV\". Kiedy są trzy pliki dźwiękowe \"SND00001."
1868
+ #~ "WAV\", \"SND00002.WAV\" i \"SND00003.WAV\", dla każdego z nich podawana "
1869
+ #~ "jest nazwa pliku obrazu Exif \"DSC00001.JPG\". Poprzez łączenie wielu "
1870
+ #~ "informacji relacyjnych obsługiwane jest wiele możliwości odtwarzania. "
1871
+ #~ "Sposób używania informacji relacyjnych jest pozostawiony implementacji po "
1872
+ #~ "stronie odtwarzania. Ponieważ ta informacja jest łańcuchem ASCII, jest "
1873
+ #~ "zakończona znakiem NULL. Kiedy ten znacznik jest używany do przypisywania "
1874
+ #~ "plików dźwiękowych do plików obrazu, relacja pliku dźwiękowego do danych "
1875
+ #~ "obrazu musi być określona także po stronie pliku dźwiękowego."
1876
+
1877
+ #~ msgid ""
1878
+ #~ "Interoperability IFD is composed of tags which stores the information to "
1879
+ #~ "ensure the Interoperability and pointed by the following tag located in "
1880
+ #~ "Exif IFD. The Interoperability structure of Interoperability IFD is the "
1881
+ #~ "same as TIFF defined IFD structure but does not contain the image data "
1882
+ #~ "characteristically compared with normal TIFF IFD."
1883
+ #~ msgstr ""
1884
+ #~ "Interoperability IFD jest złożony ze znaczników przechowujących "
1885
+ #~ "informacje zapewniające współpracę i wskazywane przez ten znacznik "
1886
+ #~ "umieszczony w Exif IFD. Struktura Interoperability w Interoperability IFD "
1887
+ #~ "jest taka sama jak struktra IFD zdefiniowana w TIFF, ale w porównaniu do "
1888
+ #~ "normalnego TIFF IFD nie zawiera danych obrazu."
1889
+
1890
+ #~ msgid ""
1891
+ #~ "Indicates the strobe energy at the time the image is captured, as "
1892
+ #~ "measured in Beam Candle Power Seconds (BCPS)."
1893
+ #~ msgstr ""
1894
+ #~ "Określenie energii błysku w czasie robienia zdjęcia mierzonej w "
1895
+ #~ "jednostkach BCPS (Beam Candle Power Seconds)."
1896
+
1897
+ #~ msgid ""
1898
+ #~ "This tag records the camera or input device spatial frequency table and "
1899
+ #~ "SFR values in the direction of image width, image height, and diagonal "
1900
+ #~ "direction, as specified in ISO 12233."
1901
+ #~ msgstr ""
1902
+ #~ "Ten znacznik zapisuje tabelę częstotliwości przestrzennych aparatu lub "
1903
+ #~ "urządzenia wejściowego oraz wartości SFR w kierunku szerokości obrazu, "
1904
+ #~ "wysokości obrazu i przekątnej zgodnie ze specyfikacją ISO 12233."
1905
+
1906
+ #~ msgid ""
1907
+ #~ "Indicates the number of pixels in the image width (X) direction per "
1908
+ #~ "<FocalPlaneResolutionUnit> on the camera focal plane."
1909
+ #~ msgstr ""
1910
+ #~ "Określenie liczby pikseli w kierunku szerokości obrazu (X) na "
1911
+ #~ "<FocalPlaneResolutionUnit> w płaszczyźnie ogniskowej aparatu."
1912
+
1913
+ #~ msgid ""
1914
+ #~ "Indicates the number of pixels in the image height (V) direction per "
1915
+ #~ "<FocalPlaneResolutionUnit> on the camera focal plane."
1916
+ #~ msgstr ""
1917
+ #~ "Określenie liczby pikseli w kierunku wysokości obrazu (Y) na "
1918
+ #~ "<FocalPlaneResolutionUnit> w płaszczyźnie ogniskowej aparatu."
1919
+
1920
+ #~ msgid ""
1921
+ #~ "Indicates the unit for measuring <FocalPlaneXResolution> and "
1922
+ #~ "<FocalPlaneYResolution>. This value is the same as the <ResolutionUnit>."
1923
+ #~ msgstr ""
1924
+ #~ "Określenie jednostki miary <FocalPlaneXResolution> i "
1925
+ #~ "<FocalPlaneYResolution>. Ta wartość jest taka sama jak <ResolutionUnit>."
1926
+
1927
+ #~ msgid ""
1928
+ #~ "Indicates the location of the main subject in the scene. The value of "
1929
+ #~ "this tag represents the pixel at the center of the main subject relative "
1930
+ #~ "to the left edge, prior to rotation processing as per the <Rotation> tag. "
1931
+ #~ "The first value indicates the X column number and second indicates the Y "
1932
+ #~ "row number."
1933
+ #~ msgstr ""
1934
+ #~ "Określenie położenia głównego obiektu na scenie. Wartość tego znacznika "
1935
+ #~ "reprezentuje piksel w środku głównego obiektu względem lewej krawędzi, "
1936
+ #~ "przed wykonaniem obrotu opisanego znacznikiem <Rotation>. Pierwsza "
1937
+ #~ "wartość określa numer kolumny X, a druga numer wiersza Y."
1938
+
1939
+ #~ msgid ""
1940
+ #~ "Indicates the exposure index selected on the camera or input device at "
1941
+ #~ "the time the image is captured."
1942
+ #~ msgstr ""
1943
+ #~ "Określenie indeksu ekspozycji wybranego przez aparat lub urządzenie "
1944
+ #~ "wejściowe w czasie robienia zdjęcia."
1945
+
1946
+ #~ msgid "Indicates the image sensor type on the camera or input device."
1947
+ #~ msgstr ""
1948
+ #~ "Określenie rodzaju czujnika obrazu w aparacie lub urządzeniu wejściowym."
1949
+
1950
+ #~ msgid ""
1951
+ #~ "Indicates the image source. If a DSC recorded the image, this tag value "
1952
+ #~ "of this tag always be set to 3, indicating that the image was recorded on "
1953
+ #~ "a DSC."
1954
+ #~ msgstr ""
1955
+ #~ "Określenie źródła obrazu. Jeśli obraz był zapisany przez DSC, wartość "
1956
+ #~ "tego znacznika zawsze wynosi 3, oznaczając, że obraz był zapisany przez "
1957
+ #~ "DSC."
1958
+
1959
+ #~ msgid ""
1960
+ #~ "Indicates the type of scene. If a DSC recorded the image, this tag value "
1961
+ #~ "must always be set to 1, indicating that the image was directly "
1962
+ #~ "photographed."
1963
+ #~ msgstr ""
1964
+ #~ "Określenie rodzaju sceny. Jeśli obraz był zapisany przez DSC, wartość "
1965
+ #~ "tego znacznika zawsze musi być ustawiona na 1, oznaczając, że obraz był "
1966
+ #~ "bezpośrednio sfotografowany."
1967
+
1968
+ #~ msgid ""
1969
+ #~ "This tag indicates the location and area of the main subject in the "
1970
+ #~ "overall scene."
1971
+ #~ msgstr ""
1972
+ #~ "Ten znacznik określa położenie i obszar głównego obiektu na całej scenie."
1973
+
1974
+ #~ msgid ""
1975
+ #~ "This tag indicates the use of special processing on image data, such as "
1976
+ #~ "rendering geared to output. When special processing is performed, the "
1977
+ #~ "reader is expected to disable or minimize any further processing."
1978
+ #~ msgstr ""
1979
+ #~ "Ten znacznik określa użycie specjalnego przetwarzania danych obrazu, "
1980
+ #~ "takiego jak rendering zastosowany na wyjściu. Jeśli jest wykonane "
1981
+ #~ "specjalne przetwarzanie, czytający powinien wyłączyć albo zminimalizować "
1982
+ #~ "dalsze przetwarzanie."
1983
+
1984
+ #~ msgid ""
1985
+ #~ "This tag indicates the exposure mode set when the image was shot. In auto-"
1986
+ #~ "bracketing mode, the camera shoots a series of frames of the same scene "
1987
+ #~ "at different exposure settings."
1988
+ #~ msgstr ""
1989
+ #~ "Ten znacznik określa tryb ekspozycji ustawiony przy robieniu zdjęcia. W "
1990
+ #~ "trybie auto bracket aparat pstryka serię klatek tej samej sceny z różnymi "
1991
+ #~ "ustawieniami ekspozycji."
1992
+
1993
+ #~ msgid ""
1994
+ #~ "This tag indicates the white balance mode set when the image was shot."
1995
+ #~ msgstr ""
1996
+ #~ "Ten znacznik określa tryb balansu bieli ustawiony przy robieniu zdjęcia."
1997
+
1998
+ #~ msgid ""
1999
+ #~ "This tag indicates the digital zoom ratio when the image was shot. If the "
2000
+ #~ "numerator of the recorded value is 0, this indicates that digital zoom "
2001
+ #~ "was not used."
2002
+ #~ msgstr ""
2003
+ #~ "Ten znacznik określa współczynnik powiększenia cyfrowego w czasie "
2004
+ #~ "robienia zdjęcia. Jeśli licznik wartości znacznika jest równy 0, oznacza "
2005
+ #~ "to, że nie użyto cyfrowego powiększenia."
2006
+
2007
+ #~ msgid ""
2008
+ #~ "This tag indicates the equivalent focal length assuming a 35mm film "
2009
+ #~ "camera, in mm. A value of 0 means the focal length is unknown. Note that "
2010
+ #~ "this tag differs from the FocalLength tag."
2011
+ #~ msgstr ""
2012
+ #~ "Ten znacznik określa odpowiednik ogniskowej w mm przy założeniu aparatu "
2013
+ #~ "na film 35 mm. Wartość 0 oznacza, że ogniskowa jest nieznana. Należy "
2014
+ #~ "zauważyć, że ten znacznik różni się od znacznika FocalLength."
2015
+
2016
+ #~ msgid ""
2017
+ #~ "This tag indicates the type of scene that was shot. It can also be used "
2018
+ #~ "to record the mode in which the image was shot. Note that this differs "
2019
+ #~ "from the scene type (SceneType) tag."
2020
+ #~ msgstr ""
2021
+ #~ "Ten znacznik określa rodzaj sceny na zdjęciu. Może być także wykorzystany "
2022
+ #~ "do zapisania trybu w którym było robione zdjęcie. Należy zauważyć, że ten "
2023
+ #~ "znacznik różni się od znacznika rodzaju sceny (SceneType)."
2024
+
2025
+ #~ msgid "This tag indicates the degree of overall image gain adjustment."
2026
+ #~ msgstr "Ten znacznik określa stopień wzmocnienia całego obrazu."
2027
+
2028
+ #~ msgid ""
2029
+ #~ "This tag indicates the direction of contrast processing applied by the "
2030
+ #~ "camera when the image was shot."
2031
+ #~ msgstr ""
2032
+ #~ "Ten znacznik określa kierunek przetwarzania kontrastu wykonanego przez "
2033
+ #~ "aparat przy robieniu zdjęcia."
2034
+
2035
+ #~ msgid ""
2036
+ #~ "This tag indicates the direction of saturation processing applied by the "
2037
+ #~ "camera when the image was shot."
2038
+ #~ msgstr ""
2039
+ #~ "Ten znacznik określa kierunek przetwarzania nasycenia wykonanego przez "
2040
+ #~ "aparat przy robieniu zdjęcia."
2041
+
2042
+ #~ msgid ""
2043
+ #~ "This tag indicates the direction of sharpness processing applied by the "
2044
+ #~ "camera when the image was shot."
2045
+ #~ msgstr ""
2046
+ #~ "Ten znacznik określa kierunek przetwarzania ostrości wykonanego przez "
2047
+ #~ "aparat przy robieniu zdjęcia."
2048
+
2049
+ #~ msgid ""
2050
+ #~ "This tag indicates information on the picture-taking conditions of a "
2051
+ #~ "particular camera model. The tag is used only to indicate the picture-"
2052
+ #~ "taking conditions in the reader."
2053
+ #~ msgstr ""
2054
+ #~ "Ten znacznik określa informacje o warunkach robienia zdjęcia dla "
2055
+ #~ "konkretnego modelu aparatu. Jest on używany tylko do określenia warunków "
2056
+ #~ "robienia zdjęcia przy odczycie."
2057
+
2058
+ #~ msgid "This tag indicates the distance to the subject."
2059
+ #~ msgstr "Ten znacznik określa odległość od obiektu."
2060
+
2061
+ #~ msgid ""
2062
+ #~ "This tag indicates an identifier assigned uniquely to each image. It is "
2063
+ #~ "recorded as an ASCII string equivalent to hexadecimal notation and 128-"
2064
+ #~ "bit fixed length."
2065
+ #~ msgstr ""
2066
+ #~ "Ten znacznik określa unikalny identyfikator przypisany każdemu zdjęciu. "
2067
+ #~ "Jest on zapisany jako łańcuch ASCII odpowiadający notacji szesnastkowej o "
2068
+ #~ "stałej długości 128 bitów."
2069
+
2070
+ #, fuzzy
2071
+ #~ msgid ""
2072
+ #~ "Indicates the version of GPSInfoIFD. The version is given as 2.2.0.0. "
2073
+ #~ "This tag is mandatory when GPSInfo tag is present. Note that the "
2074
+ #~ "GPSVersionID tag is written as a different byte than the Exif Version tag."
2075
+ #~ msgstr ""
2076
+ #~ "Oznaczenie wersji <GPSInfoIFD>. Wersja jest podawana jako 2.0.0.0. Ten "
2077
+ #~ "znacznik jest obowiązkowy, jeśli obecny jest znacznik <GPSInfo>. (Uwaga: "
2078
+ #~ "znacznik <GPSVersionID> jest podawany w bajtach, w przeciwieństwie do "
2079
+ #~ "znacznika <ExifVersion>. Kiedy wersja to 2.0.0.0, znacznik ma wartość "
2080
+ #~ "02000000.H)."
2081
+
2082
+ #~ msgid ""
2083
+ #~ "Indicates whether the latitude is north or south latitude. The ASCII "
2084
+ #~ "value 'N' indicates north latitude, and 'S' is south latitude."
2085
+ #~ msgstr ""
2086
+ #~ "Oznaczenie, czy szerokość geograficzna jest północna, czy południowa. "
2087
+ #~ "Wartość ASCII 'N' oznacza szerokość północną, a 'S' południową."
2088
+
2089
+ #, fuzzy
2090
+ #~ msgid ""
2091
+ #~ "Indicates the latitude. The latitude is expressed as three RATIONAL "
2092
+ #~ "values giving the degrees, minutes, and seconds, respectively. If "
2093
+ #~ "latitude is expressed as degrees, minutes and seconds, a typical format "
2094
+ #~ "would be dd/1,mm/1,ss/1. When degrees and minutes are used and, for "
2095
+ #~ "example, fractions of minutes are given up to two decimal places, the "
2096
+ #~ "format would be dd/1,mmmm/100,0/1."
2097
+ #~ msgstr ""
2098
+ #~ "Określenie szerokości geograficznej. Szerokość jest wyrażona jako trzy "
2099
+ #~ "wartości RATIONAL (wymierne) podające odpowiednio stopnie, minuty i "
2100
+ #~ "sekundy. Kiedy są wyrażone stopnie, minuty i sekundy, format to dd/1,mm/1,"
2101
+ #~ "ss/1. Kiedy są wyrażone stopnie i minuty oraz np. ułamki minut są podane "
2102
+ #~ "z dokładnością do dwóch miejsc po przecinku, format to dd/1,mmmm/100,0/1."
2103
+
2104
+ #~ msgid ""
2105
+ #~ "Indicates whether the longitude is east or west longitude. ASCII 'E' "
2106
+ #~ "indicates east longitude, and 'W' is west longitude."
2107
+ #~ msgstr ""
2108
+ #~ "Określenie, czy długość geograficzna jest wschodnia, czy zachodnia. "
2109
+ #~ "Wartość ASCII 'E' oznacza długość wschodnią, a 'W' zachodnią."
2110
+
2111
+ #, fuzzy
2112
+ #~ msgid ""
2113
+ #~ "Indicates the longitude. The longitude is expressed as three RATIONAL "
2114
+ #~ "values giving the degrees, minutes, and seconds, respectively. If "
2115
+ #~ "longitude is expressed as degrees, minutes and seconds, a typical format "
2116
+ #~ "would be ddd/1,mm/1,ss/1. When degrees and minutes are used and, for "
2117
+ #~ "example, fractions of minutes are given up to two decimal places, the "
2118
+ #~ "format would be ddd/1,mmmm/100,0/1."
2119
+ #~ msgstr ""
2120
+ #~ "Określenie długości geograficznej. Szerokość jest wyrażona jako trzy "
2121
+ #~ "wartości RATIONAL (wymierne) podające odpowiednio stopnie, minuty i "
2122
+ #~ "sekundy. Kiedy są wyrażone stopnie, minuty i sekundy, format to dd/1,mm/1,"
2123
+ #~ "ss/1. Kiedy są wyrażone stopnie i minuty oraz np. ułamki minut są podane "
2124
+ #~ "z dokładnością do dwóch miejsc po przecinku, format to dd/1,mmmm/100,0/1."
2125
+
2126
+ #, fuzzy
2127
+ #~ msgid ""
2128
+ #~ "Indicates whether the latitude of the destination point is north or south "
2129
+ #~ "latitude. The ASCII value 'N' indicates north latitude, and 'S' is south "
2130
+ #~ "latitude."
2131
+ #~ msgstr ""
2132
+ #~ "Oznaczenie, czy szerokość geograficzna jest północna, czy południowa. "
2133
+ #~ "Wartość ASCII 'N' oznacza szerokość północną, a 'S' południową."
2134
+
2135
+ #, fuzzy
2136
+ #~ msgid ""
2137
+ #~ "Indicates the latitude of the destination point. The latitude is "
2138
+ #~ "expressed as three RATIONAL values giving the degrees, minutes, and "
2139
+ #~ "seconds, respectively. If latitude is expressed as degrees, minutes and "
2140
+ #~ "seconds, a typical format would be dd/1,mm/1,ss/1. When degrees and "
2141
+ #~ "minutes are used and, for example, fractions of minutes are given up to "
2142
+ #~ "two decimal places, the format would be dd/1,mmmm/100,0/1."
2143
+ #~ msgstr ""
2144
+ #~ "Określenie szerokości geograficznej. Szerokość jest wyrażona jako trzy "
2145
+ #~ "wartości RATIONAL (wymierne) podające odpowiednio stopnie, minuty i "
2146
+ #~ "sekundy. Kiedy są wyrażone stopnie, minuty i sekundy, format to dd/1,mm/1,"
2147
+ #~ "ss/1. Kiedy są wyrażone stopnie i minuty oraz np. ułamki minut są podane "
2148
+ #~ "z dokładnością do dwóch miejsc po przecinku, format to dd/1,mmmm/100,0/1."
2149
+
2150
+ #, fuzzy
2151
+ #~ msgid ""
2152
+ #~ "Indicates whether the longitude of the destination point is east or west "
2153
+ #~ "longitude. ASCII 'E' indicates east longitude, and 'W' is west longitude."
2154
+ #~ msgstr ""
2155
+ #~ "Określenie, czy długość geograficzna jest wschodnia, czy zachodnia. "
2156
+ #~ "Wartość ASCII 'E' oznacza długość wschodnią, a 'W' zachodnią."
2157
+
2158
+ #, fuzzy
2159
+ #~ msgid ""
2160
+ #~ "Indicates the longitude of the destination point. The longitude is "
2161
+ #~ "expressed as three RATIONAL values giving the degrees, minutes, and "
2162
+ #~ "seconds, respectively. If longitude is expressed as degrees, minutes and "
2163
+ #~ "seconds, a typical format would be ddd/1,mm/1,ss/1. When degrees and "
2164
+ #~ "minutes are used and, for example, fractions of minutes are given up to "
2165
+ #~ "two decimal places, the format would be ddd/1,mmmm/100,0/1."
2166
+ #~ msgstr ""
2167
+ #~ "Określenie długości geograficznej. Szerokość jest wyrażona jako trzy "
2168
+ #~ "wartości RATIONAL (wymierne) podające odpowiednio stopnie, minuty i "
2169
+ #~ "sekundy. Kiedy są wyrażone stopnie, minuty i sekundy, format to dd/1,mm/1,"
2170
+ #~ "ss/1. Kiedy są wyrażone stopnie i minuty oraz np. ułamki minut są podane "
2171
+ #~ "z dokładnością do dwóch miejsc po przecinku, format to dd/1,mmmm/100,0/1."
2172
+
2173
+ #, fuzzy
2174
+ #~ msgid "Indicates the distance to the destination point."
2175
+ #~ msgstr "Ten znacznik określa odległość od obiektu."
2176
+
2177
+ #, fuzzy
2178
+ #~ msgid "Extension 0"
2179
+ #~ msgstr "Wersja Exif"
2180
+
2181
+ #, fuzzy
2182
+ #~ msgid "Extension 1"
2183
+ #~ msgstr "Wersja Exif"
2184
+
2185
+ #, fuzzy
2186
+ #~ msgid "Extension 2"
2187
+ #~ msgstr "Wersja Exif"
2188
+
2189
+ #, fuzzy
2190
+ #~ msgid "Extension 3"
2191
+ #~ msgstr "Wersja Exif"
2192
+
2193
+ #, fuzzy
2194
+ #~ msgid "Extension 4"
2195
+ #~ msgstr "Wersja Exif"
2196
+
2197
+ #, fuzzy
2198
+ #~ msgid "Extension 5"
2199
+ #~ msgstr "Wersja Exif"
2200
+
2201
+ #, fuzzy
2202
+ #~ msgid "Extension 6"
2203
+ #~ msgstr "Wersja Exif"
2204
+
2205
+ #, fuzzy
2206
+ #~ msgid "Extension 7"
2207
+ #~ msgstr "Wersja Exif"
2208
+
2209
+ #, fuzzy
2210
+ #~ msgid "Extension 8"
2211
+ #~ msgstr "Wersja Exif"
2212
+
2213
+ #~ msgid "Motorola"
2214
+ #~ msgstr "Motorola"
2215
+
2216
+ #~ msgid "Intel"
2217
+ #~ msgstr "Intel"
2218
+
2219
+ #~ msgid ""
2220
+ #~ "The tag '%s' contains data of an invalid format ('%s', expected '%s')."
2221
+ #~ msgstr ""
2222
+ #~ "Znacznik '%s' zawiera dane w błędnym formacie ('%s', a oczekiwano '%s')."
2223
+
2224
+ #~ msgid ""
2225
+ #~ "The tag '%s' contains an invalid number of components (%i, expected %i)."
2226
+ #~ msgstr ""
2227
+ #~ "Znacznik '%s' zawiera błędną liczbę składników (%i, a oczekiwano %i)."
2228
+
2229
+ #~ msgid "RGB"
2230
+ #~ msgstr "RGB"
2231
+
2232
+ #~ msgid "YCbCr"
2233
+ #~ msgstr "YCbCr"
2234
+
2235
+ #~ msgid "avg"
2236
+ #~ msgstr "śred"
2237
+
2238
+ #~ msgid "Center-Weight"
2239
+ #~ msgstr "Centralnie ważony"
2240
+
2241
+ #~ msgid "LZW compression"
2242
+ #~ msgstr "Kompresja LZW"
2243
+
2244
+ #~ msgid "Tungsten"
2245
+ #~ msgstr "Wolfram"
2246
+
2247
+ #~ msgid "cloudy"
2248
+ #~ msgstr "pochmurno"
2249
+
2250
+ #~ msgid "in"
2251
+ #~ msgstr "in"
2252
+
2253
+ #~ msgid "cm"
2254
+ #~ msgstr "cm"
2255
+
2256
+ #~ msgid "Shutter"
2257
+ #~ msgstr "Migawka"
2258
+
2259
+ #~ msgid "Creative"
2260
+ #~ msgstr "Twórczy"
2261
+
2262
+ #~ msgid "Action"
2263
+ #~ msgstr "Akcja"
2264
+
2265
+ #~ msgid "no flash"
2266
+ #~ msgstr "bez flesza"
2267
+
2268
+ #~ msgid "flash"
2269
+ #~ msgstr "flesz"
2270
+
2271
+ #~ msgid "Yes"
2272
+ #~ msgstr "Tak"
2273
+
2274
+ #~ msgid "W/o strobe"
2275
+ #~ msgstr "Bez światła stroboskopowego"
2276
+
2277
+ #~ msgid "W. strobe"
2278
+ #~ msgstr "Ze światłem stroboskopowym"
2279
+
2280
+ #~ msgid ""
2281
+ #~ "Flash fired, compulsory flash mode, red-eye reduction, return light "
2282
+ #~ "detected"
2283
+ #~ msgstr ""
2284
+ #~ "Flesz się uruchomił w trybie pulsującym z redukcją czerwonych oczu, "
2285
+ #~ "światło zwrotne wykryte"
2286
+
2287
+ #~ msgid "?"
2288
+ #~ msgstr "?"
2289
+
2290
+ #~ msgid "close"
2291
+ #~ msgstr "blisko"
2292
+
2293
+ #~ msgid "distant"
2294
+ #~ msgstr "daleko"
2295
+
2296
+ #~ msgid "sRGB"
2297
+ #~ msgstr "sRGB"
2298
+
2299
+ #~ msgid "Invalid size of entry (%i, expected %li x %i)."
2300
+ #~ msgstr "Błędny rozmiar wpisu (%i, a oczekiwano %li x %i)."
2301
+
2302
+ #~ msgid "Unsupported UNICODE string"
2303
+ #~ msgstr "Nieobsługiwany łańcuch UNICODE"
2304
+
2305
+ #~ msgid "Unsupported JIS string"
2306
+ #~ msgstr "Nieobsługiwany łańcuch JIS"
2307
+
2308
+ #~ msgid "Unknown Exif Version"
2309
+ #~ msgstr "Nieznana wersja Exif"
2310
+
2311
+ #~ msgid "FlashPix Version 1.01"
2312
+ #~ msgstr "FlashPIx w wersji 1.01"
2313
+
2314
+ #~ msgid "Unknown FlashPix Version"
2315
+ #~ msgstr "Nieznana wersja FlashPix"
2316
+
2317
+ #~ msgid "[None]"
2318
+ #~ msgstr "[Brak]"
2319
+
2320
+ #~ msgid " (35 equivalent: %d mm)"
2321
+ #~ msgstr " (odpowiednik 35: %d mm)"
2322
+
2323
+ #~ msgid "%d"
2324
+ #~ msgstr "%d"
2325
+
2326
+ #~ msgid "DSC"
2327
+ #~ msgstr "DSC"
2328
+
2329
+ #~ msgid "-"
2330
+ #~ msgstr "-"
2331
+
2332
+ #~ msgid "Y"
2333
+ #~ msgstr "Y"
2334
+
2335
+ #~ msgid "Cb"
2336
+ #~ msgstr "Cb"
2337
+
2338
+ #~ msgid "Cr"
2339
+ #~ msgstr "Cr"
2340
+
2341
+ #~ msgid "R"
2342
+ #~ msgstr "R"
2343
+
2344
+ #~ msgid "G"
2345
+ #~ msgstr "G"
2346
+
2347
+ #~ msgid "B"
2348
+ #~ msgstr "B"
2349
+
2350
+ #~ msgid "reserved"
2351
+ #~ msgstr "zarezerwowany"
2352
+
2353
+ #~ msgid "YCbCr4:2:2"
2354
+ #~ msgstr "YCbCr4:2:2"
2355
+
2356
+ #~ msgid "YCbCr4:2:0"
2357
+ #~ msgstr "YCbCr4:2:0"
2358
+
2359
+ #~ msgid "%i bytes unknown data"
2360
+ #~ msgstr "%i bajtów nieznanych danych"
2361
+
2362
+ #~ msgid "Byte"
2363
+ #~ msgstr "Byte"
2364
+
2365
+ #~ msgid "Ascii"
2366
+ #~ msgstr "Ascii"
2367
+
2368
+ #~ msgid "Short"
2369
+ #~ msgstr "Short"
2370
+
2371
+ #~ msgid "Long"
2372
+ #~ msgstr "Long"
2373
+
2374
+ #~ msgid "Rational"
2375
+ #~ msgstr "Rational"
2376
+
2377
+ #~ msgid "SByte"
2378
+ #~ msgstr "SByte"
2379
+
2380
+ #~ msgid "SShort"
2381
+ #~ msgstr "SShort"
2382
+
2383
+ #~ msgid "SLong"
2384
+ #~ msgstr "SLong"
2385
+
2386
+ #~ msgid "SRational"
2387
+ #~ msgstr "SRational"
2388
+
2389
+ #~ msgid "Float"
2390
+ #~ msgstr "Float"
2391
+
2392
+ #~ msgid "Double"
2393
+ #~ msgstr "Double"
2394
+
2395
+ #~ msgid "Undefined"
2396
+ #~ msgstr "Nieokreślony"
2397
+
2398
+ #~ msgid "A general indication of the kind of data contained in this subfile."
2399
+ #~ msgstr "Ogólne oznaczenie rodzaju danych zawartych w tym podpliku."
2400
+
2401
+ #~ msgid ""
2402
+ #~ "Defined by Adobe Corporation to enable TIFF Trees within a TIFF file."
2403
+ #~ msgstr ""
2404
+ #~ "Zdefiniowane przez Adobe Corporation, aby pozwolić na drzewa TIFF w "
2405
+ #~ "plikach TIFF."
2406
+
2407
+ #~ msgid "XML Packet"
2408
+ #~ msgstr "Pakiet XML"
2409
+
2410
+ #~ msgid "XMP Metadata"
2411
+ #~ msgstr "Metadane XML"
2412
+
2413
+ #~ msgid "Image Resources Block"
2414
+ #~ msgstr "Blok zasobów obrazu"
2415
+
2416
+ #~ msgid "TIFF/EP Standard ID"
2417
+ #~ msgstr "Standardowy ID TIFF/EP"
2418
+
2419
+ #~ msgid "Settings (first part)"
2420
+ #~ msgstr "Ustawienia (część pierwsza)"
2421
+
2422
+ #~ msgid "Settings (second part)"
2423
+ #~ msgstr "Ustawienia (część druga)"
2424
+
2425
+ #~ msgid "Image type"
2426
+ #~ msgstr "Rodzaj obrazu"
2427
+
2428
+ #~ msgid "Firmware version"
2429
+ #~ msgstr "Wersja firmware"
2430
+
2431
+ #~ msgid "Image number"
2432
+ #~ msgstr "Numer zdjęcia"
2433
+
2434
+ #~ msgid "Owner name"
2435
+ #~ msgstr "Nazwa właściciela"
2436
+
2437
+ #~ msgid "Serial number"
2438
+ #~ msgstr "Numer seryjny"
2439
+
2440
+ #~ msgid "Custom functions"
2441
+ #~ msgstr "Funkcje własne"
2442
+
2443
+ #~ msgid "Invalid format '%s', expected '%s'."
2444
+ #~ msgstr "Błędny format '%s', oczekiwano '%s'."
2445
+
2446
+ #~ msgid "Invalid number of components (%i, expected %i)."
2447
+ #~ msgstr "Błędna liczba składowych (%i, a oczekiwano %i)."
2448
+
2449
+ #~ msgid "Invalid number of components (%i, expected %i or %i)."
2450
+ #~ msgstr "Błędna liczba składowych (%i, a oczekiwano %i lub %i)."
2451
+
2452
+ #~ msgid "Macro mode : "
2453
+ #~ msgstr "Tryb makro : "
2454
+
2455
+ #~ msgid "%i???"
2456
+ #~ msgstr "%i???"
2457
+
2458
+ #~ msgid " / Self Timer : %i (ms)"
2459
+ #~ msgstr " / Własny zegar : %i (ms)"
2460
+
2461
+ #~ msgid " / Flash mode : "
2462
+ #~ msgstr " / Tryb flesza : "
2463
+
2464
+ #~ msgid "Flash not fired"
2465
+ #~ msgstr "Flesz nie uruchomiony"
2466
+
2467
+ #~ msgid "auto"
2468
+ #~ msgstr "automatyczny"
2469
+
2470
+ #~ msgid "on"
2471
+ #~ msgstr "włączony"
2472
+
2473
+ #~ msgid "red eyes reduction"
2474
+ #~ msgstr "redukcja czerwonych oczu"
2475
+
2476
+ #~ msgid "slow synchro"
2477
+ #~ msgstr "powolna synchronizacja"
2478
+
2479
+ #~ msgid "auto + red eyes reduction"
2480
+ #~ msgstr "automatyczny + redukcja czerwonych oczu"
2481
+
2482
+ #~ msgid "on + red eyes reduction"
2483
+ #~ msgstr "włączony + redukcja czerwonych oczu"
2484
+
2485
+ #~ msgid "external"
2486
+ #~ msgstr "zewnętrzny"
2487
+
2488
+ #~ msgid " / Continuous drive mode : "
2489
+ #~ msgstr " / Tryb ciągłego przesuwania : "
2490
+
2491
+ #~ msgid "single or timer"
2492
+ #~ msgstr "pojedynczy lub zegar"
2493
+
2494
+ #~ msgid "continuous"
2495
+ #~ msgstr "ciągły"
2496
+
2497
+ #~ msgid " / Focus mode : "
2498
+ #~ msgstr " / Tryb ogniskowania : "
2499
+
2500
+ #~ msgid "One-Shot"
2501
+ #~ msgstr "One-Shot"
2502
+
2503
+ #~ msgid "AI Servo"
2504
+ #~ msgstr "AI Servo"
2505
+
2506
+ #~ msgid "AI Focus"
2507
+ #~ msgstr "AI Focus"
2508
+
2509
+ #~ msgid "MF"
2510
+ #~ msgstr "MF"
2511
+
2512
+ #~ msgid "Single"
2513
+ #~ msgstr "Pojedynczy"
2514
+
2515
+ #~ msgid "Continuous"
2516
+ #~ msgstr "Ciągły"
2517
+
2518
+ #~ msgid " / Image size : "
2519
+ #~ msgstr " / Rozmiar obrazu: "
2520
+
2521
+ #~ msgid "Large"
2522
+ #~ msgstr "Duży"
2523
+
2524
+ #~ msgid "Medium"
2525
+ #~ msgstr "Średni"
2526
+
2527
+ #~ msgid "Small"
2528
+ #~ msgstr "Mały"
2529
+
2530
+ #~ msgid " / Easy shooting mode : "
2531
+ #~ msgstr " / Tryb łatwego robienia zdjęć : "
2532
+
2533
+ #~ msgid "Full Auto"
2534
+ #~ msgstr "Pełny automat"
2535
+
2536
+ #~ msgid "Fast Shutter"
2537
+ #~ msgstr "Szybka migawka"
2538
+
2539
+ #~ msgid "Slow Shutter"
2540
+ #~ msgstr "Wolna migawka"
2541
+
2542
+ #~ msgid "Night"
2543
+ #~ msgstr "Noc"
2544
+
2545
+ #~ msgid "Black & White"
2546
+ #~ msgstr "Czarno-białe"
2547
+
2548
+ #~ msgid "Sepia"
2549
+ #~ msgstr "Sepia"
2550
+
2551
+ #~ msgid "Sports"
2552
+ #~ msgstr "Sport"
2553
+
2554
+ #~ msgid "Macro / Close-Up"
2555
+ #~ msgstr "Makro / zbliżenia"
2556
+
2557
+ #~ msgid "Pan Focus"
2558
+ #~ msgstr "Pan Focus"
2559
+
2560
+ #~ msgid "Low"
2561
+ #~ msgstr "Mało"
2562
+
2563
+ #~ msgid "High"
2564
+ #~ msgstr "Dużo"
2565
+
2566
+ #~ msgid " / Saturation : "
2567
+ #~ msgstr " / Nasycenie : "
2568
+
2569
+ #~ msgid " / Sharpness : "
2570
+ #~ msgstr " / Ostrość : "
2571
+
2572
+ #~ msgid " / ISO : "
2573
+ #~ msgstr " / ISO : "
2574
+
2575
+ #~ msgid "50"
2576
+ #~ msgstr "50"
2577
+
2578
+ #~ msgid "100"
2579
+ #~ msgstr "100"
2580
+
2581
+ #~ msgid "200"
2582
+ #~ msgstr "200"
2583
+
2584
+ #~ msgid "400"
2585
+ #~ msgstr "400"
2586
+
2587
+ #~ msgid " / Metering mode : "
2588
+ #~ msgstr " / Tryb pomiaru : "
2589
+
2590
+ #~ msgid "Evaluative"
2591
+ #~ msgstr "Szacowany"
2592
+
2593
+ #~ msgid "Center-weighted"
2594
+ #~ msgstr "Centralnie ważony"
2595
+
2596
+ #~ msgid " / AF point selected : "
2597
+ #~ msgstr " / Wybrany punkt AF : "
2598
+
2599
+ #~ msgid "none (MF)"
2600
+ #~ msgstr "brak (MF)"
2601
+
2602
+ #~ msgid "auto-selected"
2603
+ #~ msgstr "automatycznie wybrany"
2604
+
2605
+ #~ msgid "right"
2606
+ #~ msgstr "prawy"
2607
+
2608
+ #~ msgid "center"
2609
+ #~ msgstr "środek"
2610
+
2611
+ #~ msgid "left"
2612
+ #~ msgstr "lewy"
2613
+
2614
+ #~ msgid "0x%x???"
2615
+ #~ msgstr "0x%x???"
2616
+
2617
+ #~ msgid " / Exposure mode : "
2618
+ #~ msgstr " / Tryb ekspozycji : "
2619
+
2620
+ #~ msgid "Easy shooting"
2621
+ #~ msgstr "Łatwe robienie zdjęć"
2622
+
2623
+ #~ msgid "Program"
2624
+ #~ msgstr "Program"
2625
+
2626
+ #~ msgid "Tv-priority"
2627
+ #~ msgstr "Priorytet Tv"
2628
+
2629
+ #~ msgid "Av-priority"
2630
+ #~ msgstr "Priorytet Av"
2631
+
2632
+ #~ msgid "A-DEP"
2633
+ #~ msgstr "A-DEP"
2634
+
2635
+ #~ msgid " / long focal length of lens (in focal units) : %u"
2636
+ #~ msgstr " / długa ogniskowa obiektywu (w jednostkach ogniskowej): %u"
2637
+
2638
+ #~ msgid " / short focal length of lens (in focal units) : %u"
2639
+ #~ msgstr " / krótka ogniskowa obiektywu (w jednostkach ogniskowej): %u"
2640
+
2641
+ #~ msgid " / focal units per mm : %u"
2642
+ #~ msgstr " / jednostki ogniskowej na mm : %u"
2643
+
2644
+ #~ msgid " / Flash details : "
2645
+ #~ msgstr " / Opis flesza : "
2646
+
2647
+ #~ msgid "External E-TTL"
2648
+ #~ msgstr "Zewnętrzny E-TTL"
2649
+
2650
+ #~ msgid "Internal flash"
2651
+ #~ msgstr "Wewnętrzny flesz"
2652
+
2653
+ #~ msgid "FP sync used"
2654
+ #~ msgstr "Użyto FP sync"
2655
+
2656
+ #~ msgid "FP sync enabled"
2657
+ #~ msgstr "Włączono FP sync"
2658
+
2659
+ #~ msgid " / Focus mode2 : "
2660
+ #~ msgstr " / Tryb ogniskowania 2 : "
2661
+
2662
+ #~ msgid "White balance : "
2663
+ #~ msgstr "Balans bieli : "
2664
+
2665
+ #~ msgid "Auto"
2666
+ #~ msgstr "Auto"
2667
+
2668
+ #~ msgid "Sunny"
2669
+ #~ msgstr "Słonecznie"
2670
+
2671
+ #~ msgid "Cloudy"
2672
+ #~ msgstr "Pochmurno"
2673
+
2674
+ #~ msgid "Flourescent"
2675
+ #~ msgstr "Fluorescencyjny"
2676
+
2677
+ #~ msgid "Custom"
2678
+ #~ msgstr "Własny"
2679
+
2680
+ #~ msgid " / Sequence number : %u"
2681
+ #~ msgstr " / Numer sekwencyjny : %u"
2682
+
2683
+ #~ msgid " / AF point used : "
2684
+ #~ msgstr " / Użyty punkt AF : "
2685
+
2686
+ #~ msgid "Right"
2687
+ #~ msgstr "Prawy"
2688
+
2689
+ #~ msgid "Center"
2690
+ #~ msgstr "Środkowy"
2691
+
2692
+ #~ msgid "Left"
2693
+ #~ msgstr "Lewy"
2694
+
2695
+ #~ msgid " (%u available focus point)"
2696
+ #~ msgstr " (%u dostępny punkt ogniskowania)"
2697
+
2698
+ #~ msgid " / Flash bias : %.2f EV"
2699
+ #~ msgstr " / Odchylenie flesza : %.2f EV"
2700
+
2701
+ #~ msgid " / Subject Distance (mm) : %u"
2702
+ #~ msgstr " / Odległość od obiektu (mm) : %u"
2703
+
2704
+ #~ msgid "C.F%d : %u"
2705
+ #~ msgstr "C.F%d : %u"
2706
+
2707
+ #~ msgid "Firmware Version"
2708
+ #~ msgstr "Wersja firmware"
2709
+
2710
+ #~ msgid "ISO Setting"
2711
+ #~ msgstr "Ustawienie ISO"
2712
+
2713
+ #~ msgid "Colormode (?)"
2714
+ #~ msgstr "Tryb koloru (?)"
2715
+
2716
+ #~ msgid "Quality"
2717
+ #~ msgstr "Jakość"
2718
+
2719
+ #~ msgid "Whitebalance"
2720
+ #~ msgstr "Balans bieli"
2721
+
2722
+ #~ msgid "Image Sharpening"
2723
+ #~ msgstr "Wyostrzanie obrazu"
2724
+
2725
+ #~ msgid "Focus Mode"
2726
+ #~ msgstr "Tryb ogniskowania"
2727
+
2728
+ #~ msgid "Flash Setting"
2729
+ #~ msgstr "Ustawienie flesza"
2730
+
2731
+ #~ msgid "Flash Mode"
2732
+ #~ msgstr "Tryb flesza"
2733
+
2734
+ #~ msgid "Whitebalance fine ajustment"
2735
+ #~ msgstr "Dokładne ustawienie balansu bieli"
2736
+
2737
+ #~ msgid "Whitebalance RB"
2738
+ #~ msgstr "Balans bieli RB"
2739
+
2740
+ #~ msgid "Isoselection"
2741
+ #~ msgstr "Wybór ISO"
2742
+
2743
+ #~ msgid "Exposurediff ?"
2744
+ #~ msgstr "Różnica ekspozycji ?"
2745
+
2746
+ #~ msgid "Flashcompensation ?"
2747
+ #~ msgstr "Kompensacja flesza ?"
2748
+
2749
+ #~ msgid "Image Adjustment"
2750
+ #~ msgstr "Regulacja obrazu"
2751
+
2752
+ #~ msgid "Tonecompensation"
2753
+ #~ msgstr "Kompensacja tonów"
2754
+
2755
+ #~ msgid "Adapter"
2756
+ #~ msgstr "Przetwornik"
2757
+
2758
+ #~ msgid "Lenstype"
2759
+ #~ msgstr "Rodzaj obiektywu"
2760
+
2761
+ #~ msgid "Lens"
2762
+ #~ msgstr "Obiektyw"
2763
+
2764
+ #~ msgid "Manual Focus Distance"
2765
+ #~ msgstr "Ręczna odległość ogniska"
2766
+
2767
+ #~ msgid "Digital Zoom"
2768
+ #~ msgstr "Powiększenie cyfrowe"
2769
+
2770
+ #~ msgid "AF Focus position"
2771
+ #~ msgstr "Położenie ogniska AF"
2772
+
2773
+ #~ msgid "Bracketing"
2774
+ #~ msgstr "Bracketing"
2775
+
2776
+ #~ msgid "Contrast curve"
2777
+ #~ msgstr "Krzywa kontrastu"
2778
+
2779
+ #~ msgid "Colormode"
2780
+ #~ msgstr "Tryb koloru"
2781
+
2782
+ #~ msgid "Lightype"
2783
+ #~ msgstr "Rodzaj oświetlenia"
2784
+
2785
+ #~ msgid "Hue Adjustment"
2786
+ #~ msgstr "Regulacja barwy"
2787
+
2788
+ #~ msgid "Noisereduction"
2789
+ #~ msgstr "Redukcja szumów"
2790
+
2791
+ #~ msgid "Total number of pictures taken"
2792
+ #~ msgstr "Całkowita liczba zrobionych zdjęć"
2793
+
2794
+ #~ msgid "Optimize Image"
2795
+ #~ msgstr "Optymalizacja obrazu"
2796
+
2797
+ #~ msgid "Capture Editor Data"
2798
+ #~ msgstr "Dane edytora zdjęć"
2799
+
2800
+ #~ msgid "Capture Editor Version"
2801
+ #~ msgstr "Wersja edytora zdjęć"
2802
+
2803
+ #~ msgid "CCD Sensitivity"
2804
+ #~ msgstr "Czułość CCD"
2805
+
2806
+ #~ msgid "Focus"
2807
+ #~ msgstr "Ogniskowa"
2808
+
2809
+ #~ msgid "Converter"
2810
+ #~ msgstr "Konwerter"
2811
+
2812
+ #~ msgid "Speed/Sequence/Panorama direction"
2813
+ #~ msgstr "Kierunek szybkość/sekwencja/panorama"
2814
+
2815
+ #~ msgid "Info"
2816
+ #~ msgstr "Informacje"
2817
+
2818
+ #~ msgid "Camera ID"
2819
+ #~ msgstr "ID aparatu"
2820
+
2821
+ #~ msgid "Sharpness Setting"
2822
+ #~ msgstr "Ustawienie ostrości"
2823
+
2824
+ #~ msgid "White Balance Setting"
2825
+ #~ msgstr "Ustawienie balansu bieli"
2826
+
2827
+ #~ msgid "Contrast Setting"
2828
+ #~ msgstr "Ustawienie kontrastu"
2829
+
2830
+ #~ msgid "Manual Focus"
2831
+ #~ msgstr "Ręczna ogniskowa"
2832
+
2833
+ #~ msgid "AF non D Lens"
2834
+ #~ msgstr "Obiektyw AF nie D"
2835
+
2836
+ #~ msgid "AF-D or AF-S Lens"
2837
+ #~ msgstr "Obiektyw AF-D lub AF-S"
2838
+
2839
+ #~ msgid "AF-D G Lens"
2840
+ #~ msgstr "Obiektyw AF-D G"
2841
+
2842
+ #~ msgid "AF-D VR Lens"
2843
+ #~ msgstr "Obiektyw AF-D VR"
2844
+
2845
+ #~ msgid "Flash did not fire"
2846
+ #~ msgstr "Flesz się nie uruchomił"
2847
+
2848
+ #~ msgid "Flash unit unknown"
2849
+ #~ msgstr "Nieznany flesz"
2850
+
2851
+ #~ msgid "Flash is external"
2852
+ #~ msgstr "Flesz zewnętrzny"
2853
+
2854
+ #~ msgid "Flash is on Camera"
2855
+ #~ msgstr "Flesz na aparacie"
2856
+
2857
+ #~ msgid "VGA Basic"
2858
+ #~ msgstr "Podstawowa VGA"
2859
+
2860
+ #~ msgid "VGA Normal"
2861
+ #~ msgstr "Normalna VGA"
2862
+
2863
+ #~ msgid "VGA Fine"
2864
+ #~ msgstr "Dobra VGA"
2865
+
2866
+ #~ msgid "SXGA Basic"
2867
+ #~ msgstr "Podstawowa SXGA"
2868
+
2869
+ #~ msgid "SXGA Normal"
2870
+ #~ msgstr "Normalna SXGA"
2871
+
2872
+ #~ msgid "SXGA Fine"
2873
+ #~ msgstr "Dobra SXGA"
2874
+
2875
+ #~ msgid "2 MPixel Basic"
2876
+ #~ msgstr "Podstawowa 2 MPiksele"
2877
+
2878
+ #~ msgid "2 MPixel Normal"
2879
+ #~ msgstr "Normalna 2 MPiksele"
2880
+
2881
+ #~ msgid "2 MPixel Fine"
2882
+ #~ msgstr "Dobra 2 MPiksele"
2883
+
2884
+ #~ msgid "Color"
2885
+ #~ msgstr "Kolorowy"
2886
+
2887
+ #~ msgid "Monochrome"
2888
+ #~ msgstr "Monochromatyczny"
2889
+
2890
+ #~ msgid "Bright+"
2891
+ #~ msgstr "Jasność+"
2892
+
2893
+ #~ msgid "Bright-"
2894
+ #~ msgstr "Jasność-"
2895
+
2896
+ #~ msgid "Contrast+"
2897
+ #~ msgstr "Kontrast+"
2898
+
2899
+ #~ msgid "Contrast-"
2900
+ #~ msgstr "Kontrast-"
2901
+
2902
+ #~ msgid "ISO80"
2903
+ #~ msgstr "ISO80"
2904
+
2905
+ #~ msgid "ISO160"
2906
+ #~ msgstr "ISO160"
2907
+
2908
+ #~ msgid "ISO320"
2909
+ #~ msgstr "ISO320"
2910
+
2911
+ #~ msgid "ISO100"
2912
+ #~ msgstr "ISO100"
2913
+
2914
+ #~ msgid "Preset"
2915
+ #~ msgstr "Predefiniowany"
2916
+
2917
+ #~ msgid "Incandescense"
2918
+ #~ msgstr "Żarówka"
2919
+
2920
+ #~ msgid "Fluorescence"
2921
+ #~ msgstr "Świetlówka"
2922
+
2923
+ #~ msgid "SpeedLight"
2924
+ #~ msgstr "SpeedLight"
2925
+
2926
+ #~ msgid "No Fisheye"
2927
+ #~ msgstr "Bez rybiego oka"
2928
+
2929
+ #~ msgid "Fisheye On"
2930
+ #~ msgstr "Z rybim okiem"
2931
+
2932
+ #~ msgid "SQ"
2933
+ #~ msgstr "SQ"
2934
+
2935
+ #~ msgid "HQ"
2936
+ #~ msgstr "HQ"
2937
+
2938
+ #~ msgid "SHQ"
2939
+ #~ msgstr "SHQ"
2940
+
2941
+ #~ msgid "No"
2942
+ #~ msgstr "Nie"
2943
+
2944
+ #~ msgid "1x"
2945
+ #~ msgstr "1x"
2946
+
2947
+ #~ msgid "2x"
2948
+ #~ msgstr "2x"
2949
+
2950
+ #~ msgid "Red-eye reduction"
2951
+ #~ msgstr "Redukcja czerwonych oczu"
2952
+
2953
+ #~ msgid "Fill"
2954
+ #~ msgstr "Pełny"
2955
+
2956
+ #~ msgid "Off"
2957
+ #~ msgstr "Wyłączony"
2958
+
2959
+ #~ msgid "No manual focus selection"
2960
+ #~ msgstr "Brak ręcznego wyboru ogniska"
2961
+
2962
+ #~ msgid "None"
2963
+ #~ msgstr "Brak"
2964
+
2965
+ #~ msgid "Infinite"
2966
+ #~ msgstr "Nieskończoność"
2967
+
2968
+ #~ msgid "normal"
2969
+ #~ msgstr "normalny"
2970
+
2971
+ #~ msgid "unknown"
2972
+ #~ msgstr "nieznany"
2973
+
2974
+ #~ msgid "fast"
2975
+ #~ msgstr "szybki"
2976
+
2977
+ #~ msgid "panorama"
2978
+ #~ msgstr "panorama"
2979
+
2980
+ #~ msgid "%li"
2981
+ #~ msgstr "%li"
2982
+
2983
+ #~ msgid "left to right"
2984
+ #~ msgstr "od lewej do prawej"
2985
+
2986
+ #~ msgid "right to left"
2987
+ #~ msgstr "od prawej do lewej"
2988
+
2989
+ #~ msgid "bottom to top"
2990
+ #~ msgstr "od dołu do góry"
2991
+
2992
+ #~ msgid "top to bottom"
2993
+ #~ msgstr "od góry do dołu"
2994
+
2995
+ #~ msgid "Automatic"
2996
+ #~ msgstr "Automatyczny"
2997
+
2998
+ #~ msgid "Manual: Unknown"
2999
+ #~ msgstr "Ręczny: nieznany"
3000
+
3001
+ #~ msgid "One-touch"
3002
+ #~ msgstr "One-touch"
3003
+
3004
+ #~ msgid "%li bytes unknown data: "
3005
+ #~ msgstr "%li bajtów nieznanych danych: "
3006
+
3007
+ #~ msgid "Capture Mode"
3008
+ #~ msgstr "Tryb zdjęcia"
3009
+
3010
+ #~ msgid "Quality Level"
3011
+ #~ msgstr "Jakość"
3012
+
3013
+ #~ msgid "Zoom"
3014
+ #~ msgstr "Powiększenie"
3015
+
3016
+ #~ msgid "ISOSpeed"
3017
+ #~ msgstr "Szybkość ISO"
3018
+
3019
+ #~ msgid "PrintIM Settings"
3020
+ #~ msgstr "Ustawienia PrintIM"
3021
+
3022
+ #~ msgid "TimeZone"
3023
+ #~ msgstr "Strefa czasowa"
3024
+
3025
+ #~ msgid "DaylightSavings"
3026
+ #~ msgstr "Zmiana czasu"
3027
+
3028
+ #~ msgid "Night-scene"
3029
+ #~ msgstr "Scena nocna"
3030
+
3031
+ #~ msgid "Good"
3032
+ #~ msgstr "Dobra"
3033
+
3034
+ #~ msgid "Better"
3035
+ #~ msgstr "Lepsza"
3036
+
3037
+ #~ msgid "Best"
3038
+ #~ msgstr "Najlepsza"
3039
+
3040
+ #~ msgid "Flash on"
3041
+ #~ msgstr "Flesz włączony"
3042
+
3043
+ #~ msgid "Flash off"
3044
+ #~ msgstr "Flesz wyłączony"
3045
+
3046
+ #~ msgid "Red-eye Reduction"
3047
+ #~ msgstr "Redukcja czerwonych oczu"
3048
+
3049
+ #~ msgid "Full"
3050
+ #~ msgstr "Pełny"
3051
+
3052
+ #~ msgid "[DO_NOT_TRANSLATE_THIS_MARKER]"
3053
+ #~ msgstr "[DO_NOT_TRANSLATE_THIS_MARKER]"
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/Pel.php ADDED
@@ -0,0 +1,360 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class with miscellaneous static methods.
28
+ *
29
+ * This class will contain various methods that govern the overall
30
+ * behavior of PEL.
31
+ *
32
+ * Debugging output from PEL can be turned on and off by assigning
33
+ * true or false to {@link Pel::$debug}.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ */
37
+ namespace lsolesen\pel;
38
+
39
+ class Pel
40
+ {
41
+
42
+ /**
43
+ * Flag that controls if dgettext can be used.
44
+ * Is set to true or fals at the first access
45
+ *
46
+ * @var boolean|NULL
47
+ */
48
+ private static $hasdgetext = null;
49
+
50
+ /**
51
+ * Flag for controlling debug information.
52
+ *
53
+ * The methods producing debug information ({@link debug()} and
54
+ * {@link warning()}) will only output something if this variable is
55
+ * set to true.
56
+ *
57
+ * @var boolean
58
+ */
59
+ private static $debug = false;
60
+
61
+ /**
62
+ * Flag for strictness of parsing.
63
+ *
64
+ * If this variable is set to true, then most errors while loading
65
+ * images will result in exceptions being thrown. Otherwise a
66
+ * warning will be emitted (using {@link Pel::warning}) and the
67
+ * exceptions will be appended to {@link Pel::$exceptions}.
68
+ *
69
+ * Some errors will still be fatal and result in thrown exceptions,
70
+ * but an effort will be made to skip over as much garbage as
71
+ * possible.
72
+ *
73
+ * @var boolean
74
+ */
75
+ private static $strict = false;
76
+
77
+ /**
78
+ * Stored exceptions.
79
+ *
80
+ * When {@link Pel::$strict} is set to false exceptions will be
81
+ * accumulated here instead of being thrown.
82
+ */
83
+ private static $exceptions = [];
84
+
85
+ /**
86
+ * Quality setting for encoding JPEG images.
87
+ *
88
+ * This controls the quality used then PHP image resources are
89
+ * encoded into JPEG images. This happens when you create a
90
+ * {@link PelJpeg} object based on an image resource.
91
+ *
92
+ * The default is 75 for average quality images, but you can change
93
+ * this to an integer between 0 and 100.
94
+ *
95
+ * @var int
96
+ */
97
+ private static $quality = 75;
98
+
99
+ /**
100
+ * Set the JPEG encoding quality.
101
+ *
102
+ * @param int $quality
103
+ * an integer between 0 and 100 with 75 being
104
+ * average quality and 95 very good quality.
105
+ */
106
+ public static function setJPEGQuality($quality)
107
+ {
108
+ self::$quality = $quality;
109
+ }
110
+
111
+ /**
112
+ * Get current setting for JPEG encoding quality.
113
+ *
114
+ * @return int the quality.
115
+ */
116
+ public static function getJPEGQuality()
117
+ {
118
+ return self::$quality;
119
+ }
120
+
121
+ /**
122
+ * Return list of stored exceptions.
123
+ *
124
+ * When PEL is parsing in non-strict mode, it will store most
125
+ * exceptions instead of throwing them. Use this method to get hold
126
+ * of them when a call returns.
127
+ *
128
+ * Code for using this could look like this:
129
+ *
130
+ * <code>
131
+ * Pel::setStrictParsing(true);
132
+ * Pel::clearExceptions();
133
+ *
134
+ * $jpeg = new PelJpeg($file);
135
+ *
136
+ * // Check for exceptions.
137
+ * foreach (Pel::getExceptions() as $e) {
138
+ * printf("Exception: %s\n", $e->getMessage());
139
+ * if ($e instanceof PelEntryException) {
140
+ * // Warn about entries that couldn't be loaded.
141
+ * printf("Warning: Problem with %s.\n",
142
+ * PelTag::getName($e->getType(), $e->getTag()));
143
+ * }
144
+ * }
145
+ * </code>
146
+ *
147
+ * This gives applications total control over the amount of error
148
+ * messages shown and (hopefully) provides the necessary information
149
+ * for proper error recovery.
150
+ *
151
+ * @return array the exceptions.
152
+ */
153
+ public static function getExceptions()
154
+ {
155
+ return self::$exceptions;
156
+ }
157
+
158
+ /**
159
+ * Clear list of stored exceptions.
160
+ *
161
+ * Use this function before a call to some method if you intend to
162
+ * check for exceptions afterwards.
163
+ */
164
+ public static function clearExceptions()
165
+ {
166
+ self::$exceptions = [];
167
+ }
168
+
169
+ /**
170
+ * Conditionally throw an exception.
171
+ *
172
+ * This method will throw the passed exception when strict parsing
173
+ * in effect (see {@link setStrictParsing()}). Otherwise the
174
+ * exception is stored (it can be accessed with {@link
175
+ * getExceptions()}) and a warning is issued (with {@link
176
+ * Pel::warning}).
177
+ *
178
+ * @param PelException $e
179
+ * the exceptions.
180
+ */
181
+ public static function maybeThrow(PelException $e)
182
+ {
183
+ if (self::$strict) {
184
+ throw $e;
185
+ } else {
186
+ self::$exceptions[] = $e;
187
+ self::warning('%s (%s:%s)', $e->getMessage(), basename($e->getFile()), $e->getLine());
188
+ }
189
+ }
190
+
191
+ /**
192
+ * Enable/disable strict parsing.
193
+ *
194
+ * If strict parsing is enabled, then most errors while loading
195
+ * images will result in exceptions being thrown. Otherwise a
196
+ * warning will be emitted (using {@link Pel::warning}) and the
197
+ * exceptions will be stored for later use via {@link
198
+ * getExceptions()}.
199
+ *
200
+ * Some errors will still be fatal and result in thrown exceptions,
201
+ * but an effort will be made to skip over as much garbage as
202
+ * possible.
203
+ *
204
+ * @param boolean $flag
205
+ * use true to enable strict parsing, false to
206
+ * diable.
207
+ */
208
+ public static function setStrictParsing($flag)
209
+ {
210
+ self::$strict = $flag;
211
+ }
212
+
213
+ /**
214
+ * Get current setting for strict parsing.
215
+ *
216
+ * @return boolean true if strict parsing is in effect, false
217
+ * otherwise.
218
+ */
219
+ public static function getStrictParsing()
220
+ {
221
+ return self::$strict;
222
+ }
223
+
224
+ /**
225
+ * Enable/disable debugging output.
226
+ *
227
+ * @param boolean $flag
228
+ * use true to enable debug output, false to
229
+ * diable.
230
+ */
231
+ public static function setDebug($flag)
232
+ {
233
+ self::$debug = $flag;
234
+ }
235
+
236
+ /**
237
+ * Get current setting for debug output.
238
+ *
239
+ * @return boolean true if debug is enabled, false otherwise.
240
+ */
241
+ public static function getDebug()
242
+ {
243
+ return self::$debug;
244
+ }
245
+
246
+ /**
247
+ * Conditionally output debug information.
248
+ *
249
+ * This method works just like printf() except that it always
250
+ * terminates the output with a newline, and that it only outputs
251
+ * something if the {@link Pel::$debug} is true.
252
+ *
253
+ * @param string $format
254
+ * the format string.
255
+ * @param mixed ...$args
256
+ * any number of arguments can be given. The
257
+ * arguments will be available for the format string as usual with
258
+ * sprintf().
259
+ */
260
+ public static function debug($format)
261
+ {
262
+ if (self::$debug) {
263
+ $args = func_get_args();
264
+ $str = array_shift($args);
265
+ vprintf($str . "\n", $args);
266
+ }
267
+ }
268
+
269
+ /**
270
+ * Conditionally output a warning.
271
+ *
272
+ * This method works just like printf() except that it prepends the
273
+ * output with the string 'Warning: ', terminates the output with a
274
+ * newline, and that it only outputs something if the PEL_DEBUG
275
+ * defined to some true value.
276
+ *
277
+ * @param string $format
278
+ * the format string.
279
+ * @param mixed ...$args
280
+ * any number of arguments can be given. The
281
+ * arguments will be available for the format string as usual with
282
+ * sprintf().
283
+ */
284
+ public static function warning($format)
285
+ {
286
+ if (self::$debug) {
287
+ $args = func_get_args();
288
+ $str = array_shift($args);
289
+ vprintf('Warning: ' . $str . "\n", $args);
290
+ }
291
+ }
292
+
293
+ /**
294
+ * Translate a string.
295
+ *
296
+ * This static function will use Gettext to translate a string. By
297
+ * always using this function for static string one is assured that
298
+ * the translation will be taken from the correct text domain.
299
+ * Dynamic strings should be passed to {@link fmt} instead.
300
+ *
301
+ * @param string $str
302
+ * the string that should be translated.
303
+ * @return string the translated string, or the original string if
304
+ * no translation could be found.
305
+ */
306
+ public static function tra($str)
307
+ {
308
+ return self::dgettextWrapper('pel', $str);
309
+ }
310
+
311
+ /**
312
+ * Translate and format a string.
313
+ *
314
+ * This static function will first use Gettext to translate a format
315
+ * string, which will then have access to any extra arguments. By
316
+ * always using this function for dynamic string one is assured that
317
+ * the translation will be taken from the correct text domain. If
318
+ * the string is static, use {@link tra} instead as it will be
319
+ * faster.
320
+ *
321
+ * @param string $format
322
+ * the format string. This will be translated
323
+ * before being used as a format string.
324
+ * @param mixed ...$args
325
+ * any number of arguments can be given. The
326
+ * arguments will be available for the format string as usual with
327
+ * sprintf().
328
+ * @return string the translated string, or the original string if
329
+ * no translation could be found.
330
+ */
331
+ public static function fmt($format)
332
+ {
333
+ $args = func_get_args();
334
+ $str = array_shift($args);
335
+ return vsprintf(self::dgettextWrapper('pel', $str), $args);
336
+ }
337
+
338
+ /**
339
+ * Warapper for dgettext.
340
+ * The untranslated stub will be return in the case that dgettext is not available.
341
+ *
342
+ * @param string $domain
343
+ * @param string $str
344
+ * @return string
345
+ */
346
+ private static function dgettextWrapper($domain, $str)
347
+ {
348
+ if (self::$hasdgetext === null) {
349
+ self::$hasdgetext = function_exists('dgettext');
350
+ if (self::$hasdgetext === true) {
351
+ bindtextdomain('pel', __DIR__ . '/locale');
352
+ }
353
+ }
354
+ if (self::$hasdgetext) {
355
+ return dgettext($domain, $str);
356
+ } else {
357
+ return $str;
358
+ }
359
+ }
360
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelCanonMakerNotes.php ADDED
@@ -0,0 +1,341 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * PEL: PHP Exif Library.
4
+ * A library with support for reading and
5
+ * writing all Exif headers in JPEG and TIFF images using PHP.
6
+ *
7
+ * Copyright (C) 2004, 2005 Martin Geisler.
8
+ * Copyright (C) 2017 Johannes Weberhofer.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Namespace for functions operating on Exif formats.
28
+ *
29
+ * This class defines the constants that are to be used whenever one
30
+ * has to refer to the format of an Exif tag. They will be
31
+ * collectively denoted by the pseudo-type PelFormat throughout the
32
+ * documentation.
33
+ *
34
+ * All the methods defined here are static, and they all operate on a
35
+ * single argument which should be one of the class constants.
36
+ *
37
+ * @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
38
+ * @author Thanks to Benedikt Rosenkranz <beluro@web.de>
39
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
40
+ * License (GPL)
41
+ * @package
42
+ *
43
+ */
44
+ namespace lsolesen\pel;
45
+
46
+ class PelCanonMakerNotes extends PelMakerNotes
47
+ {
48
+
49
+ private $undefinedMakerNotesTags = [
50
+ 0x0000,
51
+ 0x0003,
52
+ 0x000a,
53
+ 0x000e,
54
+ 0x0011,
55
+ 0x0014,
56
+ 0x0016,
57
+ 0x0017,
58
+ 0x0018,
59
+ 0x0019,
60
+ 0x001b,
61
+ 0x001c,
62
+ 0x001d,
63
+ 0x001f,
64
+ 0x0020,
65
+ 0x0021,
66
+ 0x0022,
67
+ 0x0023,
68
+ 0x0024,
69
+ 0x0025,
70
+ 0x0031,
71
+ 0x0035,
72
+ 0x0098,
73
+ 0x009a,
74
+ 0x00b5,
75
+ 0x00c0,
76
+ 0x00c1,
77
+ 0x4008,
78
+ 0x4009,
79
+ 0x4010,
80
+ 0x4011,
81
+ 0x4012,
82
+ 0x4013,
83
+ 0x4015,
84
+ 0x4016,
85
+ 0x4018,
86
+ 0x4019,
87
+ 0x4020,
88
+ 0x4025,
89
+ 0x4027
90
+ ];
91
+
92
+ private $undefinedCameraSettingsTags = [
93
+ 0x0006,
94
+ 0x0008,
95
+ 0x0015,
96
+ 0x001e,
97
+ 0x001f,
98
+ 0x0026,
99
+ 0x002b,
100
+ 0x002c,
101
+ 0x002d,
102
+ 0x002f,
103
+ 0x0030,
104
+ 0x0031
105
+ ];
106
+
107
+ private $undefinedShotInfoTags = [
108
+ 0x0001,
109
+ 0x0006,
110
+ 0x000a,
111
+ 0x000b,
112
+ 0x000c,
113
+ 0x000d,
114
+ 0x0011,
115
+ 0x0012,
116
+ 0x0014,
117
+ 0x0018,
118
+ 0x0019,
119
+ 0x001d,
120
+ 0x001e,
121
+ 0x001f,
122
+ 0x0020,
123
+ 0x0021,
124
+ 0x0022
125
+ ];
126
+
127
+ private $undefinedPanoramaTags = [
128
+ 0x0001,
129
+ 0x0003,
130
+ 0x0004
131
+ ];
132
+
133
+ private $undefinedPicInfoTags = [
134
+ 0x0001,
135
+ 0x0006,
136
+ 0x0007,
137
+ 0x0008,
138
+ 0x0009,
139
+ 0x000a,
140
+ 0x000b,
141
+ 0x000c,
142
+ 0x000d,
143
+ 0x000e,
144
+ 0x000f,
145
+ 0x0010,
146
+ 0x0011,
147
+ 0x0012,
148
+ 0x0013,
149
+ 0x0014,
150
+ 0x0015,
151
+ 0x0017,
152
+ 0x0018,
153
+ 0x0019,
154
+ 0x001b,
155
+ 0x001c
156
+ ];
157
+
158
+ private $undefinedFileInfoTags = [
159
+ 0x0002,
160
+ 0x000a,
161
+ 0x000b,
162
+ 0x0011,
163
+ 0x0012,
164
+ 0x0016,
165
+ 0x0017,
166
+ 0x0018,
167
+ 0x001a,
168
+ 0x001b,
169
+ 0x001c,
170
+ 0x001d,
171
+ 0x001e,
172
+ 0x001f,
173
+ 0x0020
174
+ ];
175
+
176
+ public function __construct($parent, $data, $size, $offset)
177
+ {
178
+ parent::__construct($parent, $data, $size, $offset);
179
+ $this->type = PelIfd::CANON_MAKER_NOTES;
180
+ }
181
+
182
+ public function load()
183
+ {
184
+ $this->components = $this->data->getShort($this->offset);
185
+ $this->offset += 2;
186
+ Pel::debug('Loading %d components in maker notes.', $this->components);
187
+ $mkNotesIfd = new PelIfd(PelIfd::CANON_MAKER_NOTES);
188
+
189
+ for ($i = 0; $i < $this->components; $i ++) {
190
+ $tag = $this->data->getShort($this->offset + 12 * $i);
191
+ $components = $this->data->getLong($this->offset + 12 * $i + 4);
192
+ $data = $this->data->getLong($this->offset + 12 * $i + 8);
193
+ // check if tag is defined
194
+ if (in_array($tag, $this->undefinedMakerNotesTags)) {
195
+ continue;
196
+ }
197
+ switch ($tag) {
198
+ case PelTag::CANON_CAMERA_SETTINGS:
199
+ $this->parseCameraSettings($mkNotesIfd, $this->data, $data, $components);
200
+ break;
201
+ case PelTag::CANON_SHOT_INFO:
202
+ $this->parseShotInfo($mkNotesIfd, $this->data, $data, $components);
203
+ break;
204
+ case PelTag::CANON_PANORAMA:
205
+ $this->parsePanorama($mkNotesIfd, $this->data, $data, $components);
206
+ break;
207
+ case PelTag::CANON_PICTURE_INFO:
208
+ // TODO: Does not work at the moment
209
+ // $this->parsePictureInfo($mkNotesIfd, $this->data, $data, $components);
210
+ break;
211
+ case PelTag::CANON_FILE_INFO:
212
+ $this->parseFileInfo($mkNotesIfd, $this->data, $data, $components);
213
+ break;
214
+ case PelTag::CANON_CUSTOM_FUNCTIONS:
215
+ // TODO
216
+ default:
217
+ $mkNotesIfd->loadSingleValue($this->data, $this->offset, $i, $tag);
218
+ break;
219
+ }
220
+ }
221
+ $this->parent->addSubIfd($mkNotesIfd);
222
+ }
223
+
224
+ private function parseCameraSettings($parent, $data, $offset, $components)
225
+ {
226
+ $type = PelIfd::CANON_CAMERA_SETTINGS;
227
+ Pel::debug('Found Canon Camera Settings sub IFD at offset %d', $offset);
228
+ $size = $data->getShort($offset);
229
+ $offset += 2;
230
+ $elemSize = PelFormat::getSize(PelFormat::SSHORT);
231
+ if ((! $components) || ($size / $components !== $elemSize)) {
232
+ throw new PelMakerNotesMalformedException('Size of Canon Camera Settings does not match the number of entries.');
233
+ }
234
+ $camIfd = new PelIfd($type);
235
+
236
+ for ($i = 0; $i < $components; $i ++) {
237
+ // check if tag is defined
238
+ if (in_array($i + 1, $this->undefinedCameraSettingsTags)) {
239
+ continue;
240
+ }
241
+ $camIfd->loadSingleMakerNotesValue($type, $data, $offset, $size, $i, PelFormat::SSHORT);
242
+ }
243
+ $parent->addSubIfd($camIfd);
244
+ }
245
+
246
+ private function parseShotInfo($parent, $data, $offset, $components)
247
+ {
248
+ $type = PelIfd::CANON_SHOT_INFO;
249
+ Pel::debug('Found Canon Shot Info sub IFD at offset %d', $offset);
250
+ $size = $data->getShort($offset);
251
+ $offset += 2;
252
+ $elemSize = PelFormat::getSize(PelFormat::SHORT);
253
+ if ($size / $components !== $elemSize) {
254
+ throw new PelMakerNotesMalformedException('Size of Canon Shot Info does not match the number of entries.');
255
+ }
256
+ $shotIfd = new PelIfd($type);
257
+
258
+ for ($i = 0; $i < $components; $i ++) {
259
+ // check if tag is defined
260
+ if (in_array($i + 1, $this->undefinedShotInfoTags)) {
261
+ continue;
262
+ }
263
+ $shotIfd->loadSingleMakerNotesValue($type, $data, $offset, $size, $i, PelFormat::SHORT);
264
+ }
265
+ $parent->addSubIfd($shotIfd);
266
+ }
267
+
268
+ private function parsePanorama($parent, $data, $offset, $components)
269
+ {
270
+ $type = PelIfd::CANON_PANORAMA;
271
+ Pel::debug('Found Canon Panorama sub IFD at offset %d', $offset);
272
+ $size = $data->getShort($offset);
273
+ $offset += 2;
274
+ $elemSize = PelFormat::getSize(PelFormat::SHORT);
275
+ if ($size / $components !== $elemSize) {
276
+ throw new PelMakerNotesMalformedException('Size of Canon Panorama does not match the number of entries.');
277
+ }
278
+ $panoramaIfd = new PelIfd($type);
279
+
280
+ for ($i = 0; $i < $components; $i ++) {
281
+ // check if tag is defined
282
+ if (in_array($i + 1, $this->undefinedPanoramaTags)) {
283
+ continue;
284
+ }
285
+ $panoramaIfd->loadSingleMakerNotesValue($type, $data, $offset, $size, $i, PelFormat::SHORT);
286
+ }
287
+ $parent->addSubIfd($panoramaIfd);
288
+ }
289
+
290
+ /**
291
+ * This method does not work properly
292
+ */
293
+ private function parsePictureInfo($parent, $data, $offset, $components)
294
+ {
295
+ $type = PelIfd::CANON_PICTURE_INFO;
296
+ Pel::debug('Found Canon Picture Info sub IFD at offset %d', $offset);
297
+ $size = $data->getShort($offset);
298
+ $offset += 2;
299
+ $elemSize = PelFormat::getSize(PelFormat::SHORT);
300
+ if ($size / $components !== $elemSize) {
301
+ throw new PelMakerNotesMalformedException('Size of Canon Picture Info does not match the number of entries. ' . $size . '/' . $components . ' = ' . $elemSize);
302
+ }
303
+ $picIfd = new PelIfd($type);
304
+
305
+ for ($i = 0; $i < $components; $i ++) {
306
+ // check if tag is defined
307
+ printf("Current Tag: %d\n", ($i + 1));
308
+ if (in_array($i + 1, $this->undefinedPicInfoTags)) {
309
+ continue;
310
+ }
311
+ $picIfd->loadSingleMakerNotesValue($type, $data, $offset, $size, $i, PelFormat::SHORT);
312
+ }
313
+ $parent->addSubIfd($picIfd);
314
+ }
315
+
316
+ private function parseFileInfo($parent, $data, $offset, $components)
317
+ {
318
+ $type = PelIfd::CANON_FILE_INFO;
319
+ Pel::debug('Found Canon File Info sub IFD at offset %d', $offset);
320
+ $size = $data->getShort($offset);
321
+ $offset += 2;
322
+ $elemSize = PelFormat::getSize(PelFormat::SSHORT);
323
+ if ($size === $elemSize * ($components - 1) + PelFormat::getSize(PelFormat::LONG)) {
324
+ throw new PelMakerNotesMalformedException('Size of Canon File Info does not match the number of entries.');
325
+ }
326
+ $fileIfd = new PelIfd($type);
327
+
328
+ for ($i = 0; $i < $components; $i ++) {
329
+ // check if tag is defined
330
+ if (in_array($i + 1, $this->undefinedFileInfoTags)) {
331
+ continue;
332
+ }
333
+ $format = PelFormat::SSHORT;
334
+ if ($i + 1 == PelTag::CANON_FI_FILE_NUMBER) {
335
+ $format = PelFormat::LONG;
336
+ }
337
+ $fileIfd->loadSingleMakerNotesValue($type, $data, $offset, $size, $i, $format);
338
+ }
339
+ $parent->addSubIfd($fileIfd);
340
+ }
341
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelConvert.php ADDED
@@ -0,0 +1,396 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+ namespace lsolesen\pel;
26
+
27
+ /**
28
+ * Routines for converting back and forth between bytes and integers.
29
+ *
30
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
31
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
32
+ * License (GPL)
33
+ * @package PEL
34
+ */
35
+
36
+ /**
37
+ * Conversion functions to and from bytes and integers.
38
+ *
39
+ * The functions found in this class are used to convert bytes into
40
+ * integers of several sizes ({@link bytesToShort}, {@link
41
+ * bytesToLong}, and {@link bytesToRational}) and convert integers of
42
+ * several sizes into bytes ({@link shortToBytes} and {@link
43
+ * longToBytes}).
44
+ *
45
+ * All the methods are static and they all rely on an argument that
46
+ * specifies the byte order to be used, this must be one of the class
47
+ * constants {@link LITTLE_ENDIAN} or {@link BIG_ENDIAN}. These
48
+ * constants will be referred to as the pseudo type PelByteOrder
49
+ * throughout the documentation.
50
+ *
51
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
52
+ * @package PEL
53
+ */
54
+ class PelConvert
55
+ {
56
+
57
+ /**
58
+ * Little-endian (Intel) byte order.
59
+ *
60
+ * Data stored in little-endian byte order store the least
61
+ * significant byte first, so the number 0x12345678 becomes 0x78
62
+ * 0x56 0x34 0x12 when stored with little-endian byte order.
63
+ */
64
+ const LITTLE_ENDIAN = true;
65
+
66
+ /**
67
+ * Big-endian (Motorola) byte order.
68
+ *
69
+ * Data stored in big-endian byte order store the most significant
70
+ * byte first, so the number 0x12345678 becomes 0x12 0x34 0x56 0x78
71
+ * when stored with big-endian byte order.
72
+ */
73
+ const BIG_ENDIAN = false;
74
+
75
+ /**
76
+ * Convert an unsigned short into two bytes.
77
+ *
78
+ * @param integer $value
79
+ * the unsigned short that will be converted. The lower
80
+ * two bytes will be extracted regardless of the actual size passed.
81
+ * @param boolean $endian
82
+ * one of {@link LITTLE_ENDIAN} and {@link
83
+ * BIG_ENDIAN}.
84
+ * @return string the bytes representing the unsigned short.
85
+ */
86
+ public static function shortToBytes($value, $endian)
87
+ {
88
+ if (is_null($value))
89
+ $value = 0;
90
+ if ($endian == self::LITTLE_ENDIAN) {
91
+ return chr($value) . chr($value >> 8);
92
+ } else {
93
+ return chr($value >> 8) . chr($value);
94
+ }
95
+ }
96
+
97
+ /**
98
+ * Convert a signed short into two bytes.
99
+ *
100
+ * @param integer $value
101
+ * the signed short that will be converted. The lower
102
+ * two bytes will be extracted regardless of the actual size passed.
103
+ * @param boolean $endian
104
+ * one of {@link LITTLE_ENDIAN} and {@link
105
+ * BIG_ENDIAN}.
106
+ * @return string the bytes representing the signed short.
107
+ */
108
+ public static function sShortToBytes($value, $endian)
109
+ {
110
+ /*
111
+ * We can just use shortToBytes, since signed shorts fits well
112
+ * within the 32 bit signed integers used in PHP.
113
+ */
114
+ return self::shortToBytes($value, $endian);
115
+ }
116
+
117
+ /**
118
+ * Convert an unsigned long into four bytes.
119
+ *
120
+ * Because PHP limits the size of integers to 32 bit signed, one
121
+ * cannot really have an unsigned integer in PHP. But integers
122
+ * larger than 2^31-1 will be promoted to 64 bit signed floating
123
+ * point numbers, and so such large numbers can be handled too.
124
+ *
125
+ * @param integer $value
126
+ * the unsigned long that will be converted. The
127
+ * argument will be treated as an unsigned 32 bit integer and the
128
+ * lower four bytes will be extracted. Treating the argument as an
129
+ * unsigned integer means that the absolute value will be used. Use
130
+ * {@link sLongToBytes} to convert signed integers.
131
+ * @param boolean $endian
132
+ * one of {@link LITTLE_ENDIAN} and {@link
133
+ * BIG_ENDIAN}.
134
+ * @return string the bytes representing the unsigned long.
135
+ */
136
+ public static function longToBytes($value, $endian)
137
+ {
138
+ /*
139
+ * We cannot convert the number to bytes in the normal way (using
140
+ * shifts and modulo calculations) because the PHP operator >> and
141
+ * function chr() clip their arguments to 2^31-1, which is the
142
+ * largest signed integer known to PHP. But luckily base_convert
143
+ * handles such big numbers.
144
+ */
145
+ $hex = str_pad(base_convert($value, 10, 16), 8, '0', STR_PAD_LEFT);
146
+ if ($endian == self::LITTLE_ENDIAN) {
147
+ return chr((int) hexdec($hex[6] . $hex[7])) . chr((int) hexdec($hex[4] . $hex[5])) . chr((int) hexdec($hex[2] . $hex[3])) . chr((int) hexdec($hex[0] . $hex[1]));
148
+ } else {
149
+ return chr((int) hexdec($hex[0] . $hex[1])) . chr((int) hexdec($hex[2] . $hex[3])) . chr((int) hexdec($hex[4] . $hex[5])) . chr((int) hexdec($hex[6] . $hex[7]));
150
+ }
151
+ }
152
+
153
+ /**
154
+ * Convert a signed long into four bytes.
155
+ *
156
+ * @param integer $value
157
+ * the signed long that will be converted. The argument
158
+ * will be treated as a signed 32 bit integer, from which the lower
159
+ * four bytes will be extracted.
160
+ * @param boolean $endian
161
+ * one of {@link LITTLE_ENDIAN} and {@link
162
+ * BIG_ENDIAN}.
163
+ * @return string the bytes representing the signed long.
164
+ */
165
+ public static function sLongToBytes($value, $endian)
166
+ {
167
+ /*
168
+ * We can convert the number into bytes in the normal way using
169
+ * shifts and modulo calculations here (in contrast with
170
+ * longToBytes) because PHP automatically handles 32 bit signed
171
+ * integers for us.
172
+ */
173
+ if ($endian == self::LITTLE_ENDIAN) {
174
+ return (chr($value) . chr($value >> 8) . chr($value >> 16) . chr($value >> 24));
175
+ } else {
176
+ return (chr($value >> 24) . chr($value >> 16) . chr($value >> 8) . chr($value));
177
+ }
178
+ }
179
+
180
+ /**
181
+ * Extract an unsigned byte from a string of bytes.
182
+ *
183
+ * @param string $bytes
184
+ * the bytes.
185
+ * @param integer $offset
186
+ * The byte found at the offset will be
187
+ * returned as an integer. The must be at least one byte available
188
+ * at offset.
189
+ * @return integer $offset the unsigned byte found at offset, e.g., an integer
190
+ * in the range 0 to 255.
191
+ */
192
+ public static function bytesToByte($bytes, $offset)
193
+ {
194
+ return ord($bytes[$offset]);
195
+ }
196
+
197
+ /**
198
+ * Extract a signed byte from bytes.
199
+ *
200
+ * @param string $bytes
201
+ * the bytes.
202
+ * @param integer $offset
203
+ * the offset. The byte found at the offset will be
204
+ * returned as an integer. The must be at least one byte available
205
+ * at offset.
206
+ * @return integer the signed byte found at offset, e.g., an integer in
207
+ * the range -128 to 127.
208
+ */
209
+ public static function bytesToSByte($bytes, $offset)
210
+ {
211
+ $n = self::bytesToByte($bytes, $offset);
212
+ if ($n > 127) {
213
+ return $n - 256;
214
+ } else {
215
+ return $n;
216
+ }
217
+ }
218
+
219
+ /**
220
+ * Extract an unsigned short from bytes.
221
+ *
222
+ * @param string $bytes
223
+ * the bytes.
224
+ * @param integer $offset
225
+ * the offset. The short found at the offset will be
226
+ * returned as an integer. There must be at least two bytes
227
+ * available beginning at the offset given.
228
+ * @param boolean $endian
229
+ * one of {@link LITTLE_ENDIAN} and {@link
230
+ * BIG_ENDIAN}.
231
+ * @return integer the unsigned short found at offset, e.g., an integer
232
+ * in the range 0 to 65535.
233
+ */
234
+ public static function bytesToShort($bytes, $offset, $endian)
235
+ {
236
+ if ($endian == self::LITTLE_ENDIAN) {
237
+ return (ord($bytes[$offset + 1]) * 256 + ord($bytes[$offset]));
238
+ } else {
239
+ return (ord($bytes[$offset]) * 256 + ord($bytes[$offset + 1]));
240
+ }
241
+ }
242
+
243
+ /**
244
+ * Extract a signed short from bytes.
245
+ *
246
+ * @param string $bytes
247
+ *
248
+ * @param integer $offset
249
+ * The short found at offset will be returned
250
+ * as an integer. There must be at least two bytes available
251
+ * beginning at the offset given.
252
+ * @param boolean $endian
253
+ * one of {@link LITTLE_ENDIAN} and {@link
254
+ * BIG_ENDIAN}.
255
+ * @return integer the signed byte found at offset, e.g., an integer in
256
+ * the range -32768 to 32767.
257
+ */
258
+ public static function bytesToSShort($bytes, $offset, $endian)
259
+ {
260
+ $n = self::bytesToShort($bytes, $offset, $endian);
261
+ if ($n > 32767) {
262
+ return $n - 65536;
263
+ } else {
264
+ return $n;
265
+ }
266
+ }
267
+
268
+ /**
269
+ * Extract an unsigned long from bytes.
270
+ *
271
+ * @param string $bytes
272
+ *
273
+ * @param integer $offset
274
+ * The long found at offset will be returned
275
+ * as an integer. There must be at least four bytes available
276
+ * beginning at the offset given.
277
+ * @param boolean $endian
278
+ * one of {@link LITTLE_ENDIAN} and {@link
279
+ * BIG_ENDIAN}.
280
+ * @return integer the unsigned long found at offset, e.g., an integer
281
+ * in the range 0 to 4294967295.
282
+ */
283
+ public static function bytesToLong($bytes, $offset, $endian)
284
+ {
285
+ if ($endian == self::LITTLE_ENDIAN) {
286
+ return (ord($bytes[$offset + 3]) * 16777216 + ord($bytes[$offset + 2]) * 65536 + ord($bytes[$offset + 1]) * 256 + ord($bytes[$offset]));
287
+ } else {
288
+ return (ord($bytes[$offset]) * 16777216 + ord($bytes[$offset + 1]) * 65536 + ord($bytes[$offset + 2]) * 256 + ord($bytes[$offset + 3]));
289
+ }
290
+ }
291
+
292
+ /**
293
+ * Extract a signed long from bytes.
294
+ *
295
+ * @param string $bytes
296
+ *
297
+ * @param integer $offset
298
+ * The long found at offset will be returned
299
+ * as an integer. There must be at least four bytes available
300
+ * beginning at the offset given.
301
+ * @param boolean $endian
302
+ * one of {@link LITTLE_ENDIAN} and {@link
303
+ * BIG_ENDIAN}. *
304
+ * @return integer the signed long found at offset, e.g., an integer in
305
+ * the range -2147483648 to 2147483647.
306
+ */
307
+ public static function bytesToSLong($bytes, $offset, $endian)
308
+ {
309
+ $n = self::bytesToLong($bytes, $offset, $endian);
310
+ if ($n > 2147483647) {
311
+ return $n - 4294967296;
312
+ } else {
313
+ return $n;
314
+ }
315
+ }
316
+
317
+ /**
318
+ * Extract an unsigned rational from bytes.
319
+ *
320
+ * @param string $bytes
321
+ *
322
+ * @param integer $offset
323
+ * The rational found at offset will be
324
+ * returned as an array. There must be at least eight bytes
325
+ * available beginning at the offset given.
326
+ * @param boolean $endian
327
+ * one of {@link LITTLE_ENDIAN} and {@link
328
+ * BIG_ENDIAN}. *
329
+ * @return array the unsigned rational found at offset, e.g., an
330
+ * array with two integers in the range 0 to 4294967295.
331
+ */
332
+ public static function bytesToRational($bytes, $offset, $endian)
333
+ {
334
+ return [
335
+ self::bytesToLong($bytes, $offset, $endian),
336
+ self::bytesToLong($bytes, $offset + 4, $endian)
337
+ ];
338
+ }
339
+
340
+ /**
341
+ * Extract a signed rational from bytes.
342
+ *
343
+ * @param string $bytes
344
+ *
345
+ * @param integer $offset
346
+ * The rational found at offset will be
347
+ * returned as an array. There must be at least eight bytes
348
+ * available beginning at the offset given.
349
+ * @param boolean $endian
350
+ * one of {@link LITTLE_ENDIAN} and {@link
351
+ * BIG_ENDIAN}.
352
+ * @return array the signed rational found at offset, e.g., an array
353
+ * with two integers in the range -2147483648 to 2147483647.
354
+ */
355
+ public static function bytesToSRational($bytes, $offset, $endian)
356
+ {
357
+ return [
358
+ self::bytesToSLong($bytes, $offset, $endian),
359
+ self::bytesToSLong($bytes, $offset + 4, $endian)
360
+ ];
361
+ }
362
+
363
+ /**
364
+ * Format bytes for dumping.
365
+ *
366
+ * This method is for debug output, it will format a string as a
367
+ * hexadecimal dump suitable for display on a terminal. The output
368
+ * is printed directly to standard out.
369
+ *
370
+ * @param string $bytes
371
+ * the bytes that will be dumped.
372
+ * @param integer $max
373
+ * the maximum number of bytes to dump. If this is left
374
+ * out (or left to the default of 0), then the entire string will be
375
+ * dumped.
376
+ * @return void
377
+ */
378
+ public static function bytesToDump($bytes, $max = 0)
379
+ {
380
+ $s = strlen($bytes);
381
+
382
+ if ($max > 0) {
383
+ $s = min($max, $s);
384
+ }
385
+ $line = 24;
386
+
387
+ for ($i = 0; $i < $s; $i ++) {
388
+ printf('%02X ', ord($bytes[$i]));
389
+
390
+ if (($i + 1) % $line == 0) {
391
+ print("\n");
392
+ }
393
+ }
394
+ print("\n");
395
+ }
396
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelDataWindow.php ADDED
@@ -0,0 +1,542 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+ namespace lsolesen\pel;
26
+
27
+ /**
28
+ * The window.
29
+ *
30
+ * @package PEL
31
+ */
32
+ class PelDataWindow
33
+ {
34
+
35
+ /**
36
+ * The data held by this window.
37
+ *
38
+ * The string can contain any kind of data, including binary data.
39
+ *
40
+ * @var string
41
+ */
42
+ private $data = '';
43
+
44
+ /**
45
+ * The byte order currently in use.
46
+ *
47
+ * This will be the byte order used when data is read using the for
48
+ * example the {@link getShort} function. It must be one of {@link
49
+ * PelConvert::LITTLE_ENDIAN} and {@link PelConvert::BIG_ENDIAN}.
50
+ *
51
+ * @var boolean
52
+ * @see PelDataWindow::setByteOrder, getByteOrder
53
+ */
54
+ private $order;
55
+
56
+ /**
57
+ * The start of the current window.
58
+ *
59
+ * All offsets used for access into the data will count from this
60
+ * offset, effectively limiting access to a window starting at this
61
+ * byte.
62
+ *
63
+ * @var int
64
+ * @see PelDataWindow::setWindowStart
65
+ */
66
+ private $start = 0;
67
+
68
+ /**
69
+ * The size of the current window.
70
+ *
71
+ * All offsets used for access into the data will be limited by this
72
+ * variable. A valid offset must be strictly less than this
73
+ * variable.
74
+ *
75
+ * @var int
76
+ * @see PelDataWindow::setWindowSize
77
+ */
78
+ private $size = 0;
79
+
80
+ /**
81
+ * Construct a new data window with the data supplied.
82
+ *
83
+ * @param string|resource|\GDImage $data
84
+ * the data that this window will contain. This can
85
+ * either be given as a string (interpreted litteraly as a sequence
86
+ * of bytes) or a PHP image resource handle. The data will be copied
87
+ * into the new data window.
88
+ * @param boolean $endianess
89
+ * the initial byte order of the window. This must
90
+ * be either {@link PelConvert::LITTLE_ENDIAN} or {@link
91
+ * PelConvert::BIG_ENDIAN}. This will be used when integers are
92
+ * read from the data, and it can be changed later with {@link
93
+ * setByteOrder()}.
94
+ * @throws PelInvalidArgumentException if $data was of invalid type
95
+ */
96
+ public function __construct($data = '', $endianess = PelConvert::LITTLE_ENDIAN)
97
+ {
98
+ if (is_string($data)) {
99
+ $this->data = $data;
100
+ } elseif ((is_resource($data) && get_resource_type($data) === 'gd') || (PHP_VERSION_ID >= 80000 && is_object($data) && $data instanceof \GDImage)) {
101
+ /*
102
+ * The ImageJpeg() function insists on printing the bytes
103
+ * instead of returning them in a more civil way as a string, so
104
+ * we have to buffer the output...
105
+ */
106
+ ob_start();
107
+ ImageJpeg($data, null, Pel::getJPEGQuality());
108
+ $this->data = ob_get_clean();
109
+ } else {
110
+ throw new PelInvalidArgumentException('Bad type for $data: %s', gettype($data));
111
+ }
112
+
113
+ $this->order = $endianess;
114
+ $this->size = strlen($this->data);
115
+ }
116
+
117
+ /**
118
+ * Get the size of the data window.
119
+ *
120
+ * @return integer the number of bytes covered by the window. The
121
+ * allowed offsets go from 0 up to this number minus one.
122
+ * @see getBytes()
123
+ */
124
+ public function getSize()
125
+ {
126
+ return $this->size;
127
+ }
128
+
129
+ /**
130
+ * Change the byte order of the data.
131
+ *
132
+ * @param boolean $order
133
+ * the new byte order. This must be either
134
+ * {@link PelConvert::LITTLE_ENDIAN} or {@link
135
+ * PelConvert::BIG_ENDIAN}.
136
+ */
137
+ public function setByteOrder($order)
138
+ {
139
+ $this->order = $order;
140
+ }
141
+
142
+ /**
143
+ * Get the currently used byte order.
144
+ *
145
+ * @return boolean this will be either {@link
146
+ * PelConvert::LITTLE_ENDIAN} or {@link PelConvert::BIG_ENDIAN}.
147
+ */
148
+ public function getByteOrder()
149
+ {
150
+ return $this->order;
151
+ }
152
+
153
+ /**
154
+ * Move the start of the window forward.
155
+ *
156
+ * @param integer $start
157
+ * the new start of the window. All new offsets will be
158
+ * calculated from this new start offset, and the size of the window
159
+ * will shrink to keep the end of the window in place.
160
+ * @throws PelDataWindowWindowException
161
+ */
162
+ public function setWindowStart($start)
163
+ {
164
+ if ($start < 0 || $start > $this->size) {
165
+ throw new PelDataWindowWindowException('Window [%d, %d] does ' . 'not fit in window [0, %d]', $start, $this->size, $this->size);
166
+ }
167
+ $this->start += $start;
168
+ $this->size -= $start;
169
+ }
170
+
171
+ /**
172
+ * Adjust the size of the window.
173
+ * The size can only be made smaller.
174
+ *
175
+ * @param integer $size
176
+ * the desired size of the window. If the argument is
177
+ * negative, the window will be shrunk by the argument.
178
+ * @throws PelDataWindowWindowException
179
+ */
180
+ public function setWindowSize($size)
181
+ {
182
+ if ($size < 0) {
183
+ $size += $this->size;
184
+ }
185
+ if ($size < 0 || $size > $this->size) {
186
+ throw new PelDataWindowWindowException('Window [0, %d] ' . 'does not fit in window [0, %d]', $size, $this->size);
187
+ }
188
+ $this->size = $size;
189
+ }
190
+
191
+ /**
192
+ * Make a new data window with the same data as the this window.
193
+ *
194
+ * @param integer|null $start
195
+ * if an integer is supplied, then it will be the start
196
+ * of the window in the clone. If left unspecified, then the clone
197
+ * will inherit the start from this object.
198
+ * @param integer|null $size
199
+ * if an integer is supplied, then it will be the size
200
+ * of the window in the clone. If left unspecified, then the clone
201
+ * will inherit the size from this object.
202
+ * @return PelDataWindow a new window that operates on the same data
203
+ * as this window, but (optionally) with a smaller window size.
204
+ * @throws PelDataWindowWindowException
205
+ */
206
+ public function getClone($start = null, $size = null)
207
+ {
208
+ $c = clone $this;
209
+
210
+ if (is_int($start)) {
211
+ $c->setWindowStart($start);
212
+ }
213
+ if (is_int($size)) {
214
+ $c->setWindowSize($size);
215
+ }
216
+ return $c;
217
+ }
218
+
219
+ /**
220
+ * Validate an offset against the current window.
221
+ *
222
+ * @param integer $offset
223
+ * the offset to be validated. If the offset is negative
224
+ * or if it is greater than or equal to the current window size,
225
+ * then a {@link PelDataWindowOffsetException} is thrown.
226
+ * @return void if the offset is valid nothing is returned, if it is
227
+ * invalid a new {@link PelDataWindowOffsetException} is thrown.
228
+ * @throws PelDataWindowOffsetException
229
+ */
230
+ private function validateOffset($offset)
231
+ {
232
+ if ($offset < 0 || $offset >= $this->size) {
233
+ throw new PelDataWindowOffsetException('Offset %d not within [%d, %d]', $offset, 0, $this->size - 1);
234
+ }
235
+ }
236
+
237
+ /**
238
+ * Return some or all bytes visible in the window.
239
+ *
240
+ * This method works just like the standard {@link substr()}
241
+ * function in PHP with the exception that it works within the
242
+ * window of accessible bytes and does strict range checking.
243
+ *
244
+ * @param integer|null $start
245
+ * the offset to the first byte returned. If a negative
246
+ * number is given, then the counting will be from the end of the
247
+ * window. Invalid offsets will result in a {@link
248
+ * PelDataWindowOffsetException} being thrown.
249
+ * @param integer|null $size
250
+ * the size of the sub-window. If a negative number is
251
+ * given, then that many bytes will be omitted from the result.
252
+ * @return string a subset of the bytes in the window. This will
253
+ * always return no more than {@link getSize()} bytes.
254
+ * @throws PelDataWindowOffsetException
255
+ */
256
+ public function getBytes($start = null, $size = null)
257
+ {
258
+ if (is_int($start)) {
259
+ if ($start < 0) {
260
+ $start += $this->size;
261
+ }
262
+
263
+ $this->validateOffset($start);
264
+ } else {
265
+ $start = 0;
266
+ }
267
+
268
+ if (is_int($size)) {
269
+ if ($size <= 0) {
270
+ $size += $this->size - $start;
271
+ }
272
+
273
+ $this->validateOffset($start + $size);
274
+ } else {
275
+ $size = $this->size - $start;
276
+ }
277
+
278
+ return substr($this->data, $this->start + $start, $size);
279
+ }
280
+
281
+ /**
282
+ * Return an unsigned byte from the data.
283
+ *
284
+ * @param integer $offset
285
+ * the offset into the data. An offset of zero will
286
+ * return the first byte in the current allowed window. The last
287
+ * valid offset is equal to {@link getSize()}-1. Invalid offsets
288
+ * will result in a {@link PelDataWindowOffsetException} being
289
+ * thrown.
290
+ * @return integer the unsigned byte found at offset.
291
+ * @throws PelDataWindowOffsetException
292
+ */
293
+ public function getByte($offset = 0)
294
+ {
295
+ /*
296
+ * Validate the offset --- this throws an exception if offset is
297
+ * out of range.
298
+ */
299
+ $this->validateOffset($offset);
300
+
301
+ /* Translate the offset into an offset into the data. */
302
+ $offset += $this->start;
303
+
304
+ /* Return an unsigned byte. */
305
+ return PelConvert::bytesToByte($this->data, $offset);
306
+ }
307
+
308
+ /**
309
+ * Return a signed byte from the data.
310
+ *
311
+ * @param integer $offset
312
+ * the offset into the data. An offset of zero will
313
+ * return the first byte in the current allowed window. The last
314
+ * valid offset is equal to {@link getSize()}-1. Invalid offsets
315
+ * will result in a {@link PelDataWindowOffsetException} being
316
+ * thrown.
317
+ * @return integer the signed byte found at offset.
318
+ * @throws PelDataWindowOffsetException
319
+ */
320
+ public function getSByte($offset = 0)
321
+ {
322
+ /*
323
+ * Validate the offset --- this throws an exception if offset is
324
+ * out of range.
325
+ */
326
+ $this->validateOffset($offset);
327
+
328
+ /* Translate the offset into an offset into the data. */
329
+ $offset += $this->start;
330
+
331
+ /* Return a signed byte. */
332
+ return PelConvert::bytesToSByte($this->data, $offset);
333
+ }
334
+
335
+ /**
336
+ * Return an unsigned short read from the data.
337
+ *
338
+ * @param integer $offset
339
+ * the offset into the data. An offset of zero will
340
+ * return the first short available in the current allowed window.
341
+ * The last valid offset is equal to {@link getSize()}-2. Invalid
342
+ * offsets will result in a {@link PelDataWindowOffsetException}
343
+ * being thrown.
344
+ * @return integer the unsigned short found at offset.
345
+ * @throws PelDataWindowOffsetException
346
+ */
347
+ public function getShort($offset = 0)
348
+ {
349
+ /*
350
+ * Validate the offset+1 to see if we can safely get two bytes ---
351
+ * this throws an exception if offset is out of range.
352
+ */
353
+ $this->validateOffset($offset);
354
+ $this->validateOffset($offset + 1);
355
+
356
+ /* Translate the offset into an offset into the data. */
357
+ $offset += $this->start;
358
+
359
+ /* Return an unsigned short. */
360
+ return PelConvert::bytesToShort($this->data, $offset, $this->order);
361
+ }
362
+
363
+ /**
364
+ * Return a signed short read from the data.
365
+ *
366
+ * @param integer $offset
367
+ * the offset into the data. An offset of zero will
368
+ * return the first short available in the current allowed window.
369
+ * The last valid offset is equal to {@link getSize()}-2. Invalid
370
+ * offsets will result in a {@link PelDataWindowOffsetException}
371
+ * being thrown.
372
+ * @return integer the signed short found at offset.
373
+ * @throws PelDataWindowOffsetException
374
+ */
375
+ public function getSShort($offset = 0)
376
+ {
377
+ /*
378
+ * Validate the offset+1 to see if we can safely get two bytes ---
379
+ * this throws an exception if offset is out of range.
380
+ */
381
+ $this->validateOffset($offset);
382
+ $this->validateOffset($offset + 1);
383
+
384
+ /* Translate the offset into an offset into the data. */
385
+ $offset += $this->start;
386
+
387
+ /* Return a signed short. */
388
+ return PelConvert::bytesToSShort($this->data, $offset, $this->order);
389
+ }
390
+
391
+ /**
392
+ * Return an unsigned long read from the data.
393
+ *
394
+ * @param integer $offset
395
+ * the offset into the data. An offset of zero will
396
+ * return the first long available in the current allowed window.
397
+ * The last valid offset is equal to {@link getSize()}-4. Invalid
398
+ * offsets will result in a {@link PelDataWindowOffsetException}
399
+ * being thrown.
400
+ * @return integer the unsigned long found at offset.
401
+ * @throws PelDataWindowOffsetException
402
+ */
403
+ public function getLong($offset = 0)
404
+ {
405
+ /*
406
+ * Validate the offset+3 to see if we can safely get four bytes
407
+ * --- this throws an exception if offset is out of range.
408
+ */
409
+ $this->validateOffset($offset);
410
+ $this->validateOffset($offset + 3);
411
+
412
+ /* Translate the offset into an offset into the data. */
413
+ $offset += $this->start;
414
+
415
+ /* Return an unsigned long. */
416
+ return PelConvert::bytesToLong($this->data, $offset, $this->order);
417
+ }
418
+
419
+ /**
420
+ * Return a signed long read from the data.
421
+ *
422
+ * @param integer $offset
423
+ * the offset into the data. An offset of zero will
424
+ * return the first long available in the current allowed window.
425
+ * The last valid offset is equal to {@link getSize()}-4. Invalid
426
+ * offsets will result in a {@link PelDataWindowOffsetException}
427
+ * being thrown.
428
+ * @return integer the signed long found at offset.
429
+ * @throws PelDataWindowOffsetException
430
+ */
431
+ public function getSLong($offset = 0)
432
+ {
433
+ /*
434
+ * Validate the offset+3 to see if we can safely get four bytes
435
+ * --- this throws an exception if offset is out of range.
436
+ */
437
+ $this->validateOffset($offset);
438
+ $this->validateOffset($offset + 3);
439
+
440
+ /* Translate the offset into an offset into the data. */
441
+ $offset += $this->start;
442
+
443
+ /* Return a signed long. */
444
+ return PelConvert::bytesToSLong($this->data, $offset, $this->order);
445
+ }
446
+
447
+ /**
448
+ * Return an unsigned rational read from the data.
449
+ *
450
+ * @param integer $offset
451
+ * the offset into the data. An offset of zero will
452
+ * return the first rational available in the current allowed
453
+ * window. The last valid offset is equal to {@link getSize()}-8.
454
+ * Invalid offsets will result in a {@link
455
+ * PelDataWindowOffsetException} being thrown.
456
+ * @return array the unsigned rational found at offset. A rational
457
+ * number is represented as an array of two numbers: the enumerator
458
+ * and denominator. Both of these numbers will be unsigned longs.
459
+ * @throws PelDataWindowOffsetException
460
+ */
461
+ public function getRational($offset = 0)
462
+ {
463
+ return [
464
+ $this->getLong($offset),
465
+ $this->getLong($offset + 4)
466
+ ];
467
+ }
468
+
469
+ /**
470
+ * Return a signed rational read from the data.
471
+ *
472
+ * @param integer $offset
473
+ * the offset into the data. An offset of zero will
474
+ * return the first rational available in the current allowed
475
+ * window. The last valid offset is equal to {@link getSize()}-8.
476
+ * Invalid offsets will result in a {@link
477
+ * PelDataWindowOffsetException} being thrown.
478
+ * @return array the signed rational found at offset. A rational
479
+ * number is represented as an array of two numbers: the enumerator
480
+ * and denominator. Both of these numbers will be signed longs.
481
+ * @throws PelDataWindowOffsetException
482
+ */
483
+ public function getSRational($offset = 0)
484
+ {
485
+ return [
486
+ $this->getSLong($offset),
487
+ $this->getSLong($offset + 4)
488
+ ];
489
+ }
490
+
491
+ /**
492
+ * String comparison on substrings.
493
+ *
494
+ * @param integer $offset
495
+ * the offset into the data. An offset of zero will make
496
+ * the comparison start with the very first byte available in the
497
+ * window. The last valid offset is equal to {@link getSize()}
498
+ * minus the length of the string. If the string is too long, then
499
+ * a {@link PelDataWindowOffsetException} will be thrown.
500
+ * @param string $str
501
+ * the string to compare with.
502
+ * @return boolean true if the string given matches the data in the
503
+ * window, at the specified offset, false otherwise. The comparison
504
+ * will stop as soon as a mismatch if found.
505
+ * @throws PelDataWindowOffsetException
506
+ */
507
+ public function strcmp($offset, $str)
508
+ {
509
+ /*
510
+ * Validate the offset of the final character we might have to
511
+ * check.
512
+ */
513
+ $s = strlen($str);
514
+ $this->validateOffset($offset);
515
+ $this->validateOffset($offset + $s - 1);
516
+
517
+ /* Translate the offset into an offset into the data. */
518
+ $offset += $this->start;
519
+
520
+ /* Check each character, return as soon as the answer is known. */
521
+ for ($i = 0; $i < $s; $i ++) {
522
+ if ($this->data[$offset + $i] != $str[$i]) {
523
+ return false;
524
+ }
525
+ }
526
+
527
+ /* All characters matches each other, return true. */
528
+ return true;
529
+ }
530
+
531
+ /**
532
+ * Return a string representation of the data window.
533
+ *
534
+ * @return string a description of the window with information about
535
+ * the number of bytes accessible, the total number of bytes, and
536
+ * the window start and stop.
537
+ */
538
+ public function __toString()
539
+ {
540
+ return Pel::fmt('DataWindow: %d bytes in [%d, %d] of %d bytes', $this->size, $this->start, $this->start + $this->size, strlen($this->data));
541
+ }
542
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelDataWindowOffsetException.php ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+ namespace lsolesen\pel;
26
+
27
+ /**
28
+ * An exception thrown when an invalid offset is encountered.
29
+ *
30
+ * @package PEL
31
+ * @subpackage Exception
32
+ */
33
+ class PelDataWindowOffsetException extends PelException
34
+ {
35
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelDataWindowWindowException.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+ namespace lsolesen\pel;
26
+
27
+ /**
28
+ * A container for bytes with a limited window of accessible bytes.
29
+ *
30
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
31
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * An exception thrown when an invalid window is encountered.
37
+ *
38
+ * @package PEL
39
+ * @subpackage Exception
40
+ */
41
+ class PelDataWindowWindowException extends PelException
42
+ {
43
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntry.php ADDED
@@ -0,0 +1,251 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with Exif entries.
28
+ *
29
+ * This file defines two exception classes and the abstract class
30
+ * {@link PelEntry} which provides the basic methods that all Exif
31
+ * entries will have. All Exif entries will be represented by
32
+ * descendants of the {@link PelEntry} class --- the class itself is
33
+ * abstract and so it cannot be instantiated.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
37
+ * License (GPL)
38
+ * @package PEL
39
+ */
40
+
41
+ /**
42
+ * Common ancestor class of all {@link PelIfd} entries.
43
+ *
44
+ * As this class is abstract you cannot instantiate objects from it.
45
+ * It only serves as a common ancestor to define the methods common to
46
+ * all entries. The most important methods are {@link getValue()} and
47
+ * {@link setValue()}, both of which is abstract in this class. The
48
+ * descendants will give concrete implementations for them.
49
+ *
50
+ * If you have some data coming from an image (some raw bytes), then
51
+ * the static method {@link newFromData()} is helpful --- it will look
52
+ * at the data and give you a proper decendent of {@link PelEntry}
53
+ * back.
54
+ *
55
+ * If you instead want to have an entry for some data which take the
56
+ * form of an integer, a string, a byte, or some other PHP type, then
57
+ * don't use this class. You should instead create an object of the
58
+ * right subclass ({@link PelEntryShort} for short integers, {@link
59
+ * PelEntryAscii} for strings, and so on) directly.
60
+ *
61
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
62
+ * @package PEL
63
+ */
64
+ namespace lsolesen\pel;
65
+
66
+ abstract class PelEntry
67
+ {
68
+
69
+ /**
70
+ * Type of IFD containing this tag.
71
+ *
72
+ * This must be one of the constants defined in {@link PelIfd}:
73
+ * {@link PelIfd::IFD0} for the main image IFD, {@link PelIfd::IFD1}
74
+ * for the thumbnail image IFD, {@link PelIfd::EXIF} for the Exif
75
+ * sub-IFD, {@link PelIfd::GPS} for the GPS sub-IFD, or {@link
76
+ * PelIfd::INTEROPERABILITY} for the interoperability sub-IFD.
77
+ *
78
+ * @var int
79
+ */
80
+ protected $ifd_type;
81
+
82
+ /**
83
+ * The bytes representing this entry.
84
+ *
85
+ * Subclasses must either override {@link getBytes()} or, if
86
+ * possible, maintain this property so that it always contains a
87
+ * true representation of the entry.
88
+ *
89
+ * @var string
90
+ */
91
+ protected $bytes = '';
92
+
93
+ /**
94
+ * The {@link PelTag} of this entry.
95
+ *
96
+ * @var int
97
+ */
98
+ protected $tag;
99
+
100
+ /**
101
+ * The {@link PelFormat} of this entry.
102
+ *
103
+ * @var int
104
+ */
105
+ protected $format;
106
+
107
+ /**
108
+ * The number of components of this entry.
109
+ *
110
+ * @var int
111
+ */
112
+ protected $components;
113
+
114
+ /**
115
+ * Return the tag of this entry.
116
+ *
117
+ * @return int the tag of this entry.
118
+ */
119
+ public function getTag()
120
+ {
121
+ return $this->tag;
122
+ }
123
+
124
+ /**
125
+ * Return the type of IFD which holds this entry.
126
+ *
127
+ * @return int one of the constants defined in {@link PelIfd}:
128
+ * {@link PelIfd::IFD0} for the main image IFD, {@link PelIfd::IFD1}
129
+ * for the thumbnail image IFD, {@link PelIfd::EXIF} for the Exif
130
+ * sub-IFD, {@link PelIfd::GPS} for the GPS sub-IFD, or {@link
131
+ * PelIfd::INTEROPERABILITY} for the interoperability sub-IFD.
132
+ */
133
+ public function getIfdType()
134
+ {
135
+ return $this->ifd_type;
136
+ }
137
+
138
+ /**
139
+ * Update the IFD type.
140
+ *
141
+ * @param int $type
142
+ * must be one of the constants defined in {@link
143
+ * PelIfd}: {@link PelIfd::IFD0} for the main image IFD, {@link
144
+ * PelIfd::IFD1} for the thumbnail image IFD, {@link PelIfd::EXIF}
145
+ * for the Exif sub-IFD, {@link PelIfd::GPS} for the GPS sub-IFD, or
146
+ * {@link PelIfd::INTEROPERABILITY} for the interoperability
147
+ * sub-IFD.
148
+ */
149
+ public function setIfdType($type)
150
+ {
151
+ $this->ifd_type = $type;
152
+ }
153
+
154
+ /**
155
+ * Return the format of this entry.
156
+ *
157
+ * @return int the format of this entry.
158
+ */
159
+ public function getFormat()
160
+ {
161
+ return $this->format;
162
+ }
163
+
164
+ /**
165
+ * Return the number of components of this entry.
166
+ *
167
+ * @return int the number of components of this entry.
168
+ */
169
+ public function getComponents()
170
+ {
171
+ return $this->components;
172
+ }
173
+
174
+ /**
175
+ * Turn this entry into bytes.
176
+ *
177
+ * @param boolean $o
178
+ * the desired byte order, which must be either
179
+ * {@link Convert::LITTLE_ENDIAN} or {@link Convert::BIG_ENDIAN}.
180
+ * @return string bytes representing this entry.
181
+ */
182
+ public function getBytes($o)
183
+ {
184
+ return $this->bytes;
185
+ }
186
+
187
+ /**
188
+ * Get the value of this entry as text.
189
+ *
190
+ * The value will be returned in a format suitable for presentation,
191
+ * e.g., rationals will be returned as 'x/y', ASCII strings will be
192
+ * returned as themselves etc.
193
+ *
194
+ * @param boolean $brief
195
+ * some values can be returned in a long or more
196
+ * brief form, and this parameter controls that.
197
+ * @return string the value as text.
198
+ */
199
+ abstract public function getText($brief = false);
200
+
201
+ /**
202
+ * Get the value of this entry.
203
+ *
204
+ * The value returned will generally be the same as the one supplied
205
+ * to the constructor or with {@link setValue()}. For a formatted
206
+ * version of the value, one should use {@link getText()} instead.
207
+ *
208
+ * @return mixed the unformatted value.
209
+ */
210
+ abstract public function getValue();
211
+
212
+ /**
213
+ * Set the value of this entry.
214
+ *
215
+ * The value should be in the same format as for the constructor.
216
+ *
217
+ * @param mixed $value
218
+ * the new value.
219
+ * @abstract
220
+ *
221
+ */
222
+ public function setValue($value)
223
+ {
224
+ /*
225
+ * This (fake) abstract method is here to make it possible for the
226
+ * documentation to refer to PelEntry::setValue().
227
+ * It cannot declared abstract in the proper PHP way, for then PHP
228
+ * wont allow subclasses to define it with two arguments (which is
229
+ * what PelEntryCopyright does).
230
+ */
231
+ throw new PelException('setValue() is abstract.');
232
+ }
233
+
234
+ /**
235
+ * Turn this entry into a string.
236
+ *
237
+ * @return string a string representation of this entry. This is
238
+ * mostly for debugging.
239
+ */
240
+ public function __toString()
241
+ {
242
+ $str = Pel::fmt(" Tag: 0x%04X (%s)\n", $this->tag, PelTag::getName($this->ifd_type, $this->tag));
243
+ $str .= Pel::fmt(" Format : %d (%s)\n", $this->format, PelFormat::getName($this->format));
244
+ $str .= Pel::fmt(" Components: %d\n", $this->components);
245
+ if ($this->getTag() != PelTag::MAKER_NOTE && $this->getTag() != PelTag::PRINT_IM) {
246
+ $str .= Pel::fmt(" Value : %s\n", print_r($this->getValue(), true));
247
+ }
248
+ $str .= Pel::fmt(" Text : %s\n", $this->getText());
249
+ return $str;
250
+ }
251
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryAscii.php ADDED
@@ -0,0 +1,125 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold ASCII strings.
28
+ *
29
+ * The classes defined here are to be used for Exif entries holding
30
+ * ASCII strings, such as {@link PelTag::MAKE}, {@link
31
+ * PelTag::SOFTWARE}, and {@link PelTag::DATE_TIME}. For
32
+ * entries holding normal textual ASCII strings the class {@link
33
+ * PelEntryAscii} should be used, but for entries holding
34
+ * timestamps the class {@link PelEntryTime} would be more
35
+ * convenient instead. Copyright information is handled by the {@link
36
+ * PelEntryCopyright} class.
37
+ *
38
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
39
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
40
+ * License (GPL)
41
+ * @package PEL
42
+ */
43
+
44
+ /**
45
+ * Class for holding a plain ASCII string.
46
+ *
47
+ * This class can hold a single ASCII string, and it will be used as in
48
+ * <code>
49
+ * $entry = $ifd->getEntry(PelTag::IMAGE_DESCRIPTION);
50
+ * print($entry->getValue());
51
+ * $entry->setValue('This is my image. I like it.');
52
+ * </code>
53
+ *
54
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
55
+ * @package PEL
56
+ */
57
+ namespace lsolesen\pel;
58
+
59
+ class PelEntryAscii extends PelEntry
60
+ {
61
+
62
+ /**
63
+ * The string hold by this entry.
64
+ *
65
+ * This is the string that was given to the {@link __construct
66
+ * constructor} or later to {@link setValue}, without any final NULL
67
+ * character.
68
+ *
69
+ * @var string
70
+ */
71
+ private $str;
72
+
73
+ /**
74
+ * Make a new PelEntry that can hold an ASCII string.
75
+ *
76
+ * @param int $tag
77
+ * the tag which this entry represents. This should be
78
+ * one of the constants defined in {@link PelTag}, e.g., {@link
79
+ * PelTag::IMAGE_DESCRIPTION}, {@link PelTag::MODEL}, or any other
80
+ * tag with format {@link PelFormat::ASCII}.
81
+ * @param string $str
82
+ * the string that this entry will represent. The
83
+ * string must obey the same rules as the string argument to {@link
84
+ * setValue}, namely that it should be given without any trailing
85
+ * NULL character and that it must be plain 7-bit ASCII.
86
+ */
87
+ public function __construct($tag, $str = '')
88
+ {
89
+ $this->tag = $tag;
90
+ $this->format = PelFormat::ASCII;
91
+ $this->setValue($str);
92
+ }
93
+
94
+ /**
95
+ *
96
+ * {@inheritdoc}
97
+ * @see \lsolesen\pel\PelEntry::setValue()
98
+ */
99
+ public function setValue($str)
100
+ {
101
+ $this->components = strlen($str) + 1;
102
+ $this->str = $str;
103
+ $this->bytes = $str . chr(0x00);
104
+ }
105
+
106
+ /**
107
+ *
108
+ * {@inheritdoc}
109
+ * @see \lsolesen\pel\PelEntry::getValue()
110
+ */
111
+ public function getValue()
112
+ {
113
+ return $this->str;
114
+ }
115
+
116
+ /**
117
+ *
118
+ * {@inheritdoc}
119
+ * @see \lsolesen\pel\PelEntry::getText()
120
+ */
121
+ public function getText($brief = false)
122
+ {
123
+ return $this->str;
124
+ }
125
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryByte.php ADDED
@@ -0,0 +1,92 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold bytes, both signed and unsigned.
28
+ * The {@link
29
+ * PelEntryWindowsString} class is used to manipulate strings in the
30
+ * format Windows XP needs.
31
+ *
32
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
33
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
34
+ * License (GPL)
35
+ * @package PEL
36
+ */
37
+
38
+ /**
39
+ * Class for holding unsigned bytes.
40
+ *
41
+ * This class can hold bytes, either just a single byte or an array of
42
+ * bytes. The class will be used to manipulate any of the Exif tags
43
+ * which has format {@link PelFormat::BYTE}.
44
+ *
45
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
46
+ * @package PEL
47
+ */
48
+ namespace lsolesen\pel;
49
+
50
+ class PelEntryByte extends PelEntryNumber
51
+ {
52
+
53
+ /**
54
+ * Make a new entry that can hold an unsigned byte.
55
+ *
56
+ * The method accept several integer arguments. The {@link
57
+ * getValue} method will always return an array except for when a
58
+ * single integer argument is given here.
59
+ *
60
+ * @param int $tag
61
+ * the tag which this entry represents. This
62
+ * should be one of the constants defined in {@link PelTag}
63
+ * which has format {@link PelFormat::BYTE}.
64
+ * @param int $value...
65
+ * the byte(s) that this entry will represent.
66
+ * The argument passed must obey the same rules as the argument to
67
+ * {@link setValue}, namely that it should be within range of an
68
+ * unsigned byte, that is between 0 and 255 (inclusive). If not,
69
+ * then a {@link PelOverflowException} will be thrown.
70
+ */
71
+ public function __construct($tag, $value = null)
72
+ {
73
+ $this->tag = $tag;
74
+ $this->min = 0;
75
+ $this->max = 255;
76
+ $this->format = PelFormat::BYTE;
77
+
78
+ $value = func_get_args();
79
+ array_shift($value);
80
+ $this->setValueArray($value);
81
+ }
82
+
83
+ /**
84
+ *
85
+ * {@inheritdoc}
86
+ * @see \lsolesen\pel\PelEntryNumber::numberToBytes()
87
+ */
88
+ public function numberToBytes($number, $order)
89
+ {
90
+ return chr($number);
91
+ }
92
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryCopyright.php ADDED
@@ -0,0 +1,171 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class for holding copyright information.
28
+ *
29
+ * The Exif standard specifies a certain format for copyright
30
+ * information where the one {@link PelTag::COPYRIGHT copyright
31
+ * tag} holds both the photographer and editor copyrights, separated
32
+ * by a NULL character.
33
+ *
34
+ * This class is used to manipulate that tag so that the format is
35
+ * kept to the standard. A common use would be to add a new copyright
36
+ * tag to an image, since most cameras do not add this tag themselves.
37
+ * This would be done like this:
38
+ *
39
+ * <code>
40
+ * $entry = new PelEntryCopyright('Copyright, Martin Geisler, 2004');
41
+ * $ifd0->addEntry($entry);
42
+ * </code>
43
+ *
44
+ * Here we only set the photographer copyright, use the optional
45
+ * second argument to specify the editor copyright. If there is only
46
+ * an editor copyright, then let the first argument be the empty
47
+ * string.
48
+ *
49
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
50
+ * @package PEL
51
+ */
52
+ namespace lsolesen\pel;
53
+
54
+ class PelEntryCopyright extends PelEntryAscii
55
+ {
56
+
57
+ /**
58
+ * The photographer copyright.
59
+ *
60
+ * @var string
61
+ */
62
+ private $photographer;
63
+
64
+ /**
65
+ * The editor copyright.
66
+ *
67
+ * @var string
68
+ */
69
+ private $editor;
70
+
71
+ /**
72
+ * Make a new entry for holding copyright information.
73
+ *
74
+ * @param string $photographer
75
+ * the photographer copyright. Use the empty string
76
+ * if there is no photographer copyright.
77
+ * @param string $editor
78
+ * the editor copyright. Use the empty string if
79
+ * there is no editor copyright.
80
+ */
81
+ public function __construct($photographer = '', $editor = '')
82
+ {
83
+ parent::__construct(PelTag::COPYRIGHT);
84
+ $this->setValue($photographer, $editor);
85
+ }
86
+
87
+ /**
88
+ * Update the copyright information.
89
+ *
90
+ * @param
91
+ * string the photographer copyright. Use the empty string
92
+ * if there is no photographer copyright.
93
+ * @param
94
+ * string the editor copyright. Use the empty string if
95
+ * there is no editor copyright.
96
+ */
97
+ public function setValue($photographer = '', $editor = '')
98
+ {
99
+ $this->photographer = $photographer;
100
+ $this->editor = $editor;
101
+
102
+ if ($photographer == '' && $editor != '') {
103
+ $photographer = ' ';
104
+ }
105
+
106
+ if ($editor == '') {
107
+ parent::setValue($photographer);
108
+ } else {
109
+ parent::setValue($photographer . chr(0x00) . $editor);
110
+ }
111
+ }
112
+
113
+ /**
114
+ * Retrive the copyright information.
115
+ *
116
+ * The strings returned will be the same as the one used previously
117
+ * with either {@link __construct the constructor} or with {@link
118
+ * setValue}.
119
+ *
120
+ * @return array an array with two strings, the photographer and
121
+ * editor copyrights. The two fields will be returned in that
122
+ * order, so that the first array index will be the photographer
123
+ * copyright, and the second will be the editor copyright.
124
+ */
125
+ public function getValue()
126
+ {
127
+ return [
128
+ $this->photographer,
129
+ $this->editor
130
+ ];
131
+ }
132
+
133
+ /**
134
+ * Return a text string with the copyright information.
135
+ *
136
+ * The photographer and editor copyright fields will be returned
137
+ * with a '-' in between if both copyright fields are present,
138
+ * otherwise only one of them will be returned.
139
+ *
140
+ * @param boolean $brief
141
+ * if false, then the strings '(Photographer)' and
142
+ * '(Editor)' will be appended to the photographer and editor
143
+ * copyright fields (if present), otherwise the fields will be
144
+ * returned as is.
145
+ * @return string the copyright information in a string.
146
+ */
147
+ public function getText($brief = false)
148
+ {
149
+ if ($brief) {
150
+ $p = '';
151
+ $e = '';
152
+ } else {
153
+ $p = ' ' . Pel::tra('(Photographer)');
154
+ $e = ' ' . Pel::tra('(Editor)');
155
+ }
156
+
157
+ if ($this->photographer != '' && $this->editor != '') {
158
+ return $this->photographer . $p . ' - ' . $this->editor . $e;
159
+ }
160
+
161
+ if ($this->photographer != '') {
162
+ return $this->photographer . $p;
163
+ }
164
+
165
+ if ($this->editor != '') {
166
+ return $this->editor . $e;
167
+ }
168
+
169
+ return '';
170
+ }
171
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryException.php ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with Exif entries.
28
+ *
29
+ * This file defines two exception classes and the abstract class
30
+ * {@link PelEntry} which provides the basic methods that all Exif
31
+ * entries will have. All Exif entries will be represented by
32
+ * descendants of the {@link PelEntry} class --- the class itself is
33
+ * abstract and so it cannot be instantiated.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
37
+ * License (GPL)
38
+ * @package PEL
39
+ */
40
+
41
+ /**
42
+ * Exception indicating a problem with an entry.
43
+ *
44
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
45
+ * @package PEL
46
+ * @subpackage Exception
47
+ */
48
+ namespace lsolesen\pel;
49
+
50
+ class PelEntryException extends PelException
51
+ {
52
+
53
+ /**
54
+ * The IFD type (if known).
55
+ *
56
+ * @var int
57
+ */
58
+ protected $type;
59
+
60
+ /**
61
+ * The tag of the entry (if known).
62
+ *
63
+ * @var int
64
+ */
65
+ protected $tag;
66
+
67
+ /**
68
+ * Get the IFD type associated with the exception.
69
+ *
70
+ * @return int one of {@link PelIfd::IFD0}, {@link PelIfd::IFD1},
71
+ * {@link PelIfd::EXIF}, {@link PelIfd::GPS}, or {@link
72
+ * PelIfd::INTEROPERABILITY}. If no type is set, null is returned.
73
+ */
74
+ public function getIfdType()
75
+ {
76
+ return $this->type;
77
+ }
78
+
79
+ /**
80
+ * Get the tag associated with the exception.
81
+ *
82
+ * @return int the tag. If no tag is set, null is returned.
83
+ */
84
+ public function getTag()
85
+ {
86
+ return $this->tag;
87
+ }
88
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryLong.php ADDED
@@ -0,0 +1,115 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+ namespace lsolesen\pel;
26
+
27
+ /**
28
+ * Classes used to hold longs, both signed and unsigned.
29
+ *
30
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
31
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
32
+ * License (GPL)
33
+ * @package PEL
34
+ */
35
+
36
+ /**
37
+ * Class for holding unsigned longs.
38
+ *
39
+ * This class can hold longs, either just a single long or an array of
40
+ * longs. The class will be used to manipulate any of the Exif tags
41
+ * which can have format {@link PelFormat::LONG} like in this
42
+ * example:
43
+ * <code>
44
+ * $w = $ifd->getEntry(PelTag::EXIF_IMAGE_WIDTH);
45
+ * $w->setValue($w->getValue() / 2);
46
+ * $h = $ifd->getEntry(PelTag::EXIF_IMAGE_HEIGHT);
47
+ * $h->setValue($h->getValue() / 2);
48
+ * </code>
49
+ * Here the width and height is updated to 50% of their original
50
+ * values.
51
+ *
52
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
53
+ * @package PEL
54
+ */
55
+ class PelEntryLong extends PelEntryNumber
56
+ {
57
+
58
+ /**
59
+ * Make a new entry that can hold an unsigned long.
60
+ *
61
+ * The method accept its arguments in two forms: several integer
62
+ * arguments or a single array argument. The {@link getValue}
63
+ * method will always return an array except for when a single
64
+ * integer argument is given here, or when an array with just a
65
+ * single integer is given.
66
+ *
67
+ * This means that one can conveniently use objects like this:
68
+ * <code>
69
+ * $a = new PelEntryLong(PelTag::EXIF_IMAGE_WIDTH, 123456);
70
+ * $b = $a->getValue() - 654321;
71
+ * </code>
72
+ * where the call to {@link getValue} will return an integer instead
73
+ * of an array with one integer element, which would then have to be
74
+ * extracted.
75
+ *
76
+ * @param int $tag
77
+ * the tag which this entry represents. This
78
+ * should be one of the constants defined in {@link PelTag},
79
+ * e.g., {@link PelTag::IMAGE_WIDTH}, or any other tag which can
80
+ * have format {@link PelFormat::LONG}.
81
+ * @param int $value...
82
+ * the long(s) that this entry will
83
+ * represent or an array of longs. The argument passed must obey
84
+ * the same rules as the argument to {@link setValue}, namely that
85
+ * it should be within range of an unsigned long (32 bit), that is
86
+ * between 0 and 4294967295 (inclusive). If not, then a {@link
87
+ * PelExifOverflowException} will be thrown.
88
+ */
89
+ public function __construct($tag, $value = null)
90
+ {
91
+ $this->tag = $tag;
92
+ $this->min = 0;
93
+ $this->max = 4294967295;
94
+ $this->format = PelFormat::LONG;
95
+
96
+ $value = func_get_args();
97
+ array_shift($value);
98
+ $this->setValueArray($value);
99
+ }
100
+
101
+ /**
102
+ * Convert a number into bytes.
103
+ *
104
+ * @param int $number
105
+ * the number that should be converted.
106
+ * @param boolean $order
107
+ * one of {@link PelConvert::LITTLE_ENDIAN} and
108
+ * {@link PelConvert::BIG_ENDIAN}, specifying the target byte order.
109
+ * @return string bytes representing the number given.
110
+ */
111
+ public function numberToBytes($number, $order)
112
+ {
113
+ return PelConvert::longToBytes($number, $order);
114
+ }
115
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryNumber.php ADDED
@@ -0,0 +1,280 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Abstract class for numbers.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for holding numbers.
37
+ *
38
+ * This class can hold numbers, with range checks.
39
+ *
40
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
41
+ * @package PEL
42
+ */
43
+ namespace lsolesen\pel;
44
+
45
+ abstract class PelEntryNumber extends PelEntry
46
+ {
47
+
48
+ /**
49
+ * The value held by this entry.
50
+ *
51
+ * @var array
52
+ */
53
+ protected $value = [];
54
+
55
+ /**
56
+ * The minimum allowed value.
57
+ *
58
+ * Any attempt to change the value below this variable will result
59
+ * in a {@link PelOverflowException} being thrown.
60
+ *
61
+ * @var int
62
+ */
63
+ protected $min;
64
+
65
+ /**
66
+ * The maximum allowed value.
67
+ *
68
+ * Any attempt to change the value over this variable will result in
69
+ * a {@link PelOverflowException} being thrown.
70
+ *
71
+ * @var int
72
+ */
73
+ protected $max;
74
+
75
+ /**
76
+ * The dimension of the number held.
77
+ *
78
+ * Normal numbers have a dimension of one, pairs have a dimension of
79
+ * two, etc.
80
+ *
81
+ * @var int
82
+ */
83
+ protected $dimension = 1;
84
+
85
+ /**
86
+ * Change the value.
87
+ *
88
+ * This method can change both the number of components and the
89
+ * value of the components. Range checks will be made on the new
90
+ * value, and a {@link PelOverflowException} will be thrown if the
91
+ * value is found to be outside the legal range.
92
+ *
93
+ * The method accept several number arguments. The {@link getValue}
94
+ * method will always return an array except for when a single
95
+ * number is given here.
96
+ *
97
+ * @param int|array $value...
98
+ * the new value(s). This can be zero or
99
+ * more numbers, that is, either integers or arrays. The input will
100
+ * be checked to ensure that the numbers are within the valid range.
101
+ * If not, then a {@link PelOverflowException} will be thrown.
102
+ * @see PelEntryNumber::getValue
103
+ */
104
+ public function setValue($value)
105
+ {
106
+ $value = func_get_args();
107
+ $this->setValueArray($value);
108
+ }
109
+
110
+ /**
111
+ * Change the value.
112
+ *
113
+ * This method can change both the number of components and the
114
+ * value of the components. Range checks will be made on the new
115
+ * value, and a {@link PelOverflowException} will be thrown if the
116
+ * value is found to be outside the legal range.
117
+ *
118
+ * @param array $values
119
+ * the new values. The array must contain the new
120
+ * numbers.
121
+ * @see PelEntryNumber::getValue
122
+ */
123
+ public function setValueArray($values)
124
+ {
125
+ foreach ($values as $v) {
126
+ $this->validateNumber($v);
127
+ }
128
+
129
+ $this->components = count($values);
130
+ $this->value = $values;
131
+ }
132
+
133
+ /**
134
+ * Return the numeric value held.
135
+ *
136
+ * @return int|array this will either be a single number if there is
137
+ * only one component, or an array of numbers otherwise.
138
+ */
139
+ public function getValue()
140
+ {
141
+ if ($this->components == 1) {
142
+ return $this->value[0];
143
+ } else {
144
+ return $this->value;
145
+ }
146
+ }
147
+
148
+ /**
149
+ * Validate a number.
150
+ *
151
+ * This method will check that the number given is within the range
152
+ * given my {@link getMin()} and {@link getMax()}, inclusive. If
153
+ * not, then a {@link PelOverflowException} is thrown.
154
+ *
155
+ * @param int|array $n
156
+ * the number in question.
157
+ * @return void nothing, but will throw a {@link
158
+ * PelOverflowException} if the number is found to be outside the
159
+ * legal range and {@link Pel::$strict} is true.
160
+ */
161
+ public function validateNumber($n)
162
+ {
163
+ if ($this->dimension == 1 || is_scalar($n)) {
164
+ if ($n < $this->min || $n > $this->max) {
165
+ Pel::maybeThrow(new PelOverflowException((int) $n, $this->min, $this->max));
166
+ }
167
+ } else {
168
+ for ($i = 0; $i < $this->dimension; $i ++) {
169
+ if (! isset($n[$i])) {
170
+ continue;
171
+ }
172
+ if ($n[$i] < $this->min || $n[$i] > $this->max) {
173
+ Pel::maybeThrow(new PelOverflowException($n[$i], $this->min, $this->max));
174
+ }
175
+ }
176
+ }
177
+ }
178
+
179
+ /**
180
+ * Add a number.
181
+ *
182
+ * This appends a number to the numbers already held by this entry,
183
+ * thereby increasing the number of components by one.
184
+ *
185
+ * @param int|array $n
186
+ * the number to be added.
187
+ */
188
+ public function addNumber($n)
189
+ {
190
+ $this->validateNumber($n);
191
+ $this->value[] = $n;
192
+ $this->components ++;
193
+ }
194
+
195
+ /**
196
+ * Convert a number into bytes.
197
+ *
198
+ * The concrete subclasses will have to implement this method so
199
+ * that the numbers represented can be turned into bytes.
200
+ *
201
+ * The method will be called once for each number held by the entry.
202
+ *
203
+ * @param int $number
204
+ * the number that should be converted.
205
+ * @param boolean $order
206
+ * one of {@link PelConvert::LITTLE_ENDIAN} and
207
+ * {@link PelConvert::BIG_ENDIAN}, specifying the target byte order.
208
+ * @return string bytes representing the number given.
209
+ */
210
+ abstract public function numberToBytes($number, $order);
211
+
212
+ /**
213
+ * Turn this entry into bytes.
214
+ *
215
+ * @param boolean $o
216
+ * the desired byte order, which must be either
217
+ * {@link PelConvert::LITTLE_ENDIAN} or {@link
218
+ * PelConvert::BIG_ENDIAN}.
219
+ * @return string bytes representing this entry.
220
+ */
221
+ public function getBytes($o)
222
+ {
223
+ $bytes = '';
224
+ for ($i = 0; $i < $this->components; $i ++) {
225
+ if ($this->dimension == 1) {
226
+ $bytes .= $this->numberToBytes($this->value[$i], $o);
227
+ } else {
228
+ for ($j = 0; $j < $this->dimension; $j ++) {
229
+ $bytes .= $this->numberToBytes($this->value[$i][$j], $o);
230
+ }
231
+ }
232
+ }
233
+ return $bytes;
234
+ }
235
+
236
+ /**
237
+ * Format a number.
238
+ *
239
+ * This method is called by {@link getText} to format numbers.
240
+ * Subclasses should override this method if they need more
241
+ * sophisticated behavior than the default, which is to just return
242
+ * the number as is.
243
+ *
244
+ * @param int $number
245
+ * the number which will be formatted.
246
+ * @param boolean $brief
247
+ * it could be that there is both a verbose and a
248
+ * brief formatting available, and this argument controls that.
249
+ * @return string the number formatted as a string suitable for
250
+ * display.
251
+ */
252
+ public function formatNumber($number, $brief = false)
253
+ {
254
+ return $number;
255
+ }
256
+
257
+ /**
258
+ * Get the numeric value of this entry as text.
259
+ *
260
+ * @param boolean $brief
261
+ * use brief output? The numbers will be separated
262
+ * by a single space if brief output is requested, otherwise a space
263
+ * and a comma will be used.
264
+ * @return string the numbers(s) held by this entry.
265
+ */
266
+ public function getText($brief = false)
267
+ {
268
+ if ($this->components == 0) {
269
+ return '';
270
+ }
271
+
272
+ $str = $this->formatNumber($this->value[0]);
273
+ for ($i = 1; $i < $this->components; $i ++) {
274
+ $str .= ($brief ? ' ' : ', ');
275
+ $str .= $this->formatNumber($this->value[$i]);
276
+ }
277
+
278
+ return $str;
279
+ }
280
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryRational.php ADDED
@@ -0,0 +1,174 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to manipulate rational numbers.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for holding unsigned rational numbers.
37
+ *
38
+ * This class can hold rational numbers, consisting of a numerator and
39
+ * denominator both of which are of type unsigned long. Each rational
40
+ * is represented by an array with just two entries: the numerator and
41
+ * the denominator, in that order.
42
+ *
43
+ * The class can hold either just a single rational or an array of
44
+ * rationals. The class will be used to manipulate any of the Exif
45
+ * tags which can have format {@link PelFormat::RATIONAL} like in this
46
+ * example:
47
+ *
48
+ * <code>
49
+ * $resolution = $ifd->getEntry(PelTag::X_RESOLUTION);
50
+ * $resolution->setValue([1, 300]);
51
+ * </code>
52
+ *
53
+ * Here the x-resolution is adjusted to 1/300, which will be 300 DPI,
54
+ * unless the {@link PelTag::RESOLUTION_UNIT resolution unit} is set
55
+ * to something different than 2 which means inches.
56
+ *
57
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
58
+ * @package PEL
59
+ */
60
+ namespace lsolesen\pel;
61
+
62
+ class PelEntryRational extends PelEntryLong
63
+ {
64
+
65
+ /**
66
+ * Make a new entry that can hold an unsigned rational.
67
+ *
68
+ * @param int $tag
69
+ * the tag which this entry represents. This should
70
+ * be one of the constants defined in {@link PelTag}, e.g., {@link
71
+ * PelTag::X_RESOLUTION}, or any other tag which can have format
72
+ * {@link PelFormat::RATIONAL}.
73
+ * @param array ...$value
74
+ * the rational(s) that this entry will
75
+ * represent. The arguments passed must obey the same rules as the
76
+ * argument to {@link setValue}, namely that each argument should be
77
+ * an array with two entries, both of which must be within range of
78
+ * an unsigned long (32 bit), that is between 0 and 4294967295
79
+ * (inclusive). If not, then a {@link PelOverflowException} will be
80
+ * thrown.
81
+ * @throws PelOverflowException
82
+ */
83
+ public function __construct($tag, ...$value)
84
+ {
85
+ $this->tag = $tag;
86
+ $this->format = PelFormat::RATIONAL;
87
+ $this->dimension = 2;
88
+ $this->min = 0;
89
+ $this->max = 4294967295;
90
+
91
+ $this->setValueArray($value);
92
+ }
93
+
94
+ /**
95
+ * Format a rational number.
96
+ *
97
+ * The rational will be returned as a string with a slash '/'
98
+ * between the numerator and denominator.
99
+ *
100
+ * @param array $number
101
+ * the rational which will be formatted.
102
+ * @param boolean $brief
103
+ * not used.
104
+ * @return string the rational formatted as a string suitable for
105
+ * display.
106
+ */
107
+ public function formatNumber($number, $brief = false)
108
+ {
109
+ return $number[0] . '/' . $number[1];
110
+ }
111
+
112
+ /**
113
+ * Get the value of an entry as text.
114
+ *
115
+ * The value will be returned in a format suitable for presentation,
116
+ * e.g., rationals will be returned as 'x/y', ASCII strings will be
117
+ * returned as themselves etc.
118
+ *
119
+ * @param boolean $brief
120
+ * some values can be returned in a long or more
121
+ * brief form, and this parameter controls that.
122
+ * @return boolean|string the value as text.
123
+ */
124
+ public function getText($brief = false)
125
+ {
126
+ if (isset($this->value[0])) {
127
+ $v = $this->value[0];
128
+ } else {
129
+ // TODO: Not sure, if this is the correct path; maybe throw an exception?
130
+ return '';
131
+ }
132
+
133
+ switch ($this->tag) {
134
+ case PelTag::FNUMBER:
135
+ // CC (e->components, 1, v);
136
+ return Pel::fmt('f/%.01f', $v[0] / $v[1]);
137
+
138
+ case PelTag::APERTURE_VALUE:
139
+ // CC (e->components, 1, v);
140
+ // if (!v_rat.denominator) return (NULL);
141
+ return Pel::fmt('f/%.01f', pow(2, $v[0] / $v[1] / 2));
142
+
143
+ case PelTag::FOCAL_LENGTH:
144
+ // CC (e->components, 1, v);
145
+ // if (!v_rat.denominator) return (NULL);
146
+ return Pel::fmt('%.1f mm', $v[0] / $v[1]);
147
+
148
+ case PelTag::SUBJECT_DISTANCE:
149
+ // CC (e->components, 1, v);
150
+ // if (!v_rat.denominator) return (NULL);
151
+ return Pel::fmt('%.1f m', $v[0] / $v[1]);
152
+
153
+ case PelTag::EXPOSURE_TIME:
154
+ // CC (e->components, 1, v);
155
+ // if (!v_rat.denominator) return (NULL);
156
+ if ($v[0] / $v[1] < 1) {
157
+ return Pel::fmt('1/%d sec.', $v[1] / $v[0]);
158
+ } else {
159
+ return Pel::fmt('%d sec.', $v[0] / $v[1]);
160
+ }
161
+ break;
162
+ case PelTag::GPS_LATITUDE:
163
+ case PelTag::GPS_LONGITUDE:
164
+ $degrees = $v[0] / $v[1];
165
+ $minutes = $this->value[1][0] / $this->value[1][1];
166
+ $seconds = $this->value[2][0] / $this->value[2][1];
167
+
168
+ return sprintf('%s° %s\' %s" (%.2f°)', $degrees, $minutes, $seconds, $degrees + $minutes / 60 + $seconds / 3600);
169
+
170
+ default:
171
+ return parent::getText($brief);
172
+ }
173
+ }
174
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySByte.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold bytes, both signed and unsigned.
28
+ * The {@link
29
+ * PelEntryWindowsString} class is used to manipulate strings in the
30
+ * format Windows XP needs.
31
+ *
32
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
33
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
34
+ * License (GPL)
35
+ * @package PEL
36
+ */
37
+
38
+ /**
39
+ * Class for holding signed bytes.
40
+ *
41
+ * This class can hold bytes, either just a single byte or an array of
42
+ * bytes. The class will be used to manipulate any of the Exif tags
43
+ * which has format {@link PelFormat::BYTE}.
44
+ *
45
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
46
+ * @package PEL
47
+ */
48
+ namespace lsolesen\pel;
49
+
50
+ class PelEntrySByte extends PelEntryNumber
51
+ {
52
+
53
+ /**
54
+ * Make a new entry that can hold a signed byte.
55
+ *
56
+ * The method accept several integer arguments. The {@link getValue}
57
+ * method will always return an array except for when a single
58
+ * integer argument is given here.
59
+ *
60
+ * @param int $tag
61
+ * the tag which this entry represents. This
62
+ * should be one of the constants defined in {@link PelTag}
63
+ * which has format {@link PelFormat::BYTE}.
64
+ * @param int $value...
65
+ * the byte(s) that this entry will represent.
66
+ * The argument passed must obey the same rules as the argument to
67
+ * {@link setValue}, namely that it should be within range of a
68
+ * signed byte, that is between -128 and 127 (inclusive). If not,
69
+ * then a {@link PelOverflowException} will be thrown.
70
+ */
71
+ public function __construct($tag, $value = null)
72
+ {
73
+ $this->tag = $tag;
74
+ $this->min = - 128;
75
+ $this->max = 127;
76
+ $this->format = PelFormat::SBYTE;
77
+
78
+ $value = func_get_args();
79
+ array_shift($value);
80
+ $this->setValueArray($value);
81
+ }
82
+
83
+ /**
84
+ * Convert a number into bytes.
85
+ *
86
+ * @param int $number
87
+ * the number that should be converted.
88
+ * @param boolean $order
89
+ * one of {@link PelConvert::LITTLE_ENDIAN} and
90
+ * {@link PelConvert::BIG_ENDIAN}, specifying the target byte order.
91
+ * @return string bytes representing the number given.
92
+ */
93
+ public function numberToBytes($number, $order)
94
+ {
95
+ return chr($number);
96
+ }
97
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySLong.php ADDED
@@ -0,0 +1,97 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold longs, both signed and unsigned.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for holding signed longs.
37
+ *
38
+ * This class can hold longs, either just a single long or an array of
39
+ * longs. The class will be used to manipulate any of the Exif tags
40
+ * which can have format {@link PelFormat::SLONG}.
41
+ *
42
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
43
+ * @package PEL
44
+ */
45
+ namespace lsolesen\pel;
46
+
47
+ class PelEntrySLong extends PelEntryNumber
48
+ {
49
+
50
+ /**
51
+ * Make a new entry that can hold a signed long.
52
+ *
53
+ * The method accept its arguments in two forms: several integer
54
+ * arguments or a single array argument. The {@link getValue}
55
+ * method will always return an array except for when a single
56
+ * integer argument is given here, or when an array with just a
57
+ * single integer is given.
58
+ *
59
+ * @param int $tag
60
+ * the tag which this entry represents. This
61
+ * should be one of the constants defined in {@link PelTag}
62
+ * which have format {@link PelFormat::SLONG}.
63
+ * @param int $value
64
+ * the long(s) that this entry will represent
65
+ * or an array of longs. The argument passed must obey the same
66
+ * rules as the argument to {@link setValue}, namely that it should
67
+ * be within range of a signed long (32 bit), that is between
68
+ * -2147483648 and 2147483647 (inclusive). If not, then a {@link
69
+ * PelOverflowException} will be thrown.
70
+ */
71
+ public function __construct($tag, $value = null)
72
+ {
73
+ $this->tag = $tag;
74
+ $this->min = - 2147483648;
75
+ $this->max = 2147483647;
76
+ $this->format = PelFormat::SLONG;
77
+
78
+ $value = func_get_args();
79
+ array_shift($value);
80
+ $this->setValueArray($value);
81
+ }
82
+
83
+ /**
84
+ * Convert a number into bytes.
85
+ *
86
+ * @param int $number
87
+ * the number that should be converted.
88
+ * @param boolean $order
89
+ * one of {@link PelConvert::LITTLE_ENDIAN} and
90
+ * {@link PelConvert::BIG_ENDIAN}, specifying the target byte order.
91
+ * @return string bytes representing the number given.
92
+ */
93
+ public function numberToBytes($number, $order)
94
+ {
95
+ return PelConvert::sLongToBytes($number, $order);
96
+ }
97
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySRational.php ADDED
@@ -0,0 +1,150 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to manipulate rational numbers.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for holding signed rational numbers.
37
+ *
38
+ * This class can hold rational numbers, consisting of a numerator and
39
+ * denominator both of which are of type unsigned long. Each rational
40
+ * is represented by an array with just two entries: the numerator and
41
+ * the denominator, in that order.
42
+ *
43
+ * The class can hold either just a single rational or an array of
44
+ * rationals. The class will be used to manipulate any of the Exif
45
+ * tags which can have format {@link PelFormat::SRATIONAL}.
46
+ *
47
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
48
+ * @package PEL
49
+ */
50
+ namespace lsolesen\pel;
51
+
52
+ class PelEntrySRational extends PelEntrySLong
53
+ {
54
+
55
+ /**
56
+ * Make a new entry that can hold a signed rational.
57
+ *
58
+ * @param int $tag
59
+ * the tag which this entry represents. This should
60
+ * be one of the constants defined in {@link PelTag}, e.g., {@link
61
+ * PelTag::SHUTTER_SPEED_VALUE}, or any other tag which can have
62
+ * format {@link PelFormat::SRATIONAL}.
63
+ * @param array $value
64
+ * the rational(s) that this entry will
65
+ * represent. The arguments passed must obey the same rules as the
66
+ * argument to {@link setValue}, namely that each argument should be
67
+ * an array with two entries, both of which must be within range of
68
+ * a signed long (32 bit), that is between -2147483648 and
69
+ * 2147483647 (inclusive). If not, then a {@link
70
+ * PelOverflowException} will be thrown.
71
+ */
72
+ public function __construct($tag, $value = null)
73
+ {
74
+ $this->tag = $tag;
75
+ $this->format = PelFormat::SRATIONAL;
76
+ $this->dimension = 2;
77
+ $this->min = - 2147483648;
78
+ $this->max = 2147483647;
79
+
80
+ $value = func_get_args();
81
+ array_shift($value);
82
+ $this->setValueArray($value);
83
+ }
84
+
85
+ /**
86
+ * Format a rational number.
87
+ *
88
+ * The rational will be returned as a string with a slash '/'
89
+ * between the numerator and denominator. Care is taken to display
90
+ * '-1/2' instead of the ugly but mathematically equivalent '1/-2'.
91
+ *
92
+ * @param array $number
93
+ * the rational which will be formatted.
94
+ * @param boolean $brief
95
+ * not used.
96
+ * @return string the rational formatted as a string suitable for
97
+ * display.
98
+ */
99
+ public function formatNumber($number, $brief = false)
100
+ {
101
+ if ($number[1] < 0) {
102
+ /* Turn output like 1/-2 into -1/2. */
103
+ return (- $number[0]) . '/' . (- $number[1]);
104
+ } else {
105
+ return $number[0] . '/' . $number[1];
106
+ }
107
+ }
108
+
109
+ /**
110
+ * Get the value of an entry as text.
111
+ *
112
+ * The value will be returned in a format suitable for presentation,
113
+ * e.g., rationals will be returned as 'x/y', ASCII strings will be
114
+ * returned as themselves etc.
115
+ *
116
+ * @param boolean $brief
117
+ * some values can be returned in a long or more
118
+ * brief form, and this parameter controls that.
119
+ * @return string the value as text.
120
+ */
121
+ public function getText($brief = false)
122
+ {
123
+ if (isset($this->value[0])) {
124
+ $v = $this->value[0];
125
+ }
126
+
127
+ switch ($this->tag) {
128
+ case PelTag::SHUTTER_SPEED_VALUE:
129
+ // CC (e->components, 1, v);
130
+ // if (!v_srat.denominator) return (NULL);
131
+ return Pel::fmt('%.0f/%.0f sec. (APEX: %d)', $v[0], $v[1], pow(sqrt(2), $v[0] / $v[1]));
132
+
133
+ case PelTag::BRIGHTNESS_VALUE:
134
+ // CC (e->components, 1, v);
135
+ //
136
+ // TODO: figure out the APEX thing, or remove this so that it is
137
+ // handled by the default clause at the bottom.
138
+ return sprintf('%d/%d', $v[0], $v[1]);
139
+ // FIXME: How do I calculate the APEX value?
140
+
141
+ case PelTag::EXPOSURE_BIAS_VALUE:
142
+ // CC (e->components, 1, v);
143
+ // if (!v_srat.denominator) return (NULL);
144
+ return sprintf('%s%.01f', $v[0] * $v[1] > 0 ? '+' : '', $v[0] / $v[1]);
145
+
146
+ default:
147
+ return parent::getText($brief);
148
+ }
149
+ }
150
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntrySShort.php ADDED
@@ -0,0 +1,806 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold shorts, both signed and unsigned.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for holding signed shorts.
37
+ *
38
+ * This class can hold shorts, either just a single short or an array
39
+ * of shorts. The class will be used to manipulate any of the Exif
40
+ * tags which has format {@link PelFormat::SSHORT}.
41
+ *
42
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
43
+ * @package PEL
44
+ */
45
+ namespace lsolesen\pel;
46
+
47
+ class PelEntrySShort extends PelEntryNumber
48
+ {
49
+
50
+ private const TRANSLATIONS = [
51
+ PelIfd::CANON_FILE_INFO => [
52
+ PelTag::CANON_FI_BRACKET_MODE => [
53
+ 0 => 'Off',
54
+ 1 => 'AEB',
55
+ 2 => 'FEB',
56
+ 3 => 'ISO',
57
+ 4 => 'WB'
58
+ ],
59
+ PelTag::CANON_FI_RAW_JPG_QUALITY => [
60
+ 1 => 'Economy',
61
+ 2 => 'Normal',
62
+ 3 => 'Fine',
63
+ 4 => 'RAW',
64
+ 5 => 'Superfine',
65
+ 130 => 'Normal Movie',
66
+ 131 => 'Movie (2)'
67
+ ],
68
+ PelTag::CANON_FI_RAW_JPG_SIZE => [
69
+ 0 => 'Large',
70
+ 1 => 'Medium',
71
+ 2 => 'Small',
72
+ 5 => 'Medium 1',
73
+ 6 => 'Medium 2',
74
+ 7 => 'Medium 3',
75
+ 8 => 'Postcard',
76
+ 9 => 'Widescreen',
77
+ 10 => 'Medium Widescreen',
78
+ 14 => 'Small 1',
79
+ 15 => 'Small 2',
80
+ 16 => 'Small 3',
81
+ 128 => '640x480 Movie',
82
+ 129 => 'Medium Movie',
83
+ 130 => 'Small Movie',
84
+ 137 => '1280x720 Movie',
85
+ 142 => '1920x1080 Movie'
86
+ ],
87
+ PelTag::CANON_FI_NOISE_REDUCTION => [
88
+ 0 => 'Off',
89
+ 1 => 'On (1D)',
90
+ 3 => 'On',
91
+ 4 => 'Auto'
92
+ ],
93
+ PelTag::CANON_FI_WB_BRACKET_MODE => [
94
+ 0 => 'Off',
95
+ 1 => 'On (shift AB)',
96
+ 2 => 'On (shift GM)'
97
+ ],
98
+ PelTag::CANON_FI_FILTER_EFFECT => [
99
+ 0 => 'None',
100
+ 1 => 'Yellow',
101
+ 2 => 'Orange',
102
+ 3 => 'Red',
103
+ 4 => 'Green'
104
+ ],
105
+ PelTag::CANON_FI_TONING_EFFECT => [
106
+ 0 => 'None',
107
+ 1 => 'Sepia',
108
+ 2 => 'Blue',
109
+ 3 => 'Purple',
110
+ 4 => 'Green'
111
+ ],
112
+ PelTag::CANON_FI_LIVE_VIEW_SHOOTING => [
113
+ 0 => 'Off',
114
+ 1 => 'On'
115
+ ],
116
+ PelTag::CANON_FI_FLASH_EXPOSURE_LOCK => [
117
+ 0 => 'Off',
118
+ 1 => 'On'
119
+ ]
120
+ ],
121
+ PelIfd::CANON_CAMERA_SETTINGS => [
122
+ PelTag::CANON_CS_MACRO => [
123
+ 1 => 'Macro',
124
+ 2 => 'Normal'
125
+ ],
126
+ PelTag::CANON_CS_QUALITY => [
127
+ 1 => 'Economy',
128
+ 2 => 'Normal',
129
+ 3 => 'Fine',
130
+ 4 => 'RAW',
131
+ 5 => 'Superfine',
132
+ 130 => 'Normal Movie',
133
+ 131 => 'Movie (2)'
134
+ ],
135
+ PelTag::CANON_CS_FLASH_MODE => [
136
+ 0 => 'Off',
137
+ 1 => 'Auto',
138
+ 2 => 'On',
139
+ 3 => 'Red-eye reduction',
140
+ 4 => 'Slow-sync',
141
+ 5 => 'Red-eye reduction (Auto)',
142
+ 6 => 'Red-eye reduction (On)',
143
+ 16 => 'External flash'
144
+ ],
145
+ PelTag::CANON_CS_DRIVE_MODE => [
146
+ 0 => 'Single',
147
+ 1 => 'Continuous',
148
+ 2 => 'Movie',
149
+ 3 => 'Continuous, Speed Priority',
150
+ 4 => 'Continuous, Low',
151
+ 5 => 'Continuous, High',
152
+ 6 => 'Silent Single',
153
+ 9 => 'Single, Silent',
154
+ 10 => 'Continuous, Silent'
155
+ ],
156
+ PelTag::CANON_CS_FOCUS_MODE => [
157
+ 0 => 'One-shot AF',
158
+ 1 => 'AI Servo AF',
159
+ 2 => 'AI Focus AF',
160
+ 3 => 'Manual Focus (3)',
161
+ 4 => 'Single',
162
+ 5 => 'Continuous',
163
+ 6 => 'Manual Focus (6)',
164
+ 16 => 'Pan Focus',
165
+ 256 => 'AF + MF',
166
+ 512 => 'Movie Snap Focus',
167
+ 519 => 'Movie Servo AF'
168
+ ],
169
+ PelTag::CANON_CS_RECORD_MODE => [
170
+ 1 => 'JPEG',
171
+ 2 => 'CRW+THM',
172
+ 3 => 'AVI+THM',
173
+ 4 => 'TIF',
174
+ 5 => 'TIF+JPEG',
175
+ 6 => 'CR2',
176
+ 7 => 'CR2+JPEG',
177
+ 9 => 'MOV',
178
+ 10 => 'MP4'
179
+ ],
180
+ PelTag::CANON_CS_IMAGE_SIZE => [
181
+ 0 => 'Large',
182
+ 1 => 'Medium',
183
+ 2 => 'Small',
184
+ 5 => 'Medium 1',
185
+ 6 => 'Medium 2',
186
+ 7 => 'Medium 3',
187
+ 8 => 'Postcard',
188
+ 9 => 'Widescreen',
189
+ 10 => 'Medium Widescreen',
190
+ 14 => 'Small 1',
191
+ 15 => 'Small 2',
192
+ 16 => 'Small 3',
193
+ 128 => '640x480 Movie',
194
+ 129 => 'Medium Movie',
195
+ 130 => 'Small Movie',
196
+ 137 => '1280x720 Movie',
197
+ 142 => '1920x1080 Movie'
198
+ ],
199
+ PelTag::CANON_CS_EASY_MODE => [
200
+ 0 => 'Full auto',
201
+ 1 => 'Manual',
202
+ 2 => 'Landscape',
203
+ 3 => 'Fast shutter',
204
+ 4 => 'Slow shutter',
205
+ 5 => 'Night',
206
+ 6 => 'Gray Scale',
207
+ 7 => 'Sepia',
208
+ 8 => 'Portrait',
209
+ 9 => 'Sports',
210
+ 10 => 'Macro',
211
+ 11 => 'Black & White',
212
+ 12 => 'Pan focus',
213
+ 13 => 'Vivid',
214
+ 14 => 'Neutral',
215
+ 15 => 'Flash Off',
216
+ 16 => 'Long Shutter',
217
+ 17 => 'Super Macro',
218
+ 18 => 'Foliage',
219
+ 19 => 'Indoor',
220
+ 20 => 'Fireworks',
221
+ 21 => 'Beach',
222
+ 22 => 'Underwater',
223
+ 23 => 'Snow',
224
+ 24 => 'Kids & Pets',
225
+ 25 => 'Night Snapshot',
226
+ 26 => 'Digital Macro',
227
+ 27 => 'My Colors',
228
+ 28 => 'Movie Snap',
229
+ 29 => 'Super Macro 2',
230
+ 30 => 'Color Accent',
231
+ 31 => 'Color Swap',
232
+ 32 => 'Aquarium',
233
+ 33 => 'ISO 3200',
234
+ 34 => 'ISO 6400',
235
+ 35 => 'Creative Light Effect',
236
+ 36 => 'Easy',
237
+ 37 => 'Quick Shot',
238
+ 38 => 'Creative Auto',
239
+ 39 => 'Zoom Blur',
240
+ 40 => 'Low Light',
241
+ 41 => 'Nostalgic',
242
+ 42 => 'Super Vivid',
243
+ 43 => 'Poster Effect',
244
+ 44 => 'Face Self-timer',
245
+ 45 => 'Smile',
246
+ 46 => 'Wink Self-timer',
247
+ 47 => 'Fisheye Effect',
248
+ 48 => 'Miniature Effect',
249
+ 49 => 'High-speed Burst',
250
+ 50 => 'Best Image Selection',
251
+ 51 => 'High Dynamic Range',
252
+ 52 => 'Handheld Night Scene',
253
+ 53 => 'Movie Digest',
254
+ 54 => 'Live View Control',
255
+ 55 => 'Discreet',
256
+ 56 => 'Blur Reduction',
257
+ 57 => 'Monochrome',
258
+ 58 => 'Toy Camera Effect',
259
+ 59 => 'Scene Intelligent Auto',
260
+ 60 => 'High-speed Burst HQ',
261
+ 61 => 'Smooth Skin',
262
+ 62 => 'Soft Focus',
263
+ 257 => 'Spotlight',
264
+ 258 => 'Night 2',
265
+ 259 => 'Night+',
266
+ 260 => 'Super Night',
267
+ 261 => 'Sunset',
268
+ 263 => 'Night Scene',
269
+ 264 => 'Surface',
270
+ 265 => 'Low Light 2'
271
+ ],
272
+ PelTag::CANON_CS_DIGITAL_ZOOM => [
273
+ 0 => 'None',
274
+ 1 => '2x',
275
+ 2 => '4x',
276
+ 3 => 'Other'
277
+ ],
278
+ PelTag::CANON_CS_CONTRAST => [
279
+ 0 => 'Normal'
280
+ ],
281
+ PelTag::CANON_CS_SATURATION => [
282
+ 0 => 'Normal'
283
+ ],
284
+ PelTag::CANON_CS_METERING_MODE => [
285
+ 0 => 'Default',
286
+ 1 => 'Spot',
287
+ 2 => 'Average',
288
+ 3 => 'Evaluative',
289
+ 4 => 'Partial',
290
+ 5 => 'Center-weighted average'
291
+ ],
292
+ PelTag::CANON_CS_FOCUS_TYPE => [
293
+ 0 => 'Manual',
294
+ 1 => 'Auto',
295
+ 2 => 'Not Known',
296
+ 3 => 'Macro',
297
+ 4 => 'Very Close',
298
+ 5 => 'Close',
299
+ 6 => 'Middle Range',
300
+ 7 => 'Far Range',
301
+ 8 => 'Pan Focus',
302
+ 9 => 'Super Macro',
303
+ 10 => 'Infinity'
304
+ ],
305
+ PelTag::CANON_CS_AF_POINT => [
306
+ 0x2005 => 'Manual AF point selection',
307
+ 0x3000 => 'None (MF)',
308
+ 0x3001 => 'Auto AF point selection',
309
+ 0x3002 => 'Right',
310
+ 0x3003 => 'Center',
311
+ 0x3004 => 'Left',
312
+ 0x4001 => 'Auto AF point selection',
313
+ 0x4006 => 'Face Detect'
314
+ ],
315
+ PelTag::CANON_CS_EXPOSURE_PROGRAM => [
316
+ 0 => 'Easy',
317
+ 1 => 'Program AE',
318
+ 2 => 'Shutter speed priority AE',
319
+ 3 => 'Aperture-priority AE',
320
+ 4 => 'Manual',
321
+ 5 => 'Depth-of-field AE',
322
+ 6 => 'M-Dep',
323
+ 7 => 'Bulb'
324
+ ],
325
+ PelTag::CANON_CS_LENS_TYPE => [
326
+ // ATTENTION: Every index is multiplied by 100
327
+ 1000 => 'Canon EF 50mm f/1.8',
328
+ 2000 => 'Canon EF 28mm f/2.8',
329
+ 3000 => 'Canon EF 135mm f/2.8 Soft',
330
+ 4000 => 'Canon EF 35-105mm f/3.5-4.5 or Sigma Lens',
331
+ 4100 => 'Sigma UC Zoom 35-135mm f/4-5.6',
332
+ 5000 => 'Canon EF 35-70mm f/3.5-4.5',
333
+ 6000 => 'Canon EF 28-70mm f/3.5-4.5 or Sigma or Tokina Lens',
334
+ 6100 => 'Sigma 18-50mm f/3.5-5.6 DC',
335
+ 6200 => 'Sigma 18-125mm f/3.5-5.6 DC IF ASP',
336
+ 6300 => 'Tokina AF 193-2 19-35mm f/3.5-4.5',
337
+ 6400 => 'Sigma 28-80mm f/3.5-5.6 II Macro',
338
+ 7000 => 'Canon EF 100-300mm f/5.6L',
339
+ 8000 => 'Canon EF 100-300mm f/5.6 or Sigma or Tokina Lens',
340
+ 8100 => 'Sigma 70-300mm f/4-5.6 [APO] DG Macro',
341
+ 8200 => 'Tokina AT-X 242 AF 24-200mm f/3.5-5.6',
342
+ 9000 => 'Canon EF 70-210mm f/4',
343
+ 9100 => 'Sigma 55-200mm f/4-5.6 DC',
344
+ 1000 => 'Canon EF 50mm f/2.5 Macro or Sigma Lens',
345
+ 1010 => 'Sigma 50mm f/2.8 EX',
346
+ 1020 => 'Sigma 28mm f/1.8',
347
+ 1030 => 'Sigma 105mm f/2.8 Macro EX',
348
+ 1040 => 'Sigma 70mm f/2.8 EX DG Macro EF',
349
+ 1100 => 'Canon EF 35mm f/2',
350
+ 1300 => 'Canon EF 15mm f/2.8 Fisheye',
351
+ 1400 => 'Canon EF 50-200mm f/3.5-4.5L',
352
+ 1500 => 'Canon EF 50-200mm f/3.5-4.5',
353
+ 1600 => 'Canon EF 35-135mm f/3.5-4.5',
354
+ 1700 => 'Canon EF 35-70mm f/3.5-4.5A',
355
+ 1800 => 'Canon EF 28-70mm f/3.5-4.5',
356
+ 2000 => 'Canon EF 100-200mm f/4.5A',
357
+ 2100 => 'Canon EF 80-200mm f/2.8L',
358
+ 2200 => 'Canon EF 20-35mm f/2.8L or Tokina Lens',
359
+ 2210 => 'Tokina AT-X 280 AF Pro 28-80mm f/2.8 Aspherical',
360
+ 2300 => 'Canon EF 35-105mm f/3.5-4.5',
361
+ 2400 => 'Canon EF 35-80mm f/4-5.6 Power Zoom',
362
+ 2500 => 'Canon EF 35-80mm f/4-5.6 Power Zoom',
363
+ 2600 => 'Canon EF 100mm f/2.8 Macro or Other Lens',
364
+ 2610 => 'Cosina 100mm f/3.5 Macro AF',
365
+ 2620 => 'Tamron SP AF 90mm f/2.8 Di Macro',
366
+ 2630 => 'Tamron SP AF 180mm f/3.5 Di Macro',
367
+ 2640 => 'Carl Zeiss Planar T* 50mm f/1.4',
368
+ 2700 => 'Canon EF 35-80mm f/4-5.6',
369
+ 2800 => 'Canon EF 80-200mm f/4.5-5.6 or Tamron Lens',
370
+ 2810 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF',
371
+ 2820 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro',
372
+ 2830 => 'Tamron AF 70-300mm f/4-5.6 Di LD 1:2 Macro',
373
+ 2840 => 'Tamron AF Aspherical 28-200mm f/3.8-5.6',
374
+ 2900 => 'Canon EF 50mm f/1.8 II',
375
+ 3000 => 'Canon EF 35-105mm f/4.5-5.6',
376
+ 3100 => 'Canon EF 75-300mm f/4-5.6 or Tamron Lens',
377
+ 3110 => 'Tamron SP AF 300mm f/2.8 LD IF',
378
+ 3200 => 'Canon EF 24mm f/2.8 or Sigma Lens',
379
+ 3210 => 'Sigma 15mm f/2.8 EX Fisheye',
380
+ 3300 => 'Voigtlander or Carl Zeiss Lens',
381
+ 3310 => 'Voigtlander Ultron 40mm f/2 SLII Aspherical',
382
+ 3320 => 'Voigtlander Color Skopar 20mm f/3.5 SLII Aspherical',
383
+ 3330 => 'Voigtlander APO-Lanthar 90mm f/3.5 SLII Close Focus',
384
+ 3340 => 'Carl Zeiss Distagon T* 15mm f/2.8 ZE',
385
+ 3350 => 'Carl Zeiss Distagon T* 18mm f/3.5 ZE',
386
+ 3360 => 'Carl Zeiss Distagon T* 21mm f/2.8 ZE',
387
+ 3370 => 'Carl Zeiss Distagon T* 25mm f/2 ZE',
388
+ 3380 => 'Carl Zeiss Distagon T* 28mm f/2 ZE',
389
+ 3390 => 'Carl Zeiss Distagon T* 35mm f/2 ZE',
390
+ 3310 => 'Carl Zeiss Distagon T* 35mm f/1.4 ZE',
391
+ 3311 => 'Carl Zeiss Planar T* 50mm f/1.4 ZE',
392
+ 3312 => 'Carl Zeiss Makro-Planar T* 50mm f/2 ZE',
393
+ 3313 => 'Carl Zeiss Makro-Planar T* 100mm f/2 ZE',
394
+ 3314 => 'Carl Zeiss Apo-Sonnar T* 135mm f/2 ZE',
395
+ 3500 => 'Canon EF 35-80mm f/4-5.6',
396
+ 3600 => 'Canon EF 38-76mm f/4.5-5.6',
397
+ 3700 => 'Canon EF 35-80mm f/4-5.6 or Tamron Lens',
398
+ 3710 => 'Tamron 70-200mm f/2.8 Di LD IF Macro',
399
+ 3720 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20',
400
+ 3730 => 'Tamron SP AF 17-50mm f/2.8 XR Di II VC LD Aspherical [IF]',
401
+ 3740 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC LD Aspherical [IF] Macro',
402
+ 3800 => 'Canon EF 80-200mm f/4.5-5.6',
403
+ 3900 => 'Canon EF 75-300mm f/4-5.6',
404
+ 4000 => 'Canon EF 28-80mm f/3.5-5.6',
405
+ 4100 => 'Canon EF 28-90mm f/4-5.6',
406
+ 4200 => 'Canon EF 28-200mm f/3.5-5.6 or Tamron Lens',
407
+ 4210 => 'Tamron AF 28-300mm f/3.5-6.3 XR Di VC LD Aspherical [IF] Macro Model A20',
408
+ 4300 => 'Canon EF 28-105mm f/4-5.6',
409
+ 4400 => 'Canon EF 90-300mm f/4.5-5.6',
410
+ 4500 => 'Canon EF-S 18-55mm f/3.5-5.6 [II]',
411
+ 4600 => 'Canon EF 28-90mm f/4-5.6',
412
+ 4700 => 'Zeiss Milvus 35mm f/2 or 50mm f/2',
413
+ 4710 => 'Zeiss Milvus 50mm f/2 Makro',
414
+ 4800 => 'Canon EF-S 18-55mm f/3.5-5.6 IS',
415
+ 4900 => 'Canon EF-S 55-250mm f/4-5.6 IS',
416
+ 5000 => 'Canon EF-S 18-200mm f/3.5-5.6 IS',
417
+ 5100 => 'Canon EF-S 18-135mm f/3.5-5.6 IS',
418
+ 5200 => 'Canon EF-S 18-55mm f/3.5-5.6 IS II',
419
+ 5300 => 'Canon EF-S 18-55mm f/3.5-5.6 III',
420
+ 5400 => 'Canon EF-S 55-250mm f/4-5.6 IS II',
421
+ 6000 => 'Irix 11mm f/4',
422
+ 9400 => 'Canon TS-E 17mm f/4L',
423
+ 9500 => 'Canon TS-E 24.0mm f/3.5 L II',
424
+ 12400 => 'Canon MP-E 65mm f/2.8 1-5x Macro Photo',
425
+ 12500 => 'Canon TS-E 24mm f/3.5L',
426
+ 12600 => 'Canon TS-E 45mm f/2.8',
427
+ 12700 => 'Canon TS-E 90mm f/2.8',
428
+ 12900 => 'Canon EF 300mm f/2.8L',
429
+ 13000 => 'Canon EF 50mm f/1.0L',
430
+ 13100 => 'Canon EF 28-80mm f/2.8-4L or Sigma Lens',
431
+ 13110 => 'Sigma 8mm f/3.5 EX DG Circular Fisheye',
432
+ 13120 => 'Sigma 17-35mm f/2.8-4 EX DG Aspherical HSM',
433
+ 13130 => 'Sigma 17-70mm f/2.8-4.5 DC Macro',
434
+ 13140 => 'Sigma APO 50-150mm f/2.8 [II] EX DC HSM',
435
+ 13150 => 'Sigma APO 120-300mm f/2.8 EX DG HSM',
436
+ 13160 => 'Sigma 4.5mm f/2.8 EX DC HSM Circular Fisheye',
437
+ 13170 => 'Sigma 70-200mm f/2.8 APO EX HSM',
438
+ 13200 => 'Canon EF 1200mm f/5.6L',
439
+ 13400 => 'Canon EF 600mm f/4L IS',
440
+ 13500 => 'Canon EF 200mm f/1.8L',
441
+ 13600 => 'Canon EF 300mm f/2.8L',
442
+ 13700 => 'Canon EF 85mm f/1.2L or Sigma or Tamron Lens',
443
+ 13710 => 'Sigma 18-50mm f/2.8-4.5 DC OS HSM',
444
+ 13720 => 'Sigma 50-200mm f/4-5.6 DC OS HSM',
445
+ 13730 => 'Sigma 18-250mm f/3.5-6.3 DC OS HSM',
446
+ 13740 => 'Sigma 24-70mm f/2.8 IF EX DG HSM',
447
+ 13750 => 'Sigma 18-125mm f/3.8-5.6 DC OS HSM',
448
+ 13760 => 'Sigma 17-70mm f/2.8-4 DC Macro OS HSM | C',
449
+ 13770 => 'Sigma 17-50mm f/2.8 OS HSM',
450
+ 13780 => 'Sigma 18-200mm f/3.5-6.3 DC OS HSM [II]',
451
+ 13790 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD',
452
+ 13710 => 'Sigma 8-16mm f/4.5-5.6 DC HSM',
453
+ 13711 => 'Tamron SP 17-50mm f/2.8 XR Di II VC',
454
+ 13712 => 'Tamron SP 60mm f/2 Macro Di II',
455
+ 13713 => 'Sigma 10-20mm f/3.5 EX DC HSM',
456
+ 13714 => 'Tamron SP 24-70mm f/2.8 Di VC USD',
457
+ 13715 => 'Sigma 18-35mm f/1.8 DC HSM',
458
+ 13716 => 'Sigma 12-24mm f/4.5-5.6 DG HSM II',
459
+ 13800 => 'Canon EF 28-80mm f/2.8-4L',
460
+ 13900 => 'Canon EF 400mm f/2.8L',
461
+ 14000 => 'Canon EF 500mm f/4.5L',
462
+ 14100 => 'Canon EF 500mm f/4.5L',
463
+ 14200 => 'Canon EF 300mm f/2.8L IS',
464
+ 14300 => 'Canon EF 500mm f/4L IS or Sigma Lens',
465
+ 14310 => 'Sigma 17-70mm f/2.8-4 DC Macro OS HSM',
466
+ 14400 => 'Canon EF 35-135mm f/4-5.6 USM',
467
+ 14500 => 'Canon EF 100-300mm f/4.5-5.6 USM',
468
+ 14600 => 'Canon EF 70-210mm f/3.5-4.5 USM',
469
+ 14700 => 'Canon EF 35-135mm f/4-5.6 USM',
470
+ 14800 => 'Canon EF 28-80mm f/3.5-5.6 USM',
471
+ 14900 => 'Canon EF 100mm f/2 USM',
472
+ 15000 => 'Canon EF 14mm f/2.8L or Sigma Lens',
473
+ 15010 => 'Sigma 20mm EX f/1.8',
474
+ 15020 => 'Sigma 30mm f/1.4 DC HSM',
475
+ 15030 => 'Sigma 24mm f/1.8 DG Macro EX',
476
+ 15040 => 'Sigma 28mm f/1.8 DG Macro EX',
477
+ 15100 => 'Canon EF 200mm f/2.8L',
478
+ 15200 => 'Canon EF 300mm f/4L IS or Sigma Lens',
479
+ 15210 => 'Sigma 12-24mm f/4.5-5.6 EX DG ASPHERICAL HSM',
480
+ 15220 => 'Sigma 14mm f/2.8 EX Aspherical HSM',
481
+ 15230 => 'Sigma 10-20mm f/4-5.6',
482
+ 15240 => 'Sigma 100-300mm f/4',
483
+ 15300 => 'Canon EF 35-350mm f/3.5-5.6L or Sigma or Tamron Lens',
484
+ 15310 => 'Sigma 50-500mm f/4-6.3 APO HSM EX',
485
+ 15320 => 'Tamron AF 28-300mm f/3.5-6.3 XR LD Aspherical [IF] Macro',
486
+ 15330 => 'Tamron AF 18-200mm f/3.5-6.3 XR Di II LD Aspherical [IF] Macro Model A14',
487
+ 15340 => 'Tamron 18-250mm f/3.5-6.3 Di II LD Aspherical [IF] Macro',
488
+ 15400 => 'Canon EF 20mm f/2.8 USM or Zeiss Lens',
489
+ 15410 => 'Zeiss Milvus 21mm f/2.8',
490
+ 15500 => 'Canon EF 85mm f/1.8 USM',
491
+ 15600 => 'Canon EF 28-105mm f/3.5-4.5 USM or Tamron Lens',
492
+ 15610 => 'Tamron SP 70-300mm f/4.0-5.6 Di VC USD',
493
+ 15620 => 'Tamron SP AF 28-105mm f/2.8 LD Aspherical IF',
494
+ 16000 => 'Canon EF 20-35mm f/3.5-4.5 USM or Tamron or Tokina Lens',
495
+ 16010 => 'Tamron AF 19-35mm f/3.5-4.5',
496
+ 16020 => 'Tokina AT-X 124 AF Pro DX 12-24mm f/4',
497
+ 16030 => 'Tokina AT-X 107 AF DX 10-17mm f/3.5-4.5 Fisheye',
498
+ 16040 => 'Tokina AT-X 116 AF Pro DX 11-16mm f/2.8',
499
+ 16050 => 'Tokina AT-X 11-20 F2.8 PRO DX Aspherical 11-20mm f/2.8',
500
+ 16100 => 'Canon EF 28-70mm f/2.8L or Sigma or Tamron Lens',
501
+ 16110 => 'Sigma 24-70mm f/2.8 EX',
502
+ 16120 => 'Sigma 28-70mm f/2.8 EX',
503
+ 16130 => 'Sigma 24-60mm f/2.8 EX DG',
504
+ 16140 => 'Tamron AF 17-50mm f/2.8 Di-II LD Aspherical',
505
+ 16150 => 'Tamron 90mm f/2.8',
506
+ 16160 => 'Tamron SP AF 17-35mm f/2.8-4 Di LD Aspherical IF',
507
+ 16170 => 'Tamron SP AF 28-75mm f/2.8 XR Di LD Aspherical [IF] Macro',
508
+ 16200 => 'Canon EF 200mm f/2.8L',
509
+ 16300 => 'Canon EF 300mm f/4L',
510
+ 16400 => 'Canon EF 400mm f/5.6L',
511
+ 16500 => 'Canon EF 70-200mm f/2.8 L',
512
+ 16600 => 'Canon EF 70-200mm f/2.8 L + 1.4x',
513
+ 16700 => 'Canon EF 70-200mm f/2.8 L + 2x',
514
+ 16800 => 'Canon EF 28mm f/1.8 USM or Sigma Lens',
515
+ 16810 => 'Sigma 50-100mm f/1.8 DC HSM | A',
516
+ 16900 => 'Canon EF 17-35mm f/2.8L or Sigma Lens',
517
+ 16910 => 'Sigma 18-200mm f/3.5-6.3 DC OS',
518
+ 16920 => 'Sigma 15-30mm f/3.5-4.5 EX DG Aspherical',
519
+ 16930 => 'Sigma 18-50mm f/2.8 Macro',
520
+ 16940 => 'Sigma 50mm f/1.4 EX DG HSM',
521
+ 16950 => 'Sigma 85mm f/1.4 EX DG HSM',
522
+ 16960 => 'Sigma 30mm f/1.4 EX DC HSM',
523
+ 16970 => 'Sigma 35mm f/1.4 DG HSM',
524
+ 17000 => 'Canon EF 200mm f/2.8L II',
525
+ 17100 => 'Canon EF 300mm f/4L',
526
+ 17200 => 'Canon EF 400mm f/5.6L or Sigma Lens',
527
+ 17210 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | S',
528
+ 17300 => 'Canon EF 180mm Macro f/3.5L or Sigma Lens',
529
+ 17310 => 'Sigma 180mm EX HSM Macro f/3.5',
530
+ 17320 => 'Sigma APO Macro 150mm f/2.8 EX DG HSM',
531
+ 17400 => 'Canon EF 135mm f/2L or Other Lens',
532
+ 17410 => 'Sigma 70-200mm f/2.8 EX DG APO OS HSM',
533
+ 17420 => 'Sigma 50-500mm f/4.5-6.3 APO DG OS HSM',
534
+ 17430 => 'Sigma 150-500mm f/5-6.3 APO DG OS HSM',
535
+ 17440 => 'Zeiss Milvus 100mm f/2 Makro',
536
+ 17500 => 'Canon EF 400mm f/2.8L',
537
+ 17600 => 'Canon EF 24-85mm f/3.5-4.5 USM',
538
+ 17700 => 'Canon EF 300mm f/4L IS',
539
+ 17800 => 'Canon EF 28-135mm f/3.5-5.6 IS',
540
+ 17900 => 'Canon EF 24mm f/1.4L',
541
+ 18000 => 'Canon EF 35mm f/1.4L or Other Lens',
542
+ 18010 => 'Sigma 50mm f/1.4 DG HSM | A',
543
+ 18020 => 'Sigma 24mm f/1.4 DG HSM | A',
544
+ 18030 => 'Zeiss Milvus 50mm f/1.4',
545
+ 18040 => 'Zeiss Milvus 85mm f/1.4',
546
+ 18050 => 'Zeiss Otus 28mm f/1.4 ZE',
547
+ 18100 => 'Canon EF 100-400mm f/4.5-5.6L IS + 1.4x or Sigma Lens',
548
+ 18110 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | S + 1.4x',
549
+ 18200 => 'Canon EF 100-400mm f/4.5-5.6L IS + 2x or Sigma Lens',
550
+ 18210 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | S + 2x',
551
+ 18300 => 'Canon EF 100-400mm f/4.5-5.6L IS or Sigma Lens',
552
+ 18310 => 'Sigma 150mm f/2.8 EX DG OS HSM APO Macro',
553
+ 18320 => 'Sigma 105mm f/2.8 EX DG OS HSM Macro',
554
+ 18330 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro',
555
+ 18340 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | C',
556
+ 18350 => 'Sigma 150-600mm f/5-6.3 DG OS HSM | S',
557
+ 18360 => 'Sigma 100-400mm f/5-6.3 DG OS HSM',
558
+ 18400 => 'Canon EF 400mm f/2.8L + 2x',
559
+ 18500 => 'Canon EF 600mm f/4L IS',
560
+ 18600 => 'Canon EF 70-200mm f/4L',
561
+ 18700 => 'Canon EF 70-200mm f/4L + 1.4x',
562
+ 18800 => 'Canon EF 70-200mm f/4L + 2x',
563
+ 18900 => 'Canon EF 70-200mm f/4L + 2.8x',
564
+ 19000 => 'Canon EF 100mm f/2.8 Macro USM',
565
+ 19100 => 'Canon EF 400mm f/4 DO IS',
566
+ 19300 => 'Canon EF 35-80mm f/4-5.6 USM',
567
+ 19400 => 'Canon EF 80-200mm f/4.5-5.6 USM',
568
+ 19500 => 'Canon EF 35-105mm f/4.5-5.6 USM',
569
+ 19600 => 'Canon EF 75-300mm f/4-5.6 USM',
570
+ 19700 => 'Canon EF 75-300mm f/4-5.6 IS USM or Sigma Lens',
571
+ 19710 => 'Sigma 18-300mm f/3.5-6.3 DC Macro OS HS',
572
+ 19800 => 'Canon EF 50mm f/1.4 USM or Zeiss Lens',
573
+ 19810 => 'Zeiss Otus 55mm f/1.4 ZE',
574
+ 19820 => 'Zeiss Otus 85mm f/1.4 ZE',
575
+ 19900 => 'Canon EF 28-80mm f/3.5-5.6 USM',
576
+ 20000 => 'Canon EF 75-300mm f/4-5.6 USM',
577
+ 20100 => 'Canon EF 28-80mm f/3.5-5.6 USM',
578
+ 20200 => 'Canon EF 28-80mm f/3.5-5.6 USM IV',
579
+ 20800 => 'Canon EF 22-55mm f/4-5.6 USM',
580
+ 20900 => 'Canon EF 55-200mm f/4.5-5.6',
581
+ 21000 => 'Canon EF 28-90mm f/4-5.6 USM',
582
+ 21100 => 'Canon EF 28-200mm f/3.5-5.6 USM',
583
+ 21200 => 'Canon EF 28-105mm f/4-5.6 USM',
584
+ 21300 => 'Canon EF 90-300mm f/4.5-5.6 USM or Tamron Lens',
585
+ 21310 => 'Tamron SP 150-600mm f/5-6.3 Di VC USD',
586
+ 21320 => 'Tamron 16-300mm f/3.5-6.3 Di II VC PZD Macro',
587
+ 21330 => 'Tamron SP 35mm f/1.8 Di VC USD',
588
+ 21340 => 'Tamron SP 45mm f/1.8 Di VC USD',
589
+ 21400 => 'Canon EF-S 18-55mm f/3.5-5.6 USM',
590
+ 21500 => 'Canon EF 55-200mm f/4.5-5.6 II USM',
591
+ 21700 => 'Tamron AF 18-270mm f/3.5-6.3 Di II VC PZD',
592
+ 22400 => 'Canon EF 70-200mm f/2.8L IS',
593
+ 22500 => 'Canon EF 70-200mm f/2.8L IS + 1.4x',
594
+ 22600 => 'Canon EF 70-200mm f/2.8L IS + 2x',
595
+ 22700 => 'Canon EF 70-200mm f/2.8L IS + 2.8x',
596
+ 22800 => 'Canon EF 28-105mm f/3.5-4.5 USM',
597
+ 22900 => 'Canon EF 16-35mm f/2.8L',
598
+ 23000 => 'Canon EF 24-70mm f/2.8L',
599
+ 23100 => 'Canon EF 17-40mm f/4L',
600
+ 23200 => 'Canon EF 70-300mm f/4.5-5.6 DO IS USM',
601
+ 23300 => 'Canon EF 28-300mm f/3.5-5.6L IS',
602
+ 23400 => 'Canon EF-S 17-85mm f/4-5.6 IS USM or Tokina Lens',
603
+ 23410 => 'Tokina AT-X 12-28 PRO DX 12-28mm f/4',
604
+ 23500 => 'Canon EF-S 10-22mm f/3.5-4.5 USM',
605
+ 23600 => 'Canon EF-S 60mm f/2.8 Macro USM',
606
+ 23700 => 'Canon EF 24-105mm f/4L IS',
607
+ 23800 => 'Canon EF 70-300mm f/4-5.6 IS USM',
608
+ 23900 => 'Canon EF 85mm f/1.2L II',
609
+ 24000 => 'Canon EF-S 17-55mm f/2.8 IS USM',
610
+ 24100 => 'Canon EF 50mm f/1.2L',
611
+ 24200 => 'Canon EF 70-200mm f/4L IS',
612
+ 24300 => 'Canon EF 70-200mm f/4L IS + 1.4x',
613
+ 24400 => 'Canon EF 70-200mm f/4L IS + 2x',
614
+ 24500 => 'Canon EF 70-200mm f/4L IS + 2.8x',
615
+ 24600 => 'Canon EF 16-35mm f/2.8L II',
616
+ 24700 => 'Canon EF 14mm f/2.8L II USM',
617
+ 24800 => 'Canon EF 200mm f/2L IS or Sigma Lens',
618
+ 24810 => 'Sigma 24-35mm f/2 DG HSM | A',
619
+ 24900 => 'Canon EF 800mm f/5.6L IS',
620
+ 25000 => 'Canon EF 24mm f/1.4L II or Sigma Lens',
621
+ 25010 => 'Sigma 20mm f/1.4 DG HSM | A',
622
+ 25100 => 'Canon EF 70-200mm f/2.8L IS II USM',
623
+ 25200 => 'Canon EF 70-200mm f/2.8L IS II USM + 1.4x',
624
+ 25300 => 'Canon EF 70-200mm f/2.8L IS II USM + 2x',
625
+ 25400 => 'Canon EF 100mm f/2.8L Macro IS USM',
626
+ 25500 => 'Sigma 24-105mm f/4 DG OS HSM | A or Other Sigma Lens',
627
+ 25510 => 'Sigma 180mm f/2.8 EX DG OS HSM APO Macro',
628
+ 48800 => 'Canon EF-S 15-85mm f/3.5-5.6 IS USM',
629
+ 48900 => 'Canon EF 70-300mm f/4-5.6L IS USM',
630
+ 49000 => 'Canon EF 8-15mm f/4L Fisheye USM',
631
+ 49100 => 'Canon EF 300mm f/2.8L IS II USM or Tamron Lens',
632
+ 49110 => 'Tamron SP 70-200mm F/2.8 Di VC USD G2 (A025)',
633
+ 49120 => 'Tamron 18-400mm F/3.5-6.3 Di II VC HLD (B028)',
634
+ 49200 => 'Canon EF 400mm f/2.8L IS II USM',
635
+ 49300 => 'Canon EF 500mm f/4L IS II USM or EF 24-105mm f4L IS USM',
636
+ 49310 => 'Canon EF 24-105mm f/4L IS USM',
637
+ 49400 => 'Canon EF 600mm f/4.0L IS II USM',
638
+ 49500 => 'Canon EF 24-70mm f/2.8L II USM or Sigma Lens',
639
+ 49510 => 'Sigma 24-70mm F2.8 DG OS HSM | A',
640
+ 49600 => 'Canon EF 200-400mm f/4L IS USM',
641
+ 49900 => 'Canon EF 200-400mm f/4L IS USM + 1.4x',
642
+ 50200 => 'Canon EF 28mm f/2.8 IS USM',
643
+ 50300 => 'Canon EF 24mm f/2.8 IS USM',
644
+ 50400 => 'Canon EF 24-70mm f/4L IS USM',
645
+ 50500 => 'Canon EF 35mm f/2 IS USM',
646
+ 50600 => 'Canon EF 400mm f/4 DO IS II USM',
647
+ 50700 => 'Canon EF 16-35mm f/4L IS USM',
648
+ 50800 => 'Canon EF 11-24mm f/4L USM or Tamron Lens',
649
+ 50810 => 'Tamron 10-24mm f/3.5-4.5 Di II VC HLD',
650
+ 74700 => 'Canon EF 100-400mm f/4.5-5.6L IS II USM or Tamron Lens',
651
+ 74710 => 'Tamron SP 150-600mm F5-6.3 Di VC USD G2',
652
+ 74800 => 'Canon EF 100-400mm f/4.5-5.6L IS II USM + 1.4x',
653
+ 75000 => 'Canon EF 35mm f/1.4L II USM',
654
+ 75100 => 'Canon EF 16-35mm f/2.8L III USM',
655
+ 75200 => 'Canon EF 24-105mm f/4L IS II USM',
656
+ 414200 => 'Canon EF-S 18-135mm f/3.5-5.6 IS STM',
657
+ 414300 => 'Canon EF-M 18-55mm f/3.5-5.6 IS STM or Tamron Lens',
658
+ 414310 => 'Tamron 18-200mm F/3.5-6.3 Di III VC',
659
+ 414400 => 'Canon EF 40mm f/2.8 STM',
660
+ 414500 => 'Canon EF-M 22mm f/2 STM',
661
+ 414600 => 'Canon EF-S 18-55mm f/3.5-5.6 IS STM',
662
+ 414700 => 'Canon EF-M 11-22mm f/4-5.6 IS STM',
663
+ 414800 => 'Canon EF-S 55-250mm f/4-5.6 IS STM',
664
+ 414900 => 'Canon EF-M 55-200mm f/4.5-6.3 IS STM',
665
+ 415000 => 'Canon EF-S 10-18mm f/4.5-5.6 IS STM',
666
+ 415200 => 'Canon EF 24-105mm f/3.5-5.6 IS STM',
667
+ 415300 => 'Canon EF-M 15-45mm f/3.5-6.3 IS STM',
668
+ 415400 => 'Canon EF-S 24mm f/2.8 STM',
669
+ 415500 => 'Canon EF-M 28mm f/3.5 Macro IS STM',
670
+ 415600 => 'Canon EF 50mm f/1.8 STM',
671
+ 415700 => 'Canon EF-M 18-150mm 1:3.5-6.3 IS STM',
672
+ 415800 => 'Canon EF-S 18-55mm f/4-5.6 IS STM',
673
+ 416000 => 'Canon EF-S 35mm f/2.8 Macro IS STM',
674
+ 3691000 => 'Canon EF 70-300mm f/4-5.6 IS II USM',
675
+ 3691200 => 'Canon EF-S 18-135mm f/3.5-5.6 IS USM',
676
+ 6149400 => 'Canon CN-E 85mm T1.3 L F'
677
+ ],
678
+ PelTag::CANON_CS_FOCUS_CONTINUOUS => [
679
+ 0 => 'Single',
680
+ 1 => 'Continuous',
681
+ 8 => 'Manual'
682
+ ],
683
+ PelTag::CANON_CS_AE_SETTING => [
684
+ 0 => 'Normal AE',
685
+ 1 => 'Exposure Compensation',
686
+ 2 => 'AE Lock',
687
+ 3 => 'AE Lock + Exposure Comp.',
688
+ 4 => 'No AE'
689
+ ],
690
+ PelTag::CANON_CS_IMAGE_STABILIZATION => [
691
+ 0 => 'Off',
692
+ 1 => 'On',
693
+ 2 => 'Shoot Only',
694
+ 3 => 'Panning',
695
+ 4 => 'Dynamic',
696
+ 256 => 'Off (2)',
697
+ 257 => 'On (2)',
698
+ 258 => 'Shoot Only (2)',
699
+ 259 => 'Panning (2)',
700
+ 260 => 'Dynamic (2)'
701
+ ],
702
+ PelTag::CANON_CS_SPOT_METERING_MODE => [
703
+ 0 => 'Center',
704
+ 1 => 'AF Point'
705
+ ],
706
+ PelTag::CANON_CS_PHOTO_EFFECT => [
707
+ 0 => 'Off',
708
+ 1 => 'Vivid',
709
+ 2 => 'Neutral',
710
+ 3 => 'Smooth',
711
+ 4 => 'Sepia',
712
+ 5 => 'B&W',
713
+ 6 => 'Custom',
714
+ 100 => 'My Color Data'
715
+ ],
716
+ PelTag::CANON_CS_MANUAL_FLASH_OUTPUT => [
717
+ 0x500 => 'Full',
718
+ 0x502 => 'Medium',
719
+ 0x504 => 'Low'
720
+ ],
721
+ PelTag::CANON_CS_COLOR_TONE => [
722
+ 0 => 'Normal'
723
+ ],
724
+ PelTag::CANON_CS_SRAW_QUALITY => [
725
+ 1 => 'sRAW1 (mRAW)',
726
+ 2 => 'sRAW2 (sRAW)'
727
+ ]
728
+ ]
729
+ ];
730
+
731
+ /**
732
+ * Make a new entry that can hold a signed short.
733
+ *
734
+ * The method accept several integer arguments. The {@link
735
+ * getValue} method will always return an array except for when a
736
+ * single integer argument is given here.
737
+ *
738
+ * @param int $tag
739
+ * the tag which this entry represents. This
740
+ * should be one of the constants defined in {@link PelTag}
741
+ * which has format {@link PelFormat::SSHORT}.
742
+ * @param int $value...
743
+ * the signed short(s) that this entry will
744
+ * represent. The argument passed must obey the same rules as the
745
+ * argument to {@link setValue}, namely that it should be within
746
+ * range of a signed short, that is between -32768 to 32767
747
+ * (inclusive). If not, then a {@link PelOverFlowException} will be
748
+ * thrown.
749
+ */
750
+ public function __construct($tag, $value = null)
751
+ {
752
+ $this->tag = $tag;
753
+ $this->min = - 32768;
754
+ $this->max = 32767;
755
+ $this->format = PelFormat::SSHORT;
756
+
757
+ $value = func_get_args();
758
+ array_shift($value);
759
+ $this->setValueArray($value);
760
+ }
761
+
762
+ /**
763
+ * Convert a number into bytes.
764
+ *
765
+ * @param int $number
766
+ * the number that should be converted.
767
+ * @param boolean $order
768
+ * one of {@link PelConvert::LITTLE_ENDIAN} and
769
+ * {@link PelConvert::BIG_ENDIAN}, specifying the target byte order.
770
+ * @return string bytes representing the number given.
771
+ */
772
+ public function numberToBytes($number, $order)
773
+ {
774
+ return PelConvert::sShortToBytes($number, $order);
775
+ }
776
+
777
+ /**
778
+ * Get the value of an entry as text.
779
+ *
780
+ * The value will be returned in a format suitable for presentation,
781
+ * e.g., instead of returning '2' for a {@link
782
+ * PelTag::METERING_MODE} tag, 'Center-Weighted Average' is
783
+ * returned.
784
+ *
785
+ * @param boolean $brief
786
+ * some values can be returned in a long or more
787
+ * brief form, and this parameter controls that.
788
+ * @return string the value as text.
789
+ */
790
+ public function getText($brief = false)
791
+ {
792
+ if (array_key_exists($this->ifd_type, self::TRANSLATIONS) && array_key_exists($this->tag, self::TRANSLATIONS[$this->ifd_type])) {
793
+ $val = $this->value[0];
794
+ if ($this->ifd_type === PelIfd::CANON_CAMERA_SETTINGS && $this->tag === PelTag::CANON_CS_LENS_TYPE) {
795
+ // special handling: lens types must be multtiplied by 100 because digits canÄt be used in arrays
796
+ $val = $val * 100;
797
+ }
798
+ if (array_key_exists($val, self::TRANSLATIONS[$this->ifd_type][$this->tag])) {
799
+ return Pel::tra(self::TRANSLATIONS[$this->ifd_type][$this->tag][$val]);
800
+ } else {
801
+ return $val;
802
+ }
803
+ }
804
+ return parent::getText($brief);
805
+ }
806
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryShort.php ADDED
@@ -0,0 +1,409 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold shorts, both signed and unsigned.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for holding signed shorts.
37
+ *
38
+ * This class can hold shorts, either just a single short or an array
39
+ * of shorts. The class will be used to manipulate any of the Exif
40
+ * tags which has format {@link PelFormat::SHORT} like in this
41
+ * example:
42
+ *
43
+ * <code>
44
+ * $w = $ifd->getEntry(PelTag::EXIF_IMAGE_WIDTH);
45
+ * $w->setValue($w->getValue() / 2);
46
+ * $h = $ifd->getEntry(PelTag::EXIF_IMAGE_HEIGHT);
47
+ * $h->setValue($h->getValue() / 2);
48
+ * </code>
49
+ *
50
+ * Here the width and height is updated to 50% of their original
51
+ * values.
52
+ *
53
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
54
+ * @package PEL
55
+ */
56
+ namespace lsolesen\pel;
57
+
58
+ class PelEntryShort extends PelEntryNumber
59
+ {
60
+
61
+ private const IFD_TYPE_TRANSLATIONS = [
62
+ PelIfd::CANON_SHOT_INFO => [
63
+ PelTag::CANON_SI_WHITE_BALANCE => [
64
+ 0 => 'Auto',
65
+ 1 => 'Daylight',
66
+ 2 => 'Cloudy',
67
+ 3 => 'Tungsten',
68
+ 4 => 'Fluorescent',
69
+ 5 => 'Flash',
70
+ 6 => 'Custom',
71
+ 7 => 'Black & White',
72
+ 8 => 'Shade',
73
+ 9 => 'Manual Temperature (Kelvin)',
74
+ 10 => 'PC Set1',
75
+ 11 => 'PC Set2',
76
+ 12 => 'PC Set3',
77
+ 14 => 'Daylight Fluorescent',
78
+ 15 => 'Custom 1',
79
+ 16 => 'Custom 2',
80
+ 17 => 'Underwater',
81
+ 18 => 'Custom 3',
82
+ 19 => 'Custom 4',
83
+ 20 => 'PC Set4',
84
+ 21 => 'PC Set5',
85
+ 23 => 'Auto (ambience priority)'
86
+ ],
87
+ PelTag::CANON_SI_SLOW_SHUTTER => [
88
+ 0 => 'Off',
89
+ 1 => 'Night Scene',
90
+ 2 => 'On',
91
+ 3 => 'None'
92
+ ],
93
+ PelTag::CANON_SI_AF_POINT_USED => [
94
+ 0x3000 => 'None (MF)',
95
+ 0x3001 => 'Right',
96
+ 0x3002 => 'Center',
97
+ 0x3003 => 'Center+Right',
98
+ 0x3004 => 'Left',
99
+ 0x3005 => 'Left+Right',
100
+ 0x3006 => 'Left+Center',
101
+ 0x3007 => 'All'
102
+ ],
103
+ PelTag::CANON_SI_AUTO_EXPOSURE_BRACKETING => [
104
+ - 1 => 'On',
105
+ 0 => 'Off',
106
+ 1 => 'On (shot 1)',
107
+ 2 => 'On (shot 2)',
108
+ 3 => 'On (shot 3)'
109
+ ],
110
+ PelTag::CANON_SI_CAMERA_TYPE => [
111
+ 248 => 'EOS High-end',
112
+ 250 => 'Compact',
113
+ 252 => 'EOS Mid-range',
114
+ 255 => 'DV Camera'
115
+ ],
116
+ PelTag::CANON_SI_AUTO_ROTATE => [
117
+ 0 => 'None',
118
+ 1 => 'Rotate 90 CW',
119
+ 2 => 'Rotate 180',
120
+ 3 => 'Rotate 270 CW'
121
+ ],
122
+ PelTag::CANON_SI_ND_FILTER => [
123
+ 0 => 'Off',
124
+ 1 => 'On'
125
+ ]
126
+ ],
127
+ PelIfd::CANON_PANORAMA => [
128
+ PelTag::CANON_PA_PANORAMA_DIRECTION => [
129
+ 0 => 'Left to Right',
130
+ 1 => 'Right to Left',
131
+ 2 => 'Bottom to Top',
132
+ 3 => 'Top to Bottom',
133
+ 4 => '2x2 Matrix (Clockwise)'
134
+ ]
135
+ ]
136
+ ];
137
+
138
+ private const PEL_TAG_TRANSLATIONS = [
139
+ PelTag::METERING_MODE => [
140
+ 0 => 'Unknown',
141
+ 1 => 'Average',
142
+ 2 => 'Center-Weighted Average',
143
+ 3 => 'Spot',
144
+ 4 => 'Multi Spot',
145
+ 5 => 'Pattern',
146
+ 6 => 'Partial',
147
+ 255 => 'Other'
148
+ ],
149
+ PelTag::COMPRESSION => [
150
+ 1 => 'Uncompressed',
151
+ 6 => 'JPEG compression'
152
+ ],
153
+ PelTag::PLANAR_CONFIGURATION => [
154
+ 1 => 'chunky format',
155
+ 2 => 'planar format'
156
+ ],
157
+ PelTag::SENSING_METHOD => [
158
+ 1 => 'Not defined',
159
+ 2 => 'One-chip color area sensor',
160
+ 3 => 'Two-chip color area sensor',
161
+ 4 => 'Three-chip color area sensor',
162
+ 5 => 'Color sequential area sensor',
163
+ 7 => 'Trilinear sensor',
164
+ 8 => 'Color sequential linear sensor'
165
+ ],
166
+ PelTag::LIGHT_SOURCE => [
167
+ 0 => 'Unknown',
168
+ 1 => 'Daylight',
169
+ 2 => 'Fluorescent',
170
+ 3 => 'Tungsten (incandescent light)',
171
+ 4 => 'Flash',
172
+ 9 => 'Fine weather',
173
+ 10 => 'Cloudy weather',
174
+ 11 => 'Shade',
175
+ 12 => 'Daylight fluorescent',
176
+ 13 => 'Day white fluorescent',
177
+ 14 => 'Cool white fluorescent',
178
+ 15 => 'White fluorescent',
179
+ 17 => 'Standard light A',
180
+ 18 => 'Standard light B',
181
+ 19 => 'Standard light C',
182
+ 20 => 'D55',
183
+ 21 => 'D65',
184
+ 22 => 'D75',
185
+ 24 => 'ISO studio tungsten',
186
+ 255 => 'Other'
187
+ ],
188
+ PelTag::FOCAL_PLANE_RESOLUTION_UNIT => [
189
+ 2 => 'Inch',
190
+ 3 => 'Centimeter'
191
+ ],
192
+ PelTag::RESOLUTION_UNIT => [
193
+ 2 => 'Inch',
194
+ 3 => 'Centimeter'
195
+ ],
196
+ PelTag::EXPOSURE_PROGRAM => [
197
+ 0 => 'Not defined',
198
+ 1 => 'Manual',
199
+ 2 => 'Normal program',
200
+ 3 => 'Aperture priority',
201
+ 4 => 'Shutter priority',
202
+ 5 => 'Creative program (biased toward depth of field)',
203
+ 6 => 'Action program (biased toward fast shutter speed)',
204
+ 7 => 'Portrait mode (for closeup photos with the background out of focus',
205
+ 8 => 'Landscape mode (for landscape photos with the background in focus'
206
+ ],
207
+ PelTag::ORIENTATION => [
208
+ 1 => 'top - left',
209
+ 2 => 'top - right',
210
+ 3 => 'bottom - right',
211
+ 4 => 'bottom - left',
212
+ 5 => 'left - top',
213
+ 6 => 'right - top',
214
+ 7 => 'right - bottom',
215
+ 8 => 'left - bottom'
216
+ ],
217
+ PelTag::YCBCR_POSITIONING => [
218
+ 1 => 'centered',
219
+ 2 => 'co-sited'
220
+ ],
221
+ PelTag::PHOTOMETRIC_INTERPRETATION => [
222
+ 2 => 'RGB',
223
+ 6 => 'YCbCr'
224
+ ],
225
+ PelTag::COLOR_SPACE => [
226
+ 1 => 'sRGB',
227
+ 2 => 'Adobe RGB',
228
+ 0xffff => 'Uncalibrated'
229
+ ],
230
+ PelTag::FLASH => [
231
+ 0x0000 => 'Flash did not fire.',
232
+ 0x0001 => 'Flash fired.',
233
+ 0x0005 => 'Strobe return light not detected.',
234
+ 0x0007 => 'Strobe return light detected.',
235
+ 0x0009 => 'Flash fired, compulsory flash mode.',
236
+ 0x000d => 'Flash fired, compulsory flash mode, return light not detected.',
237
+ 0x000f => 'Flash fired, compulsory flash mode, return light detected.',
238
+ 0x0010 => 'Flash did not fire, compulsory flash mode.',
239
+ 0x0018 => 'Flash did not fire, auto mode.',
240
+ 0x0019 => 'Flash fired, auto mode.',
241
+ 0x001d => 'Flash fired, auto mode, return light not detected.',
242
+ 0x001f => 'Flash fired, auto mode, return light detected.',
243
+ 0x0020 => 'No flash function.',
244
+ 0x0041 => 'Flash fired, red-eye reduction mode.',
245
+ 0x0045 => 'Flash fired, red-eye reduction mode, return light not detected.',
246
+ 0x0047 => 'Flash fired, red-eye reduction mode, return light detected.',
247
+ 0x0049 => 'Flash fired, compulsory flash mode, red-eye reduction mode.',
248
+ 0x004d => 'Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected.',
249
+ 0x004f => 'Flash fired, compulsory flash mode, red-eye reduction mode, return light detected.',
250
+ 0x0058 => 'Flash did not fire, auto mode, red-eye reduction mode.',
251
+ 0x0059 => 'Flash fired, auto mode, red-eye reduction mode.',
252
+ 0x005d => 'Flash fired, auto mode, return light not detected, red-eye reduction mode.',
253
+ 0x005f => 'Flash fired, auto mode, return light detected, red-eye reduction mode.'
254
+ ],
255
+ PelTag::CUSTOM_RENDERED => [
256
+ 0 => 'Normal process',
257
+ 1 => 'Custom process'
258
+ ],
259
+ PelTag::EXPOSURE_MODE => [
260
+ 0 => 'Auto exposure',
261
+ 1 => 'Manual exposure',
262
+ 2 => 'Auto bracket'
263
+ ],
264
+ PelTag::WHITE_BALANCE => [
265
+ 0 => 'Auto white balance',
266
+ 1 => 'Manual white balance'
267
+ ],
268
+ PelTag::SCENE_CAPTURE_TYPE => [
269
+ 0 => 'Standard',
270
+ 1 => 'Landscape',
271
+ 2 => 'Portrait',
272
+ 3 => 'Night scene'
273
+ ],
274
+ PelTag::GAIN_CONTROL => [
275
+ 0 => 'Normal',
276
+ 1 => 'Low gain up',
277
+ 2 => 'High gain up',
278
+ 3 => 'Low gain down',
279
+ 4 => 'High gain down'
280
+ ],
281
+ PelTag::SATURATION => [
282
+ 0 => 'Normal',
283
+ 1 => 'Low saturation',
284
+ 2 => 'High saturation'
285
+ ],
286
+ PelTag::CONTRAST => [
287
+ 0 => 'Normal',
288
+ 1 => 'Soft',
289
+ 2 => 'Hard'
290
+ ],
291
+ PelTag::SHARPNESS => [
292
+ 0 => 'Normal',
293
+ 1 => 'Soft',
294
+ 2 => 'Hard'
295
+ ],
296
+ PelTag::SUBJECT_DISTANCE_RANGE => [
297
+ 0 => 'Unknown',
298
+ 1 => 'Macro',
299
+ 2 => 'Close view',
300
+ 3 => 'Distant view'
301
+ ]
302
+ ];
303
+
304
+ /**
305
+ * Make a new entry that can hold an unsigned short.
306
+ *
307
+ * The method accept several integer arguments. The {@link
308
+ * getValue} method will always return an array except for when a
309
+ * single integer argument is given here.
310
+ *
311
+ * This means that one can conveniently use objects like this:
312
+ * <code>
313
+ * $a = new PelEntryShort(PelTag::EXIF_IMAGE_HEIGHT, 42);
314
+ * $b = $a->getValue() + 314;
315
+ * </code>
316
+ * where the call to {@link getValue} will return an integer
317
+ * instead of an array with one integer element, which would then
318
+ * have to be extracted.
319
+ *
320
+ * @param integer $tag
321
+ * the tag which this entry represents. This should be
322
+ * one of the constants defined in {@link PelTag}, e.g., {@link
323
+ * PelTag::IMAGE_WIDTH}, {@link PelTag::ISO_SPEED_RATINGS},
324
+ * or any other tag with format {@link PelFormat::SHORT}.
325
+ * @param integer $value...
326
+ * the short(s) that this entry will
327
+ * represent. The argument passed must obey the same rules as the
328
+ * argument to {@link setValue}, namely that it should be within
329
+ * range of an unsigned short, that is between 0 and 65535
330
+ * (inclusive). If not, then a {@link PelOverFlowException} will be
331
+ * thrown.
332
+ */
333
+ public function __construct($tag, $value = null)
334
+ {
335
+ $this->tag = $tag;
336
+ $this->min = 0;
337
+ $this->max = 65535;
338
+ $this->format = PelFormat::SHORT;
339
+
340
+ $value = func_get_args();
341
+ array_shift($value);
342
+ $this->setValueArray($value);
343
+ }
344
+
345
+ /**
346
+ * Convert a number into bytes.
347
+ *
348
+ * @param integer $number
349
+ * the number that should be converted.
350
+ * @param boolean $order
351
+ * one of {@link PelConvert::LITTLE_ENDIAN} and
352
+ * {@link PelConvert::BIG_ENDIAN}, specifying the target byte order.
353
+ * @return string bytes representing the number given.
354
+ */
355
+ public function numberToBytes($number, $order)
356
+ {
357
+ return PelConvert::shortToBytes($number, $order);
358
+ }
359
+
360
+ /**
361
+ * Get the value of an entry as text.
362
+ *
363
+ * The value will be returned in a format suitable for presentation,
364
+ * e.g., instead of returning '2' for a {@link
365
+ * PelTag::METERING_MODE} tag, 'Center-Weighted Average' is
366
+ * returned.
367
+ *
368
+ * @param boolean $brief
369
+ * some values can be returned in a long or more
370
+ * brief form, and this parameter controls that.
371
+ * @return string the value as text.
372
+ */
373
+ public function getText($brief = false)
374
+ {
375
+ if (array_key_exists($this->ifd_type, self::IFD_TYPE_TRANSLATIONS)) {
376
+ if (array_key_exists($this->value[0], self::IFD_TYPE_TRANSLATIONS[$this->ifd_type])) {
377
+ return Pel::tra(self::IFD_TYPE_TRANSLATIONS[$this->ifd_type][$this->value[0]]);
378
+ } else {
379
+ return $this->value[0];
380
+ }
381
+ } elseif ($this->tag === PelTag::YCBCR_SUB_SAMPLING) {
382
+ if ($this->value[0] == 2 && $this->value[1] == 1) {
383
+ return 'YCbCr4:2:2';
384
+ }
385
+ if ($this->value[0] == 2 && $this->value[1] == 2) {
386
+ return 'YCbCr4:2:0';
387
+ }
388
+ return $this->value[0] . ', ' . $this->value[1];
389
+ } elseif ($this->tag === PelTag::SUBJECT_AREA) {
390
+ switch ($this->components) {
391
+ case 2:
392
+ return Pel::fmt('(x,y) = (%d,%d)', $this->value[0], $this->value[1]);
393
+ case 3:
394
+ return Pel::fmt('Within distance %d of (x,y) = (%d,%d)', $this->value[0], $this->value[1], $this->value[2]);
395
+ case 4:
396
+ return Pel::fmt('Within rectangle (width %d, height %d) around (x,y) = (%d,%d)', $this->value[0], $this->value[1], $this->value[2], $this->value[3]);
397
+ default:
398
+ return Pel::fmt('Unexpected number of components (%d, expected 2, 3, or 4).', $this->components);
399
+ }
400
+ } elseif (array_key_exists($this->tag, self::PEL_TAG_TRANSLATIONS)) {
401
+ if (array_key_exists($this->value[0], self::PEL_TAG_TRANSLATIONS[$this->tag])) {
402
+ return Pel::tra(self::PEL_TAG_TRANSLATIONS[$this->tag][$this->value[0]]);
403
+ } else {
404
+ return $this->value[0];
405
+ }
406
+ }
407
+ return parent::getText($brief);
408
+ }
409
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryTime.php ADDED
@@ -0,0 +1,318 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class for holding a date and time.
28
+ *
29
+ * This class can hold a timestamp, and it will be used as
30
+ * in this example where the time is advanced by one week:
31
+ * <code>
32
+ * $entry = $ifd->getEntry(PelTag::DATE_TIME_ORIGINAL);
33
+ * $time = $entry->getValue();
34
+ * print('The image was taken on the ' . date('jS', $time));
35
+ * $entry->setValue($time + 7 * 24 * 3600);
36
+ * </code>
37
+ *
38
+ * The example used a standard UNIX timestamp, which is the default
39
+ * for this class.
40
+ *
41
+ * But the Exif format defines dates outside the range of a UNIX
42
+ * timestamp (about 1970 to 2038) and so you can also get access to
43
+ * the timestamp in two other formats: a simple string or a Julian Day
44
+ * Count. Please see the Calendar extension in the PHP Manual for more
45
+ * information about the Julian Day Count.
46
+ *
47
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
48
+ * @package PEL
49
+ */
50
+ namespace lsolesen\pel;
51
+
52
+ class PelEntryTime extends PelEntryAscii
53
+ {
54
+
55
+ /**
56
+ * Constant denoting a UNIX timestamp.
57
+ */
58
+ const UNIX_TIMESTAMP = 1;
59
+
60
+ /**
61
+ * Constant denoting a Exif string.
62
+ */
63
+ const EXIF_STRING = 2;
64
+
65
+ /**
66
+ * Constant denoting a Julian Day Count.
67
+ */
68
+ const JULIAN_DAY_COUNT = 3;
69
+
70
+ /**
71
+ * The Julian Day Count of the timestamp held by this entry.
72
+ *
73
+ * This is an integer counting the number of whole days since
74
+ * January 1st, 4713 B.C. The fractional part of the timestamp held
75
+ * by this entry is stored in {@link $seconds}.
76
+ *
77
+ * @var int
78
+ */
79
+ private $day_count;
80
+
81
+ /**
82
+ * The number of seconds into the day of the timestamp held by this
83
+ * entry.
84
+ *
85
+ * The number of whole days is stored in {@link $day_count} and the
86
+ * number of seconds left-over is stored here.
87
+ *
88
+ * @var int
89
+ */
90
+ private $seconds;
91
+
92
+ /**
93
+ * Make a new entry for holding a timestamp.
94
+ *
95
+ * @param integer $tag
96
+ * the Exif tag which this entry represents. There are
97
+ * only three standard tags which hold timestamp, so this should be
98
+ * one of the constants {@link PelTag::DATE_TIME}, {@link
99
+ * PelTag::DATE_TIME_ORIGINAL}, or {@link
100
+ * PelTag::DATE_TIME_DIGITIZED}.
101
+ * @param integer|string|double $timestamp
102
+ * the timestamp held by this entry in the correct form
103
+ * as indicated by the third argument. For {@link UNIX_TIMESTAMP}
104
+ * this is an integer counting the number of seconds since January
105
+ * 1st 1970, for {@link EXIF_STRING} this is a string of the form
106
+ * 'YYYY:MM:DD hh:mm:ss', and for {@link JULIAN_DAY_COUNT} this is a
107
+ * floating point number where the integer part denotes the day
108
+ * count and the fractional part denotes the time of day (0.25 means
109
+ * 6:00, 0.75 means 18:00).
110
+ * @param integer $type
111
+ * the type of the timestamp. This must be one of
112
+ * {@link UNIX_TIMESTAMP}, {@link EXIF_STRING}, or
113
+ * {@link JULIAN_DAY_COUNT}.
114
+ */
115
+ public function __construct($tag, $timestamp, $type = self::UNIX_TIMESTAMP)
116
+ {
117
+ $this->tag = $tag;
118
+ $this->setValue($timestamp, $type);
119
+ }
120
+
121
+ /**
122
+ * Return the timestamp of the entry.
123
+ *
124
+ * The timestamp held by this entry is returned in one of three
125
+ * formats: as a standard UNIX timestamp (default), as a fractional
126
+ * Julian Day Count, or as a string.
127
+ *
128
+ * @param integer $type
129
+ * the type of the timestamp. This must be one of
130
+ * {@link UNIX_TIMESTAMP}, {@link EXIF_STRING}, or
131
+ * {@link JULIAN_DAY_COUNT}.
132
+ * @return integer|string|false the timestamp held by this entry in the correct form
133
+ * as indicated by the type argument. For {@link UNIX_TIMESTAMP}
134
+ * this is an integer counting the number of seconds since January
135
+ * 1st 1970, for {@link EXIF_STRING} this is a string of the form
136
+ * 'YYYY:MM:DD hh:mm:ss', and for {@link JULIAN_DAY_COUNT} this is a
137
+ * floating point number where the integer part denotes the day
138
+ * count and the fractional part denotes the time of day (0.25 means
139
+ * 6:00, 0.75 means 18:00).
140
+ */
141
+ public function getValue($type = self::UNIX_TIMESTAMP)
142
+ {
143
+ switch ($type) {
144
+ case self::UNIX_TIMESTAMP:
145
+ $seconds = $this->convertJdToUnix($this->day_count);
146
+ if ($seconds === false) {
147
+ /*
148
+ * We get false if the Julian Day Count is outside the range
149
+ * of a UNIX timestamp.
150
+ */
151
+ return false;
152
+ } else {
153
+ return $seconds + $this->seconds;
154
+ }
155
+ break;
156
+ case self::EXIF_STRING:
157
+ list ($year, $month, $day) = $this->convertJdToGregorian($this->day_count);
158
+ $hours = (int) ($this->seconds / 3600);
159
+ $minutes = (int) ($this->seconds % 3600 / 60);
160
+ $seconds = $this->seconds % 60;
161
+ return sprintf('%04d:%02d:%02d %02d:%02d:%02d', $year, $month, $day, $hours, $minutes, $seconds);
162
+ case self::JULIAN_DAY_COUNT:
163
+ return $this->day_count + $this->seconds / 86400;
164
+ default:
165
+ throw new PelInvalidArgumentException('Expected UNIX_TIMESTAMP (%d), ' . 'EXIF_STRING (%d), or ' . 'JULIAN_DAY_COUNT (%d) for $type, got %d.', self::UNIX_TIMESTAMP, self::EXIF_STRING, self::JULIAN_DAY_COUNT, $type);
166
+ }
167
+ }
168
+
169
+ /**
170
+ * Update the timestamp held by this entry.
171
+ *
172
+ * @param integer|float|string $timestamp
173
+ * the timestamp held by this entry in the correct form
174
+ * as indicated by the third argument. For {@link UNIX_TIMESTAMP}
175
+ * this is an integer counting the number of seconds since January
176
+ * 1st 1970, for {@link EXIF_STRING} this is a string of the form
177
+ * 'YYYY:MM:DD hh:mm:ss', and for {@link JULIAN_DAY_COUNT} this is a
178
+ * floating point number where the integer part denotes the day
179
+ * count and the fractional part denotes the time of day (0.25 means
180
+ * 6:00, 0.75 means 18:00).
181
+ * @param integer $type
182
+ * the type of the timestamp. This must be one of
183
+ * {@link UNIX_TIMESTAMP}, {@link EXIF_STRING}, or
184
+ * {@link JULIAN_DAY_COUNT}.
185
+ * @throws PelInvalidArgumentException
186
+ */
187
+ public function setValue($timestamp, $type = self::UNIX_TIMESTAMP)
188
+ {
189
+ if ($type === self::UNIX_TIMESTAMP) {
190
+ if (is_int($timestamp) || is_float($timestamp)) {
191
+ $this->day_count = $this->convertUnixToJd($timestamp);
192
+ $this->seconds = $timestamp % 86400;
193
+ } else {
194
+ throw new PelInvalidArgumentException('Expected integer value for $type, got %s', gettype($timestamp));
195
+ }
196
+ } elseif ($type === self::EXIF_STRING) {
197
+ /*
198
+ * Clean the timestamp: some timestamps are broken other
199
+ * separators than ':' and ' '.
200
+ */
201
+ $d = preg_split('/[^0-9]+/', $timestamp);
202
+ for ($i = 0; $i < 6; $i ++) {
203
+ if (empty($d[$i])) {
204
+ $d[$i] = 0;
205
+ }
206
+ }
207
+ $this->day_count = $this->convertGregorianToJd($d[0], $d[1], $d[2]);
208
+ $this->seconds = $d[3] * 3600 + $d[4] * 60 + $d[5];
209
+ } elseif ($type === self::JULIAN_DAY_COUNT) {
210
+ if (is_int($timestamp) || is_float($timestamp)) {
211
+ $this->day_count = (int) floor($timestamp);
212
+ $this->seconds = (int) (86400 * ($timestamp - floor($timestamp)));
213
+ } else {
214
+ throw new PelInvalidArgumentException('Expected integer value for $type, got %s', gettype($timestamp));
215
+ }
216
+ } else {
217
+ throw new PelInvalidArgumentException('Expected UNIX_TIMESTAMP (%d), ' . 'EXIF_STRING (%d), or ' . 'JULIAN_DAY_COUNT (%d) for $type, got %d.', self::UNIX_TIMESTAMP, self::EXIF_STRING, self::JULIAN_DAY_COUNT, $type);
218
+ }
219
+
220
+ // finally update the string which will be used when this is turned into bytes.
221
+ parent::setValue($this->getValue(self::EXIF_STRING));
222
+ }
223
+
224
+ // The following four functions are used for converting back and
225
+ // forth between the date formats. They are used in preference to
226
+ // the ones from the PHP calendar extension to avoid having to
227
+ // fiddle with timezones and to avoid depending on the extension.
228
+ //
229
+ // See http://www.hermetic.ch/cal_stud/jdn.htm#comp for a reference.
230
+
231
+ /**
232
+ * Converts a date in year/month/day format to a Julian Day count.
233
+ *
234
+ * @param integer $year
235
+ * the year.
236
+ * @param integer $month
237
+ * the month, 1 to 12.
238
+ * @param integer $day
239
+ * the day in the month.
240
+ * @return integer the Julian Day count.
241
+ */
242
+ public function convertGregorianToJd($year, $month, $day)
243
+ {
244
+ // Special case mapping 0/0/0 -> 0
245
+ if ($year == 0 || $month == 0 || $day == 0) {
246
+ return 0;
247
+ }
248
+
249
+ $m1412 = ($month <= 2) ? - 1 : 0;
250
+ return floor((1461 * ($year + 4800 + $m1412)) / 4) + floor((367 * ($month - 2 - 12 * $m1412)) / 12) - floor((3 * floor(($year + 4900 + $m1412) / 100)) / 4) + $day - 32075;
251
+ }
252
+
253
+ /**
254
+ * Converts a Julian Day count to a year/month/day triple.
255
+ *
256
+ * @param int $jd
257
+ * the Julian Day count.
258
+ * @return array an array with three entries: year, month, day.
259
+ */
260
+ public function convertJdToGregorian($jd)
261
+ {
262
+ // Special case mapping 0 -> 0/0/0
263
+ if ($jd == 0) {
264
+ return [
265
+ 0,
266
+ 0,
267
+ 0
268
+ ];
269
+ }
270
+
271
+ $l = $jd + 68569;
272
+ $n = floor((4 * $l) / 146097);
273
+ $l = $l - floor((146097 * $n + 3) / 4);
274
+ $i = floor((4000 * ($l + 1)) / 1461001);
275
+ $l = $l - floor((1461 * $i) / 4) + 31;
276
+ $j = floor((80 * $l) / 2447);
277
+ $d = $l - floor((2447 * $j) / 80);
278
+ $l = floor($j / 11);
279
+ $m = $j + 2 - (12 * $l);
280
+ $y = 100 * ($n - 49) + $i + $l;
281
+ return [
282
+ $y,
283
+ $m,
284
+ $d
285
+ ];
286
+ }
287
+
288
+ /**
289
+ * Converts a UNIX timestamp to a Julian Day count.
290
+ *
291
+ * @param integer|float $timestamp
292
+ * the timestamp.
293
+ * @return float the Julian Day count.
294
+ */
295
+ public function convertUnixToJd($timestamp)
296
+ {
297
+ return floor($timestamp / 86400) + 2440588;
298
+ }
299
+
300
+ /**
301
+ * Converts a Julian Day count to a UNIX timestamp.
302
+ *
303
+ * @param integer|float $jd
304
+ * the Julian Day count.
305
+ * @return mixed $timestamp the integer timestamp or false if the
306
+ * day count cannot be represented as a UNIX timestamp.
307
+ */
308
+ public function convertJdToUnix($jd)
309
+ {
310
+ if ($jd > 0) {
311
+ $timestamp = ($jd - 2440588) * 86400;
312
+ if ($timestamp >= 0) {
313
+ return $timestamp;
314
+ }
315
+ }
316
+ return false;
317
+ }
318
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryUndefined.php ADDED
@@ -0,0 +1,172 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes used to hold data for Exif tags of format undefined.
28
+ *
29
+ * This file contains the base class {@link PelEntryUndefined} and
30
+ * the subclasses {@link PelEntryUserComment} which should be used
31
+ * to manage the {@link PelTag::USER_COMMENT} tag, and {@link
32
+ * PelEntryVersion} which is used to manage entries with version
33
+ * information.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
37
+ * License (GPL)
38
+ * @package PEL
39
+ */
40
+
41
+ /**
42
+ * Class for holding data of any kind.
43
+ *
44
+ * This class can hold bytes of undefined format.
45
+ *
46
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
47
+ * @package PEL
48
+ */
49
+ namespace lsolesen\pel;
50
+
51
+ class PelEntryUndefined extends PelEntry
52
+ {
53
+
54
+ /**
55
+ * Make a new PelEntry that can hold undefined data.
56
+ *
57
+ * @param integer $tag
58
+ * which this entry represents. This
59
+ * should be one of the constants defined in {@link PelTag},
60
+ * e.g., {@link PelTag::SCENE_TYPE}, {@link
61
+ * PelTag::MAKER_NOTE} or any other tag with format {@link
62
+ * PelFormat::UNDEFINED}.
63
+ * @param string $data
64
+ * the data that this entry will be holding. Since
65
+ * the format is undefined, no checking will be done on the data. If no data are given, a empty string will be stored
66
+ */
67
+ public function __construct($tag, $data = '')
68
+ {
69
+ $this->tag = $tag;
70
+ $this->format = PelFormat::UNDEFINED;
71
+ $this->setValue($data);
72
+ }
73
+
74
+ /**
75
+ * Set the data of this undefined entry.
76
+ *
77
+ * @param string $data
78
+ * the data that this entry will be holding. Since
79
+ * the format is undefined, no checking will be done on the data.
80
+ */
81
+ public function setValue($data)
82
+ {
83
+ $this->components = strlen($data);
84
+ $this->bytes = $data;
85
+ }
86
+
87
+ /**
88
+ * Get the data of this undefined entry.
89
+ *
90
+ * @return string the data that this entry is holding.
91
+ */
92
+ public function getValue()
93
+ {
94
+ return $this->bytes;
95
+ }
96
+
97
+ /**
98
+ * Get the value of this entry as text.
99
+ *
100
+ * The value will be returned in a format suitable for presentation.
101
+ *
102
+ * @param boolean $brief
103
+ * some values can be returned in a long or more
104
+ * brief form, and this parameter controls that.
105
+ * @return string the value as text.
106
+ */
107
+ public function getText($brief = false)
108
+ {
109
+ switch ($this->tag) {
110
+ case PelTag::FILE_SOURCE:
111
+ // CC (e->components, 1, v);
112
+ switch (ord($this->bytes[0])) {
113
+ case 0x03:
114
+ return 'DSC';
115
+ default:
116
+ return sprintf('0x%02X', ord($this->bytes[0]));
117
+ }
118
+ break;
119
+ case PelTag::SCENE_TYPE:
120
+ // CC (e->components, 1, v);
121
+ switch (ord($this->bytes[0])) {
122
+ case 0x01:
123
+ return 'Directly photographed';
124
+ default:
125
+ return sprintf('0x%02X', ord($this->bytes[0]));
126
+ }
127
+ break;
128
+ case PelTag::COMPONENTS_CONFIGURATION:
129
+ // CC (e->components, 4, v);
130
+ $v = '';
131
+ for ($i = 0; $i < 4; $i ++) {
132
+ switch (ord($this->bytes[$i])) {
133
+ case 0:
134
+ $v .= '-';
135
+ break;
136
+ case 1:
137
+ $v .= 'Y';
138
+ break;
139
+ case 2:
140
+ $v .= 'Cb';
141
+ break;
142
+ case 3:
143
+ $v .= 'Cr';
144
+ break;
145
+ case 4:
146
+ $v .= 'R';
147
+ break;
148
+ case 5:
149
+ $v .= 'G';
150
+ break;
151
+ case 6:
152
+ $v .= 'B';
153
+ break;
154
+ default:
155
+ $v .= 'reserved';
156
+ break;
157
+ }
158
+ if ($i < 3) {
159
+ $v .= ' ';
160
+ }
161
+ }
162
+ return $v;
163
+ break;
164
+ case PelTag::MAKER_NOTE:
165
+ // TODO: handle maker notes.
166
+ return $this->components . ' bytes unknown MakerNote data';
167
+ break;
168
+ default:
169
+ return '(undefined)';
170
+ }
171
+ }
172
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryUserComment.php ADDED
@@ -0,0 +1,140 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class for a user comment.
28
+ *
29
+ * This class is used to hold user comments, which can come in several
30
+ * different character encodings. The Exif standard specifies a
31
+ * certain format of the {@link PelTag::USER_COMMENT user comment
32
+ * tag}, and this class will make sure that the format is kept.
33
+ *
34
+ * The most basic use of this class simply stores an ASCII encoded
35
+ * string for later retrieval using {@link getValue}:
36
+ *
37
+ * <code>
38
+ * $entry = new PelEntryUserComment('An ASCII string');
39
+ * echo $entry->getValue();
40
+ * </code>
41
+ *
42
+ * The string can be encoded with a different encoding, and if so, the
43
+ * encoding must be given using the second argument. The Exif
44
+ * standard specifies three known encodings: 'ASCII', 'JIS', and
45
+ * 'Unicode'. If the user comment is encoded using a character
46
+ * encoding different from the tree known encodings, then the empty
47
+ * string should be passed as encoding, thereby specifying that the
48
+ * encoding is undefined.
49
+ *
50
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
51
+ * @package PEL
52
+ */
53
+ namespace lsolesen\pel;
54
+
55
+ class PelEntryUserComment extends PelEntryUndefined
56
+ {
57
+
58
+ /**
59
+ * The user comment.
60
+ *
61
+ * @var string
62
+ */
63
+ private $comment;
64
+
65
+ /**
66
+ * The encoding.
67
+ *
68
+ * This should be one of 'ASCII', 'JIS', 'Unicode', or ''.
69
+ *
70
+ * @var string
71
+ */
72
+ private $encoding;
73
+
74
+ /**
75
+ * Make a new entry for holding a user comment.
76
+ *
77
+ * @param string $comment
78
+ * the new user comment.
79
+ * @param string $encoding
80
+ * the encoding of the comment. This should be either
81
+ * 'ASCII', 'JIS', 'Unicode', or the empty string specifying an
82
+ * undefined encoding.
83
+ */
84
+ public function __construct($comment = '', $encoding = 'ASCII')
85
+ {
86
+ parent::__construct(PelTag::USER_COMMENT);
87
+ $this->setValue($comment, $encoding);
88
+ }
89
+
90
+ /**
91
+ * Set the user comment.
92
+ *
93
+ * @param string $comment
94
+ * the new user comment.
95
+ * @param string $encoding
96
+ * the encoding of the comment. This should be either
97
+ * 'ASCII', 'JIS', 'Unicode', or the empty string specifying an
98
+ * unknown encoding.
99
+ */
100
+ public function setValue($comment = '', $encoding = 'ASCII')
101
+ {
102
+ $this->comment = $comment;
103
+ $this->encoding = $encoding;
104
+ parent::setValue(str_pad($encoding, 8, chr(0)) . $comment);
105
+ }
106
+
107
+ /**
108
+ * Returns the user comment.
109
+ *
110
+ * The comment is returned with the same character encoding as when
111
+ * it was set using {@link setValue} or {@link __construct the
112
+ * constructor}.
113
+ *
114
+ * @return string the user comment.
115
+ */
116
+ public function getValue()
117
+ {
118
+ return $this->comment;
119
+ }
120
+
121
+ /**
122
+ * Returns the encoding.
123
+ *
124
+ * @return string the encoding of the user comment.
125
+ */
126
+ public function getEncoding()
127
+ {
128
+ return $this->encoding;
129
+ }
130
+
131
+ /**
132
+ * Returns the user comment.
133
+ *
134
+ * @return string the user comment.
135
+ */
136
+ public function getText($brief = false)
137
+ {
138
+ return $this->comment;
139
+ }
140
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryVersion.php ADDED
@@ -0,0 +1,166 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class to hold version information.
28
+ *
29
+ * There are three Exif entries that hold version information: the
30
+ * {@link PelTag::EXIF_VERSION}, {@link
31
+ * PelTag::FLASH_PIX_VERSION}, and {@link
32
+ * PelTag::INTEROPERABILITY_VERSION} tags. This class manages
33
+ * those tags.
34
+ *
35
+ * The class is used in a very straight-forward way:
36
+ * <code>
37
+ * $entry = new PelEntryVersion(PelTag::EXIF_VERSION, 2.2);
38
+ * </code>
39
+ * This creates an entry for an file complying to the Exif 2.2
40
+ * standard. It is easy to test for standards level of an unknown
41
+ * entry:
42
+ * <code>
43
+ * if ($entry->getTag() == PelTag::EXIF_VERSION &&
44
+ * $entry->getValue() > 2.0) {
45
+ * echo 'Recent Exif version.';
46
+ * }
47
+ * </code>
48
+ *
49
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
50
+ * @package PEL
51
+ */
52
+ namespace lsolesen\pel;
53
+
54
+ class PelEntryVersion extends PelEntry
55
+ {
56
+
57
+ /**
58
+ * The version held by this entry.
59
+ *
60
+ * @var float
61
+ */
62
+ private $version;
63
+
64
+ /**
65
+ * Make a new entry for holding a version.
66
+ *
67
+ * @param integer $tag
68
+ * This should be one of {@link
69
+ * PelTag::EXIF_VERSION}, {@link PelTag::FLASH_PIX_VERSION},
70
+ * or {@link PelTag::INTEROPERABILITY_VERSION}.
71
+ * @param float $version
72
+ * The size of the entries leave room for
73
+ * exactly four digits: two digits on either side of the decimal
74
+ * point.
75
+ */
76
+ public function __construct($tag, $version = 0.0)
77
+ {
78
+ $this->tag = $tag;
79
+ $this->format = PelFormat::UNDEFINED;
80
+ $this->setValue($version);
81
+ }
82
+
83
+ /**
84
+ * Set the version held by this entry.
85
+ *
86
+ * @param float $version
87
+ * The size of the entries leave room for
88
+ * exactly four digits: two digits on either side of the decimal
89
+ * point.
90
+ */
91
+ public function setValue($version = 0.0)
92
+ {
93
+ $this->version = $version;
94
+ $major = floor($version);
95
+ $minor = ($version - $major) * 100;
96
+ $strValue = sprintf('%02.0f%02.0f', $major, $minor);
97
+ $this->components = strlen($strValue);
98
+ $this->bytes = $strValue;
99
+ }
100
+
101
+ /**
102
+ * Return the version held by this entry.
103
+ *
104
+ * @return float This will be the same as the value
105
+ * given to {@link setValue} or {@link __construct the
106
+ * constructor}.
107
+ */
108
+ public function getValue()
109
+ {
110
+ return $this->version;
111
+ }
112
+
113
+ /**
114
+ * Return a text string with the version.
115
+ *
116
+ * @param boolean $brief
117
+ * controls if the output should be brief. Brief
118
+ * output omits the word 'Version' so the result is just 'Exif x.y'
119
+ * instead of 'Exif Version x.y' if the entry holds information
120
+ * about the Exif version --- the output for FlashPix is similar.
121
+ * @return string the version number with the type of the tag,
122
+ * either 'Exif' or 'FlashPix'.
123
+ */
124
+ public function getText($brief = false)
125
+ {
126
+ $v = $this->version;
127
+
128
+ /*
129
+ * Versions numbers like 2.0 would be output as just 2 if we don't
130
+ * add the '.0' ourselves.
131
+ */
132
+ if (floor($this->version) == $this->version) {
133
+ $v .= '.0';
134
+ }
135
+
136
+ switch ($this->tag) {
137
+ case PelTag::EXIF_VERSION:
138
+ if ($brief) {
139
+ return Pel::fmt('Exif %s', $v);
140
+ } else {
141
+ return Pel::fmt('Exif Version %s', $v);
142
+ }
143
+ break;
144
+ case PelTag::FLASH_PIX_VERSION:
145
+ if ($brief) {
146
+ return Pel::fmt('FlashPix %s', $v);
147
+ } else {
148
+ return Pel::fmt('FlashPix Version %s', $v);
149
+ }
150
+ break;
151
+ case PelTag::INTEROPERABILITY_VERSION:
152
+ if ($brief) {
153
+ return Pel::fmt('Interoperability %s', $v);
154
+ } else {
155
+ return Pel::fmt('Interoperability Version %s', $v);
156
+ }
157
+ break;
158
+ }
159
+
160
+ if ($brief) {
161
+ return $v;
162
+ } else {
163
+ return Pel::fmt('Version %s', $v);
164
+ }
165
+ }
166
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelEntryWindowsString.php ADDED
@@ -0,0 +1,162 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class used to manipulate strings in the format Windows XP uses.
28
+ *
29
+ * When examining the file properties of an image in Windows XP one
30
+ * can fill in title, comment, author, keyword, and subject fields.
31
+ * Filling those fields and pressing OK will result in the data being
32
+ * written into the Exif data in the image.
33
+ *
34
+ * The data is written in a non-standard format and can thus not be
35
+ * loaded directly --- this class is needed to translate it into
36
+ * normal strings.
37
+ *
38
+ * It is important that entries from this class are only created with
39
+ * the {@link PelTag::XP_TITLE}, {@link PelTag::XP_COMMENT}, {@link
40
+ * PelTag::XP_AUTHOR}, {@link PelTag::XP_KEYWORD}, and {@link
41
+ * PelTag::XP_SUBJECT} tags. If another tag is used the data will no
42
+ * longer be correctly decoded when reloaded with PEL. (The data will
43
+ * be loaded as an {@link PelEntryByte} entry, which isn't as useful.)
44
+ *
45
+ * This class is to be used as in
46
+ * <code>
47
+ * $title = $ifd->getEntry(PelTag::XP_TITLE);
48
+ * print($title->getValue());
49
+ * $title->setValue('My favorite cat');
50
+ * </code>
51
+ * or if no entry is present one can add a new one with
52
+ * <code>
53
+ * $title = new PelEntryWindowsString(PelTag::XP_TITLE, 'A cute dog.');
54
+ * $ifd->addEntry($title);
55
+ * </code>
56
+ *
57
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
58
+ * @package PEL
59
+ */
60
+ namespace lsolesen\pel;
61
+
62
+ class PelEntryWindowsString extends PelEntry
63
+ {
64
+
65
+ const ZEROES = "\x0\x0";
66
+
67
+ /**
68
+ * The string hold by this entry.
69
+ *
70
+ * This is the string that was given to the {@link __construct
71
+ * constructor} or later to {@link setValue}, without any extra NULL
72
+ * characters or any such nonsense.
73
+ *
74
+ * @var string
75
+ */
76
+ private $str;
77
+
78
+ /**
79
+ * Make a new PelEntry that can hold a Windows XP specific string.
80
+ *
81
+ * @param int $tag
82
+ * the tag which this entry represents. This should be
83
+ * one of {@link PelTag::XP_TITLE}, {@link PelTag::XP_COMMENT},
84
+ * {@link PelTag::XP_AUTHOR}, {@link PelTag::XP_KEYWORD}, and {@link
85
+ * PelTag::XP_SUBJECT} tags. If another tag is used, then this
86
+ * entry will be incorrectly reloaded as a {@link PelEntryByte}.
87
+ * @param string $str
88
+ * the string that this entry will represent. It will
89
+ * be passed to {@link setValue} and thus has to obey its
90
+ * requirements.
91
+ * @param bool $from_exif
92
+ * internal use only, tells that string is UCS-2LE encoded, as PHP fails to detect this encoding
93
+ */
94
+ public function __construct($tag, $str = '', $from_exif = false)
95
+ {
96
+ $this->tag = $tag;
97
+ $this->format = PelFormat::BYTE;
98
+ $this->setValue($str, $from_exif);
99
+ }
100
+
101
+ /**
102
+ * Give the entry a new value.
103
+ *
104
+ * This will overwrite the previous value. The value can be
105
+ * retrieved later with the {@link getValue} method.
106
+ *
107
+ * @param string $str
108
+ * the new value of the entry.
109
+ * @param bool $from_exif
110
+ * internal use only, tells that string is UCS-2LE encoded, as PHP fails to detect this encoding
111
+ */
112
+ public function setValue($str, $from_exif = false)
113
+ {
114
+ $zlen = strlen(static::ZEROES);
115
+ if (false !== $from_exif) {
116
+ $s = $str;
117
+ if (substr($str, - $zlen, $zlen) == static::ZEROES) {
118
+ $str = substr($str, 0, - $zlen);
119
+ }
120
+ $str = mb_convert_encoding($str, 'UTF-8', 'UCS-2LE');
121
+ } else {
122
+ $s = mb_convert_encoding($str, 'UCS-2LE', 'auto');
123
+ }
124
+
125
+ if (substr($s, - $zlen, $zlen) != static::ZEROES) {
126
+ $s .= static::ZEROES;
127
+ }
128
+ $l = strlen($s);
129
+
130
+ $this->components = $l;
131
+ $this->str = $str;
132
+ $this->bytes = $s;
133
+ }
134
+
135
+ /**
136
+ * Return the string of the entry.
137
+ *
138
+ * @return string the string held, without any extra NULL
139
+ * characters. The string will be the same as the one given to
140
+ * {@link setValue} or to the {@link __construct constructor}.
141
+ */
142
+ public function getValue()
143
+ {
144
+ return $this->str;
145
+ }
146
+
147
+ /**
148
+ * Return the string of the entry.
149
+ *
150
+ * This methods returns the same as {@link getValue}.
151
+ *
152
+ * @param boolean $brief
153
+ * not used.
154
+ * @return string the string held, without any extra NULL
155
+ * characters. The string will be the same as the one given to
156
+ * {@link setValue} or to the {@link __construct constructor}.
157
+ */
158
+ public function getText($brief = false)
159
+ {
160
+ return $this->str;
161
+ }
162
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelException.php ADDED
@@ -0,0 +1,61 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Standard PEL printf() capable exception.
28
+ * This class is a simple extension of the standard Exception class in
29
+ * PHP, and all the methods defined there retain their original
30
+ * meaning.
31
+ *
32
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
33
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
34
+ * License (GPL)
35
+ * @package PEL
36
+ * @subpackage PelException
37
+ */
38
+ namespace lsolesen\pel;
39
+
40
+ class PelException extends \Exception
41
+ {
42
+
43
+ /**
44
+ * Construct a new PEL exception.
45
+ *
46
+ * @param string $fmt
47
+ * an optional format string can be given. It
48
+ * will be used as a format string for vprintf(). The remaining
49
+ * arguments will be available for the format string as usual with
50
+ * vprintf().
51
+ * @param mixed ...$args
52
+ * any number of arguments to be used with
53
+ * the format string.
54
+ */
55
+ public function __construct($fmt, $args = null)
56
+ {
57
+ $args = func_get_args();
58
+ $fmt = array_shift($args);
59
+ parent::__construct(vsprintf($fmt, $args));
60
+ }
61
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelExif.php ADDED
@@ -0,0 +1,151 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class representing Exif data.
28
+ *
29
+ * Exif data resides as {@link PelJpegContent data} and consists of a
30
+ * header followed by a number of {@link PelJpegIfd IFDs}.
31
+ *
32
+ * The interesting method in this class is {@link getTiff()} which
33
+ * will return the {@link PelTiff} object which really holds the data
34
+ * which one normally think of when talking about Exif data. This is
35
+ * because Exif data is stored as an extension of the TIFF file
36
+ * format.
37
+ *
38
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
39
+ * @package PEL
40
+ */
41
+ namespace lsolesen\pel;
42
+
43
+ class PelExif extends PelJpegContent
44
+ {
45
+
46
+ /**
47
+ * Exif header.
48
+ *
49
+ * The Exif data must start with these six bytes to be considered
50
+ * valid.
51
+ */
52
+ const EXIF_HEADER = "Exif\0\0";
53
+
54
+ /**
55
+ * The PelTiff object contained within.
56
+ *
57
+ * @var PelTiff
58
+ */
59
+ private $tiff = null;
60
+
61
+ /**
62
+ * Construct a new Exif object.
63
+ *
64
+ * The new object will be empty --- use the {@link load()} method to
65
+ * load Exif data from a {@link PelDataWindow} object, or use the
66
+ * {@link setTiff()} to change the {@link PelTiff} object, which is
67
+ * the true holder of the Exif {@link PelEntry entries}.
68
+ */
69
+ public function __construct()
70
+ {
71
+ // nothing to be done
72
+ }
73
+
74
+ /**
75
+ * Load and parse Exif data.
76
+ *
77
+ * This will populate the object with Exif data, contained as a
78
+ * {@link PelTiff} object. This TIFF object can be accessed with
79
+ * the {@link getTiff()} method.
80
+ *
81
+ * @param PelDataWindow $d
82
+ */
83
+ public function load(PelDataWindow $d)
84
+ {
85
+ Pel::debug('Parsing %d bytes of Exif data...', $d->getSize());
86
+
87
+ /* There must be at least 6 bytes for the Exif header. */
88
+ if ($d->getSize() < 6) {
89
+ throw new PelInvalidDataException('Expected at least 6 bytes of Exif ' . 'data, found just %d bytes.', $d->getSize());
90
+ }
91
+ /* Verify the Exif header */
92
+ if ($d->strcmp(0, self::EXIF_HEADER)) {
93
+ $d->setWindowStart(strlen(self::EXIF_HEADER));
94
+ } else {
95
+ throw new PelInvalidDataException('Exif header not found.');
96
+ }
97
+
98
+ /* The rest of the data is TIFF data. */
99
+ $this->tiff = new PelTiff();
100
+ $this->tiff->load($d);
101
+ }
102
+
103
+ /**
104
+ * Change the TIFF information.
105
+ *
106
+ * Exif data is really stored as TIFF data, and this method can be
107
+ * used to change this data from one {@link PelTiff} object to
108
+ * another.
109
+ *
110
+ * @param PelTiff $tiff
111
+ * the new TIFF object.
112
+ */
113
+ public function setTiff(PelTiff $tiff)
114
+ {
115
+ $this->tiff = $tiff;
116
+ }
117
+
118
+ /**
119
+ * Get the underlying TIFF object.
120
+ *
121
+ * The actual Exif data is stored in a {@link PelTiff} object, and
122
+ * this method provides access to it.
123
+ *
124
+ * @return PelTiff the TIFF object with the Exif data.
125
+ */
126
+ public function getTiff()
127
+ {
128
+ return $this->tiff;
129
+ }
130
+
131
+ /**
132
+ * Produce bytes for the Exif data.
133
+ *
134
+ * @return string bytes representing this object.
135
+ */
136
+ public function getBytes()
137
+ {
138
+ return self::EXIF_HEADER . $this->tiff->getBytes();
139
+ }
140
+
141
+ /**
142
+ * Return a string representation of this object.
143
+ *
144
+ * @return string a string describing this object. This is mostly
145
+ * useful for debugging.
146
+ */
147
+ public function __toString()
148
+ {
149
+ return Pel::tra("Dumping Exif data...\n") . $this->tiff->__toString();
150
+ }
151
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelFormat.php ADDED
@@ -0,0 +1,226 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * PEL: PHP Exif Library.
4
+ * A library with support for reading and
5
+ * writing all Exif headers in JPEG and TIFF images using PHP.
6
+ *
7
+ * Copyright (C) 2004, 2005 Martin Geisler.
8
+ * Copyright (C) 2017 Johannes Weberhofer.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Namespace for functions operating on Exif formats.
28
+ *
29
+ * This class defines the constants that are to be used whenever one
30
+ * has to refer to the format of an Exif tag. They will be
31
+ * collectively denoted by the pseudo-type PelFormat throughout the
32
+ * documentation.
33
+ *
34
+ * All the methods defined here are static, and they all operate on a
35
+ * single argument which should be one of the class constants.
36
+ *
37
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
38
+ * @author Johannes Weberhofer <jweberhofer@weberhofer.at>
39
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
40
+ * License (GPL)
41
+ * @package
42
+ *
43
+ */
44
+ namespace lsolesen\pel;
45
+
46
+ class PelFormat
47
+ {
48
+
49
+ /**
50
+ * Unsigned byte.
51
+ *
52
+ * Each component will be an unsigned 8-bit integer with a value
53
+ * between 0 and 255.
54
+ *
55
+ * Modelled with the {@link PelEntryByte} class.
56
+ */
57
+ const BYTE = 1;
58
+
59
+ /**
60
+ * ASCII string.
61
+ *
62
+ * Each component will be an ASCII character.
63
+ *
64
+ * Modelled with the {@link PelEntryAscii} class.
65
+ */
66
+ const ASCII = 2;
67
+
68
+ /**
69
+ * Unsigned short.
70
+ *
71
+ * Each component will be an unsigned 16-bit integer with a value
72
+ * between 0 and 65535.
73
+ *
74
+ * Modelled with the {@link PelEntryShort} class.
75
+ */
76
+ const SHORT = 3;
77
+
78
+ /**
79
+ * Unsigned long.
80
+ *
81
+ * Each component will be an unsigned 32-bit integer with a value
82
+ * between 0 and 4294967295.
83
+ *
84
+ * Modelled with the {@link PelEntryLong} class.
85
+ */
86
+ const LONG = 4;
87
+
88
+ /**
89
+ * Unsigned rational number.
90
+ *
91
+ * Each component will consist of two unsigned 32-bit integers
92
+ * denoting the enumerator and denominator. Each integer will have
93
+ * a value between 0 and 4294967295.
94
+ *
95
+ * Modelled with the {@link PelEntryRational} class.
96
+ */
97
+ const RATIONAL = 5;
98
+
99
+ /**
100
+ * Signed byte.
101
+ *
102
+ * Each component will be a signed 8-bit integer with a value
103
+ * between -128 and 127.
104
+ *
105
+ * Modelled with the {@link PelEntrySByte} class.
106
+ */
107
+ const SBYTE = 6;
108
+
109
+ /**
110
+ * Undefined byte.
111
+ *
112
+ * Each component will be a byte with no associated interpretation.
113
+ *
114
+ * Modelled with the {@link PelEntryUndefined} class.
115
+ */
116
+ const UNDEFINED = 7;
117
+
118
+ /**
119
+ * Signed short.
120
+ *
121
+ * Each component will be a signed 16-bit integer with a value
122
+ * between -32768 and 32767.
123
+ *
124
+ * Modelled with the {@link PelEntrySShort} class.
125
+ */
126
+ const SSHORT = 8;
127
+
128
+ /**
129
+ * Signed long.
130
+ *
131
+ * Each component will be a signed 32-bit integer with a value
132
+ * between -2147483648 and 2147483647.
133
+ *
134
+ * Modelled with the {@link PelEntrySLong} class.
135
+ */
136
+ const SLONG = 9;
137
+
138
+ /**
139
+ * Signed rational number.
140
+ *
141
+ * Each component will consist of two signed 32-bit integers
142
+ * denoting the enumerator and denominator. Each integer will have
143
+ * a value between -2147483648 and 2147483647.
144
+ *
145
+ * Modelled with the {@link PelEntrySRational} class.
146
+ */
147
+ const SRATIONAL = 10;
148
+
149
+ /**
150
+ * Floating point number.
151
+ *
152
+ * Entries with this format are not currently implemented.
153
+ */
154
+ const FLOAT = 11;
155
+
156
+ /**
157
+ * Double precision floating point number.
158
+ *
159
+ * Entries with this format are not currently implemented.
160
+ */
161
+ const DOUBLE = 12;
162
+
163
+ /**
164
+ * Values for format's short names
165
+ */
166
+ protected static $formatName = [
167
+ self::ASCII => 'Ascii',
168
+ self::BYTE => 'Byte',
169
+ self::SHORT => 'Short',
170
+ self::LONG => 'Long',
171
+ self::RATIONAL => 'Rational',
172
+ self::SBYTE => 'SByte',
173
+ self::SSHORT => 'SShort',
174
+ self::SLONG => 'SLong',
175
+ self::SRATIONAL => 'SRational',
176
+ self::FLOAT => 'Float',
177
+ self::DOUBLE => 'Double',
178
+ self::UNDEFINED => 'Undefined'
179
+ ];
180
+
181
+ protected static $formatLength = [
182
+ self::ASCII => 1,
183
+ self::BYTE => 1,
184
+ self::SHORT => 2,
185
+ self::LONG => 4,
186
+ self::RATIONAL => 8,
187
+ self::SBYTE => 1,
188
+ self::SSHORT => 2,
189
+ self::SLONG => 4,
190
+ self::SRATIONAL => 8,
191
+ self::FLOAT => 4,
192
+ self::DOUBLE => 8,
193
+ self::UNDEFINED => 1
194
+ ];
195
+
196
+ /**
197
+ * Returns the name of a format like 'Ascii' for the {@link ASCII} format
198
+ *
199
+ * @param integer $type
200
+ * as defined in {@link PelFormat}
201
+ * @return string
202
+ */
203
+ public static function getName($type)
204
+ {
205
+ if (array_key_exists($type, self::$formatName)) {
206
+ return self::$formatName[$type];
207
+ }
208
+ throw new PelIllegalFormatException($type);
209
+ }
210
+
211
+ /**
212
+ * Return the size of components in a given format in bytes needed to store one component with the
213
+ * given format.
214
+ *
215
+ * @param integer $type
216
+ * as defined in {@link PelFormat}
217
+ * @return integer|string
218
+ */
219
+ public static function getSize($type)
220
+ {
221
+ if (array_key_exists($type, self::$formatLength)) {
222
+ return self::$formatLength[$type];
223
+ }
224
+ throw new PelIllegalFormatException($type);
225
+ }
226
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelIfd.php ADDED
@@ -0,0 +1,1568 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+ namespace lsolesen\pel;
26
+
27
+ /**
28
+ * Classes for dealing with Exif IFDs.
29
+ *
30
+ * This file was modified by Benjamin Owens 2021-12-16 to add #[\ReturnTypeWillChange] annotations to some methods.
31
+ *
32
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
33
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
34
+ * License (GPL)
35
+ * @package PEL
36
+ */
37
+
38
+ /**
39
+ * Class representing an Image File Directory (IFD).
40
+ *
41
+ * {@link PelTiff TIFF data} is structured as a number of Image File
42
+ * Directories, IFDs for short. Each IFD contains a number of {@link
43
+ * PelEntry entries}, some data and finally a link to the next IFD.
44
+ *
45
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
46
+ * @package PEL
47
+ */
48
+ class PelIfd implements \IteratorAggregate, \ArrayAccess
49
+ {
50
+
51
+ /**
52
+ * Main image IFD.
53
+ *
54
+ * Pass this to the constructor when creating an IFD which will be
55
+ * the IFD of the main image.
56
+ */
57
+ const IFD0 = 0;
58
+
59
+ /**
60
+ * Thumbnail image IFD.
61
+ *
62
+ * Pass this to the constructor when creating an IFD which will be
63
+ * the IFD of the thumbnail image.
64
+ */
65
+ const IFD1 = 1;
66
+
67
+ /**
68
+ * Exif IFD.
69
+ *
70
+ * Pass this to the constructor when creating an IFD which will be
71
+ * the Exif sub-IFD.
72
+ */
73
+ const EXIF = 2;
74
+
75
+ /**
76
+ * GPS IFD.
77
+ *
78
+ * Pass this to the constructor when creating an IFD which will be
79
+ * the GPS sub-IFD.
80
+ */
81
+ const GPS = 3;
82
+
83
+ /**
84
+ * Interoperability IFD.
85
+ *
86
+ * Pass this to the constructor when creating an IFD which will be
87
+ * the interoperability sub-IFD.
88
+ */
89
+ const INTEROPERABILITY = 4;
90
+
91
+ /**
92
+ * Canon Maker Notes IFD.
93
+ *
94
+ * Pass this to the constructor when creating an IFD which will be
95
+ * the canon maker notes sub-IFD.
96
+ */
97
+ const CANON_MAKER_NOTES = 5;
98
+
99
+ /**
100
+ * Canon Camera Settings IFD.
101
+ *
102
+ * Pass this to the constructor when creating an IFD which will be
103
+ * the canon maker notes sub-IFD.
104
+ */
105
+ const CANON_CAMERA_SETTINGS = 6;
106
+
107
+ /**
108
+ * Canon Shot Info IFD.
109
+ *
110
+ * Pass this to the constructor when creating an IFD which will be
111
+ * the canon maker notes sub-IFD.
112
+ */
113
+ const CANON_SHOT_INFO = 7;
114
+
115
+ /**
116
+ * Canon Shot Info IFD.
117
+ *
118
+ * Pass this to the constructor when creating an IFD which will be
119
+ * the canon maker notes sub-IFD.
120
+ */
121
+ const CANON_PANORAMA = 8;
122
+
123
+ /**
124
+ * Canon Shot Info IFD.
125
+ *
126
+ * Pass this to the constructor when creating an IFD which will be
127
+ * the canon maker notes sub-IFD.
128
+ */
129
+ const CANON_PICTURE_INFO = 9;
130
+
131
+ /**
132
+ * Canon Shot Info IFD.
133
+ *
134
+ * Pass this to the constructor when creating an IFD which will be
135
+ * the canon maker notes sub-IFD.
136
+ */
137
+ const CANON_FILE_INFO = 10;
138
+
139
+ /**
140
+ * Canon Shot Info IFD.
141
+ *
142
+ * Pass this to the constructor when creating an IFD which will be
143
+ * the canon maker notes sub-IFD.
144
+ */
145
+ const CANON_CUSTOM_FUNCTIONS = 11;
146
+
147
+ private const TYPE_NAMES = [
148
+ self::IFD0 => '0',
149
+ self::IFD1 => '1',
150
+ self::EXIF => 'Exif',
151
+ self::GPS => 'GPS',
152
+ self::INTEROPERABILITY => 'Interoperability',
153
+ self::CANON_MAKER_NOTES => 'Canon Maker Notes',
154
+ self::CANON_CAMERA_SETTINGS => 'Canon Camera Settings',
155
+ self::CANON_SHOT_INFO => 'Canon Shot Information',
156
+ self::CANON_PANORAMA => 'Canon Panorama Information',
157
+ self::CANON_PICTURE_INFO => 'Canon Picture Information',
158
+ self::CANON_FILE_INFO => 'Canon File Information',
159
+ self::CANON_CUSTOM_FUNCTIONS => 'Canon Custom Functions'
160
+ ];
161
+
162
+ private const VALID_TAGS = [
163
+ self::IFD0 => [
164
+ PelTag::IMAGE_WIDTH,
165
+ PelTag::IMAGE_LENGTH,
166
+ PelTag::BITS_PER_SAMPLE,
167
+ PelTag::COMPRESSION,
168
+ PelTag::PHOTOMETRIC_INTERPRETATION,
169
+ PelTag::DOCUMENT_NAME,
170
+ PelTag::IMAGE_DESCRIPTION,
171
+ PelTag::MAKE,
172
+ PelTag::MODEL,
173
+ PelTag::STRIP_OFFSETS,
174
+ PelTag::ORIENTATION,
175
+ PelTag::SAMPLES_PER_PIXEL,
176
+ PelTag::ROWS_PER_STRIP,
177
+ PelTag::STRIP_BYTE_COUNTS,
178
+ PelTag::X_RESOLUTION,
179
+ PelTag::Y_RESOLUTION,
180
+ PelTag::PLANAR_CONFIGURATION,
181
+ PelTag::RESOLUTION_UNIT,
182
+ PelTag::TRANSFER_FUNCTION,
183
+ PelTag::SOFTWARE,
184
+ PelTag::DATE_TIME,
185
+ PelTag::ARTIST,
186
+ PelTag::PREDICTOR,
187
+ PelTag::WHITE_POINT,
188
+ PelTag::PRIMARY_CHROMATICITIES,
189
+ PelTag::EXTRA_SAMPLES,
190
+ PelTag::SAMPLE_FORMAT,
191
+ PelTag::JPEG_INTERCHANGE_FORMAT,
192
+ PelTag::JPEG_INTERCHANGE_FORMAT_LENGTH,
193
+ PelTag::YCBCR_COEFFICIENTS,
194
+ PelTag::YCBCR_SUB_SAMPLING,
195
+ PelTag::YCBCR_POSITIONING,
196
+ PelTag::REFERENCE_BLACK_WHITE,
197
+ PelTag::COPYRIGHT,
198
+ PelTag::EXIF_IFD_POINTER,
199
+ PelTag::GPS_INFO_IFD_POINTER,
200
+ PelTag::PRINT_IM,
201
+ PelTag::XP_TITLE,
202
+ PelTag::XP_COMMENT,
203
+ PelTag::XP_AUTHOR,
204
+ PelTag::XP_KEYWORDS,
205
+ PelTag::XP_SUBJECT,
206
+ PelTag::RATING,
207
+ PelTag::RATING_PERCENT,
208
+ PelTag::APPLICATION_NOTES
209
+ ],
210
+ self::EXIF => [
211
+ PelTag::EXPOSURE_TIME,
212
+ PelTag::FNUMBER,
213
+ PelTag::EXPOSURE_PROGRAM,
214
+ PelTag::SPECTRAL_SENSITIVITY,
215
+ PelTag::ISO_SPEED_RATINGS,
216
+ PelTag::OECF,
217
+ PelTag::EXIF_VERSION,
218
+ PelTag::DATE_TIME_ORIGINAL,
219
+ PelTag::DATE_TIME_DIGITIZED,
220
+ PelTag::OFFSET_TIME,
221
+ PelTag::OFFSET_TIME_ORIGINAL,
222
+ PelTag::OFFSET_TIME_DIGITIZED,
223
+ PelTag::COMPONENTS_CONFIGURATION,
224
+ PelTag::COMPRESSED_BITS_PER_PIXEL,
225
+ PelTag::SHUTTER_SPEED_VALUE,
226
+ PelTag::APERTURE_VALUE,
227
+ PelTag::BRIGHTNESS_VALUE,
228
+ PelTag::EXPOSURE_BIAS_VALUE,
229
+ PelTag::MAX_APERTURE_VALUE,
230
+ PelTag::SUBJECT_DISTANCE,
231
+ PelTag::METERING_MODE,
232
+ PelTag::LIGHT_SOURCE,
233
+ PelTag::FLASH,
234
+ PelTag::FOCAL_LENGTH,
235
+ PelTag::MAKER_NOTE,
236
+ PelTag::USER_COMMENT,
237
+ PelTag::SUB_SEC_TIME,
238
+ PelTag::SUB_SEC_TIME_ORIGINAL,
239
+ PelTag::SUB_SEC_TIME_DIGITIZED,
240
+ PelTag::FLASH_PIX_VERSION,
241
+ PelTag::COLOR_SPACE,
242
+ PelTag::PIXEL_X_DIMENSION,
243
+ PelTag::PIXEL_Y_DIMENSION,
244
+ PelTag::RELATED_SOUND_FILE,
245
+ PelTag::FLASH_ENERGY,
246
+ PelTag::SPATIAL_FREQUENCY_RESPONSE,
247
+ PelTag::FOCAL_PLANE_X_RESOLUTION,
248
+ PelTag::FOCAL_PLANE_Y_RESOLUTION,
249
+ PelTag::FOCAL_PLANE_RESOLUTION_UNIT,
250
+ PelTag::SUBJECT_LOCATION,
251
+ PelTag::EXPOSURE_INDEX,
252
+ PelTag::SENSING_METHOD,
253
+ PelTag::FILE_SOURCE,
254
+ PelTag::SCENE_TYPE,
255
+ PelTag::CFA_PATTERN,
256
+ PelTag::CUSTOM_RENDERED,
257
+ PelTag::EXPOSURE_MODE,
258
+ PelTag::WHITE_BALANCE,
259
+ PelTag::DIGITAL_ZOOM_RATIO,
260
+ PelTag::FOCAL_LENGTH_IN_35MM_FILM,
261
+ PelTag::SCENE_CAPTURE_TYPE,
262
+ PelTag::GAIN_CONTROL,
263
+ PelTag::CONTRAST,
264
+ PelTag::SATURATION,
265
+ PelTag::SHARPNESS,
266
+ PelTag::DEVICE_SETTING_DESCRIPTION,
267
+ PelTag::SUBJECT_DISTANCE_RANGE,
268
+ PelTag::IMAGE_UNIQUE_ID,
269
+ PelTag::INTEROPERABILITY_IFD_POINTER,
270
+ PelTag::GAMMA
271
+ ],
272
+ self::GPS => [
273
+ PelTag::GPS_VERSION_ID,
274
+ PelTag::GPS_LATITUDE_REF,
275
+ PelTag::GPS_LATITUDE,
276
+ PelTag::GPS_LONGITUDE_REF,
277
+ PelTag::GPS_LONGITUDE,
278
+ PelTag::GPS_ALTITUDE_REF,
279
+ PelTag::GPS_ALTITUDE,
280
+ PelTag::GPS_TIME_STAMP,
281
+ PelTag::GPS_SATELLITES,
282
+ PelTag::GPS_STATUS,
283
+ PelTag::GPS_MEASURE_MODE,
284
+ PelTag::GPS_DOP,
285
+ PelTag::GPS_SPEED_REF,
286
+ PelTag::GPS_SPEED,
287
+ PelTag::GPS_TRACK_REF,
288
+ PelTag::GPS_TRACK,
289
+ PelTag::GPS_IMG_DIRECTION_REF,
290
+ PelTag::GPS_IMG_DIRECTION,
291
+ PelTag::GPS_MAP_DATUM,
292
+ PelTag::GPS_DEST_LATITUDE_REF,
293
+ PelTag::GPS_DEST_LATITUDE,
294
+ PelTag::GPS_DEST_LONGITUDE_REF,
295
+ PelTag::GPS_DEST_LONGITUDE,
296
+ PelTag::GPS_DEST_BEARING_REF,
297
+ PelTag::GPS_DEST_BEARING,
298
+ PelTag::GPS_DEST_DISTANCE_REF,
299
+ PelTag::GPS_DEST_DISTANCE,
300
+ PelTag::GPS_PROCESSING_METHOD,
301
+ PelTag::GPS_AREA_INFORMATION,
302
+ PelTag::GPS_DATE_STAMP,
303
+ PelTag::GPS_DIFFERENTIAL
304
+ ],
305
+ self::INTEROPERABILITY => [
306
+ PelTag::INTEROPERABILITY_INDEX,
307
+ PelTag::INTEROPERABILITY_VERSION,
308
+ PelTag::RELATED_IMAGE_FILE_FORMAT,
309
+ PelTag::RELATED_IMAGE_WIDTH,
310
+ PelTag::RELATED_IMAGE_LENGTH
311
+ ],
312
+ self::CANON_MAKER_NOTES => [
313
+ PelTag::CANON_CAMERA_SETTINGS,
314
+ PelTag::CANON_FOCAL_LENGTH,
315
+ PelTag::CANON_SHOT_INFO,
316
+ PelTag::CANON_PANORAMA,
317
+ PelTag::CANON_IMAGE_TYPE,
318
+ PelTag::CANON_FIRMWARE_VERSION,
319
+ PelTag::CANON_FILE_NUMBER,
320
+ PelTag::CANON_OWNER_NAME,
321
+ PelTag::CANON_SERIAL_NUMBER,
322
+ PelTag::CANON_CAMERA_INFO,
323
+ PelTag::CANON_CUSTOM_FUNCTIONS,
324
+ PelTag::CANON_MODEL_ID,
325
+ PelTag::CANON_PICTURE_INFO,
326
+ PelTag::CANON_THUMBNAIL_IMAGE_VALID_AREA,
327
+ PelTag::CANON_SERIAL_NUMBER_FORMAT,
328
+ PelTag::CANON_SUPER_MACRO,
329
+ PelTag::CANON_FIRMWARE_REVISION,
330
+ PelTag::CANON_AF_INFO,
331
+ PelTag::CANON_ORIGINAL_DECISION_DATA_OFFSET,
332
+ PelTag::CANON_WHITE_BALANCE_TABLE,
333
+ PelTag::CANON_LENS_MODEL,
334
+ PelTag::CANON_INTERNAL_SERIAL_NUMBER,
335
+ PelTag::CANON_DUST_REMOVAL_DATA,
336
+ PelTag::CANON_CUSTOM_FUNCTIONS_2,
337
+ PelTag::CANON_PROCESSING_INFO,
338
+ PelTag::CANON_MEASURED_COLOR,
339
+ PelTag::CANON_COLOR_SPACE,
340
+ PelTag::CANON_VRD_OFFSET,
341
+ PelTag::CANON_SENSOR_INFO,
342
+ PelTag::CANON_COLOR_DATA
343
+ ],
344
+ self::CANON_CAMERA_SETTINGS => [
345
+ PelTag::CANON_CS_MACRO,
346
+ PelTag::CANON_CS_SELF_TIMER,
347
+ PelTag::CANON_CS_QUALITY,
348
+ PelTag::CANON_CS_FLASH_MODE,
349
+ PelTag::CANON_CS_DRIVE_MODE,
350
+ PelTag::CANON_CS_FOCUS_MODE,
351
+ PelTag::CANON_CS_RECORD_MODE,
352
+ PelTag::CANON_CS_IMAGE_SIZE,
353
+ PelTag::CANON_CS_EASY_MODE,
354
+ PelTag::CANON_CS_DIGITAL_ZOOM,
355
+ PelTag::CANON_CS_CONTRAST,
356
+ PelTag::CANON_CS_SATURATION,
357
+ PelTag::CANON_CS_SHARPNESS,
358
+ PelTag::CANON_CS_ISO_SPEED,
359
+ PelTag::CANON_CS_METERING_MODE,
360
+ PelTag::CANON_CS_FOCUS_TYPE,
361
+ PelTag::CANON_CS_AF_POINT,
362
+ PelTag::CANON_CS_EXPOSURE_PROGRAM,
363
+ PelTag::CANON_CS_LENS_TYPE,
364
+ PelTag::CANON_CS_LENS,
365
+ PelTag::CANON_CS_SHORT_FOCAL,
366
+ PelTag::CANON_CS_FOCAL_UNITS,
367
+ PelTag::CANON_CS_MAX_APERTURE,
368
+ PelTag::CANON_CS_MIN_APERTURE,
369
+ PelTag::CANON_CS_FLASH_ACTIVITY,
370
+ PelTag::CANON_CS_FLASH_DETAILS,
371
+ PelTag::CANON_CS_FOCUS_CONTINUOUS,
372
+ PelTag::CANON_CS_AE_SETTING,
373
+ PelTag::CANON_CS_IMAGE_STABILIZATION,
374
+ PelTag::CANON_CS_DISPLAY_APERTURE,
375
+ PelTag::CANON_CS_ZOOM_SOURCE_WIDTH,
376
+ PelTag::CANON_CS_ZOOM_TARGET_WIDTH,
377
+ PelTag::CANON_CS_SPOT_METERING_MODE,
378
+ PelTag::CANON_CS_PHOTO_EFFECT,
379
+ PelTag::CANON_CS_MANUAL_FLASH_OUTPUT,
380
+ PelTag::CANON_CS_COLOR_TONE,
381
+ PelTag::CANON_CS_SRAW_QUALITY
382
+ ],
383
+ self::CANON_SHOT_INFO => [
384
+ PelTag::CANON_SI_ISO_SPEED,
385
+ PelTag::CANON_SI_MEASURED_EV,
386
+ PelTag::CANON_SI_TARGET_APERTURE,
387
+ PelTag::CANON_SI_TARGET_SHUTTER_SPEED,
388
+ PelTag::CANON_SI_WHITE_BALANCE,
389
+ PelTag::CANON_SI_SLOW_SHUTTER,
390
+ PelTag::CANON_SI_SEQUENCE,
391
+ PelTag::CANON_SI_AF_POINT_USED,
392
+ PelTag::CANON_SI_FLASH_BIAS,
393
+ PelTag::CANON_SI_AUTO_EXPOSURE_BRACKETING,
394
+ PelTag::CANON_SI_SUBJECT_DISTANCE,
395
+ PelTag::CANON_SI_APERTURE_VALUE,
396
+ PelTag::CANON_SI_SHUTTER_SPEED_VALUE,
397
+ PelTag::CANON_SI_MEASURED_EV2,
398
+ PelTag::CANON_SI_CAMERA_TYPE,
399
+ PelTag::CANON_SI_AUTO_ROTATE,
400
+ PelTag::CANON_SI_ND_FILTER
401
+ ],
402
+ self::CANON_PANORAMA => [
403
+ PelTag::CANON_PA_PANORAMA_FRAME,
404
+ PelTag::CANON_PA_PANORAMA_DIRECTION
405
+ ],
406
+ self::CANON_PICTURE_INFO => [
407
+ PelTag::CANON_PI_IMAGE_WIDTH,
408
+ PelTag::CANON_PI_IMAGE_HEIGHT,
409
+ PelTag::CANON_PI_IMAGE_WIDTH_AS_SHOT,
410
+ PelTag::CANON_PI_IMAGE_HEIGHT_AS_SHOT,
411
+ PelTag::CANON_PI_AF_POINTS_USED,
412
+ PelTag::CANON_PI_AF_POINTS_USED_20D
413
+ ],
414
+ self::CANON_FILE_INFO => [
415
+ PelTag::CANON_FI_FILE_NUMBER,
416
+ PelTag::CANON_FI_BRACKET_MODE,
417
+ PelTag::CANON_FI_BRACKET_VALUE,
418
+ PelTag::CANON_FI_BRACKET_SHOT_NUMBER,
419
+ PelTag::CANON_FI_RAW_JPG_QUALITY,
420
+ PelTag::CANON_FI_RAW_JPG_SIZE,
421
+ PelTag::CANON_FI_NOISE_REDUCTION,
422
+ PelTag::CANON_FI_WB_BRACKET_MODE,
423
+ PelTag::CANON_FI_WB_BRACKET_VALUE_AB,
424
+ PelTag::CANON_FI_WB_BRACKET_VALUE_GM,
425
+ PelTag::CANON_FI_FILTER_EFFECT,
426
+ PelTag::CANON_FI_TONING_EFFECT,
427
+ PelTag::CANON_FI_MACRO_MAGNIFICATION,
428
+ PelTag::CANON_FI_LIVE_VIEW_SHOOTING,
429
+ PelTag::CANON_FI_FOCUS_DISTANCE_UPPER,
430
+ PelTag::CANON_FI_FOCUS_DISTANCE_LOWER,
431
+ PelTag::CANON_FI_FLASH_EXPOSURE_LOCK
432
+ ]
433
+ /*
434
+ * TODO: Where do these tags belong?
435
+ * PelTag::FILL_ORDER,
436
+ * PelTag::TRANSFER_RANGE,
437
+ * PelTag::JPEG_PROC,
438
+ * PelTag::BATTERY_LEVEL,
439
+ * PelTag::IPTC_NAA,
440
+ * PelTag::INTER_COLOR_PROFILE,
441
+ * PelTag::CFA_REPEAT_PATTERN_DIM,
442
+ */
443
+ ];
444
+
445
+ /**
446
+ * The maker notes held by this directory.
447
+ *
448
+ * Stores information of the MakerNotes IFD.
449
+ * Available and required keys are: parent, data, components and offset
450
+ *
451
+ * @var array
452
+ */
453
+ private $maker_notes = [];
454
+
455
+ /**
456
+ * The entries held by this directory.
457
+ *
458
+ * Each tag in the directory is represented by a {@link PelEntry}
459
+ * object in this array.
460
+ *
461
+ * @var array
462
+ */
463
+ private $entries = [];
464
+
465
+ /**
466
+ * The type of this directory.
467
+ *
468
+ * Initialized in the constructor. Must be one of {@link IFD0},
469
+ * {@link IFD1}, {@link EXIF}, {@link GPS}, or {@link
470
+ * INTEROPERABILITY}.
471
+ *
472
+ * @var int
473
+ */
474
+ private $type;
475
+
476
+ /**
477
+ * The next directory.
478
+ *
479
+ * This will be initialized in the constructor, or be left as null
480
+ * if this is the last directory.
481
+ *
482
+ * @var PelIfd
483
+ */
484
+ private $next = null;
485
+
486
+ /**
487
+ * Sub-directories pointed to by this directory.
488
+ *
489
+ * This will be an array of ({@link PelTag}, {@link PelIfd}) pairs.
490
+ *
491
+ * @var array
492
+ */
493
+ private $sub = [];
494
+
495
+ /**
496
+ * The thumbnail data.
497
+ *
498
+ * This will be initialized in the constructor, or be left as null
499
+ * if there are no thumbnail as part of this directory.
500
+ *
501
+ * @var PelDataWindow
502
+ */
503
+ private $thumb_data = null;
504
+
505
+ // TODO: use this format to choose between the
506
+ // JPEG_INTERCHANGE_FORMAT and STRIP_OFFSETS tags.
507
+ // private $thumb_format;
508
+
509
+ /**
510
+ * Construct a new Image File Directory (IFD).
511
+ *
512
+ * The IFD will be empty, use the {@link addEntry()} method to add
513
+ * an {@link PelEntry}. Use the {@link setNext()} method to link
514
+ * this IFD to another.
515
+ *
516
+ * @param integer $type
517
+ * the type of this IFD. Must be one of {@link
518
+ * IFD0}, {@link IFD1}, {@link EXIF}, {@link GPS}, or {@link
519
+ * INTEROPERABILITY}. An {@link PelIfdException} will be thrown
520
+ * otherwise.
521
+ * @throws PelIfdException
522
+ */
523
+ public function __construct($type)
524
+ {
525
+ if (! array_key_exists($type, self::TYPE_NAMES)) {
526
+ throw new PelIfdException('Unknown IFD type: %d', $type);
527
+ }
528
+ $this->type = $type;
529
+ }
530
+
531
+ /**
532
+ * Stores Maker Notes data for an IFD (Probably PelIfd::EXIF only).
533
+ *
534
+ * @param PelIfd $parent
535
+ * the parent PelIfd of the current PelIfd
536
+ * @param PelDataWindow $data
537
+ * the data window that will provide the data.
538
+ * @param PelIfd $parent
539
+ * the components in the entry.
540
+ * @param integer $offset
541
+ * the offset within the window where the directory will
542
+ * be found.
543
+ */
544
+ public function setMakerNotes($parent, $data, $components, $offset)
545
+ {
546
+ $this->maker_notes = [
547
+ 'parent' => $parent,
548
+ 'data' => $data,
549
+ 'components' => $components,
550
+ 'offset' => $offset
551
+ ];
552
+ }
553
+
554
+ /**
555
+ * Returns the Maker Notes data for an IFD (Probably PelIfd::EXIF only).
556
+ *
557
+ * @return array The maker_notes of IDF
558
+ */
559
+ public function getMakerNotes()
560
+ {
561
+ return $this->maker_notes;
562
+ }
563
+
564
+ /**
565
+ * Load data into a Image File Directory (IFD).
566
+ *
567
+ * @param PelDataWindow $d
568
+ * the data window that will provide the data.
569
+ * @param integer $offset
570
+ * the offset within the window where the directory will
571
+ * be found.
572
+ * @throws PelException
573
+ * @throws PelEntryUndefined
574
+ * @throws PelUnexpectedFormatException
575
+ * @throws PelWrongComponentCountException
576
+ */
577
+ public function load(PelDataWindow $d, $offset)
578
+ {
579
+ $starting_offset = $offset;
580
+
581
+ $thumb_offset = 0;
582
+ $thumb_length = 0;
583
+
584
+ Pel::debug('Constructing IFD at offset %d from %d bytes...', $offset, $d->getSize());
585
+
586
+ /* Read the number of entries */
587
+ $n = $d->getShort($offset);
588
+ Pel::debug('Loading %d entries...', $n);
589
+
590
+ $offset += 2;
591
+
592
+ /* Check if we have enough data. */
593
+ if ($offset + 12 * $n > $d->getSize()) {
594
+ $n = floor(($offset - $d->getSize()) / 12);
595
+ Pel::maybeThrow(new PelIfdException('Adjusted to: %d.', $n));
596
+ }
597
+
598
+ for ($i = 0; $i < $n; $i ++) {
599
+ // TODO: increment window start instead of using offsets.
600
+ $tag = $d->getShort($offset + 12 * $i);
601
+ Pel::debug('Loading entry with tag 0x%04X: %s (%d of %d)...', $tag, PelTag::getName($this->type, $tag), $i + 1, $n);
602
+
603
+ switch ($tag) {
604
+ case PelTag::EXIF_IFD_POINTER:
605
+ case PelTag::GPS_INFO_IFD_POINTER:
606
+ case PelTag::INTEROPERABILITY_IFD_POINTER:
607
+ case PelTag::MAKER_NOTE:
608
+ $type = null;
609
+ $components = $d->getLong($offset + 12 * $i + 4);
610
+ $o = $d->getLong($offset + 12 * $i + 8);
611
+ Pel::debug('Found sub IFD at offset %d', $o);
612
+
613
+ /* Map tag to IFD type. */
614
+ if ($tag == PelTag::EXIF_IFD_POINTER) {
615
+ $type = PelIfd::EXIF;
616
+ } elseif ($tag == PelTag::GPS_INFO_IFD_POINTER) {
617
+ $type = PelIfd::GPS;
618
+ } elseif ($tag == PelTag::INTEROPERABILITY_IFD_POINTER) {
619
+ $type = PelIfd::INTEROPERABILITY;
620
+ } elseif ($tag == PelTag::MAKER_NOTE) {
621
+ // Store maker notes infos, because we need PelTag::MAKE of PelIfd::IFD0 for MakerNotes
622
+ // Thus MakerNotes will be loaded at the end of loading PelIfd::IFD0
623
+ $this->setMakerNotes($this, $d, $components, $o);
624
+ $this->loadSingleValue($d, $offset, $i, $tag);
625
+ break;
626
+ }
627
+
628
+ if ($type === null) {
629
+ Pel::maybeThrow(new PelIfdException('Type not detected for Tag: %d.', $tag));
630
+ } elseif ($starting_offset == $o) {
631
+ Pel::maybeThrow(new PelIfdException('Bogus offset to next IFD: %d, same as offset being loaded from.', $o));
632
+ } else {
633
+ $ifd = new PelIfd($type);
634
+ try {
635
+ $ifd->load($d, $o);
636
+ $this->sub[$type] = $ifd;
637
+ } catch (PelDataWindowOffsetException $e) {
638
+ Pel::maybeThrow(new PelIfdException($e->getMessage()));
639
+ }
640
+ }
641
+ break;
642
+ case PelTag::JPEG_INTERCHANGE_FORMAT:
643
+ $thumb_offset = $d->getLong($offset + 12 * $i + 8);
644
+ $this->safeSetThumbnail($d, $thumb_offset, $thumb_length);
645
+ break;
646
+ case PelTag::JPEG_INTERCHANGE_FORMAT_LENGTH:
647
+ $thumb_length = $d->getLong($offset + 12 * $i + 8);
648
+ $this->safeSetThumbnail($d, $thumb_offset, $thumb_length);
649
+ break;
650
+ default:
651
+ $this->loadSingleValue($d, $offset, $i, $tag);
652
+ break;
653
+ }
654
+ }
655
+
656
+ /* Offset to next IFD */
657
+ $o = $d->getLong((int) ($offset + 12 * $n));
658
+ Pel::debug('Current offset is %d, link at %d points to %d.', $offset, $offset + 12 * $n, $o);
659
+
660
+ if ($o > 0) {
661
+ /* Sanity check: we need 6 bytes */
662
+ if ($o > $d->getSize() - 6) {
663
+ Pel::maybeThrow(new PelIfdException('Bogus offset to next IFD: ' . '%d > %d!', $o, $d->getSize() - 6));
664
+ } else {
665
+ if ($this->type == PelIfd::IFD1) {
666
+ // IFD1 shouldn't link further...
667
+ Pel::maybeThrow(new PelIfdException('IFD1 links to another IFD!'));
668
+ }
669
+ $this->next = new PelIfd(PelIfd::IFD1);
670
+ $this->next->load($d, $o);
671
+ }
672
+ } else {
673
+ Pel::debug('Last IFD.');
674
+ }
675
+
676
+ // Check if we finished loading IFD0 and EXIF IFD is set (EXIF IFD holds the MakerNotes)
677
+ if ($this->type == PelIfd::IFD0 && isset($this->sub[PelIfd::EXIF])) {
678
+ // Get MakerNotes from EXIF IFD and check if they are set
679
+ $mk = $this->sub[PelIfd::EXIF]->getMakerNotes();
680
+ if (! empty($mk) && count($mk) > 0) {
681
+ // get Make tag and load maker notes if tag is valid
682
+ $manufacturer = $this->getEntry(PelTag::MAKE);
683
+ if ($manufacturer !== null) {
684
+ $manufacturer = $manufacturer->getValue();
685
+ $mkNotes = PelMakerNotes::createMakerNotesFromManufacturer($manufacturer, $mk['parent'], $mk['data'], $mk['components'], $mk['offset']);
686
+ if ($mkNotes !== null) {
687
+ // remove pre-loaded undefined MakerNotes
688
+ $mk['parent']->offsetUnset(PelTag::MAKER_NOTE);
689
+ $mkNotes->load();
690
+ }
691
+ }
692
+ }
693
+ }
694
+ }
695
+
696
+ /**
697
+ * Load a single value which didn't match any special {@link PelTag}.
698
+ *
699
+ * This method will add a single value given by the {@link PelDataWindow} and it's offset ($offset) and element counter ($i).
700
+ *
701
+ * Please note that the data you pass to this method should come
702
+ * from an image, that is, it should be raw bytes. If instead you
703
+ * want to create an entry for holding, say, an short integer, then
704
+ * create a {@link PelEntryShort} object directly and load the data
705
+ * into it.
706
+ *
707
+ * @param PelDataWindow $d
708
+ * the data window that will provide the data.
709
+ * @param integer $offset
710
+ * the offset within the window where the directory will
711
+ * be found.
712
+ * @param integer $i
713
+ * the element's position in the {@link PelDataWindow} $d.
714
+ * @param integer $tag
715
+ * the tag of the entry as defined in {@link PelTag}.
716
+ * @throws PelException
717
+ * @throws PelEntryUndefined
718
+ * @throws PelUnexpectedFormatException
719
+ * @throws PelWrongComponentCountException
720
+ */
721
+ public function loadSingleValue($d, $offset, $i, $tag)
722
+ {
723
+ $format = $d->getShort($offset + 12 * $i + 2);
724
+ $components = $d->getLong($offset + 12 * $i + 4);
725
+ $size = PelFormat::getSize($format);
726
+ if (is_string($size)) {
727
+ Pel::maybeThrow(new PelException('Invalid format %s', $format));
728
+ return;
729
+ }
730
+
731
+ try {
732
+ /*
733
+ * The data size. If bigger than 4 bytes, the actual data is
734
+ * not in the entry but somewhere else, with the offset stored
735
+ * in the entry.
736
+ */
737
+ $s = $size * $components;
738
+ if ($s > 0) {
739
+ $doff = $offset + 12 * $i + 8;
740
+ if ($s > 4) {
741
+ $doff = $d->getLong($doff);
742
+ }
743
+ $data = $d->getClone($doff, $s);
744
+ } else {
745
+ $data = new PelDataWindow();
746
+ }
747
+
748
+ $entry = $this->newEntryFromData($tag, $format, $components, $data);
749
+ $this->addEntry($entry);
750
+ } catch (PelException $e) {
751
+ /*
752
+ * Throw the exception when running in strict mode, store
753
+ * otherwise.
754
+ */
755
+ Pel::maybeThrow($e);
756
+ }
757
+
758
+ /* The format of the thumbnail is stored in this tag. */
759
+ // TODO: handle TIFF thumbnail.
760
+ // if ($tag == PelTag::COMPRESSION) {
761
+ // $this->thumb_format = $data->getShort();
762
+ // }
763
+ }
764
+
765
+ /**
766
+ * Load a single value which didn't match any special {@link PelTag}.
767
+ *
768
+ * This method will add a single value given by the {@link PelDataWindow} and it's offset ($offset) and element counter ($i).
769
+ *
770
+ * Please note that the data you pass to this method should come
771
+ * from an image, that is, it should be raw bytes. If instead you
772
+ * want to create an entry for holding, say, an short integer, then
773
+ * create a {@link PelEntryShort} object directly and load the data
774
+ * into it.
775
+ *
776
+ * @param integer $type
777
+ * the type of the ifd
778
+ * @param PelDataWindow $data
779
+ * the data window that will provide the data.
780
+ * @param integer $offset
781
+ * the offset within the window where the directory will
782
+ * be found.
783
+ * @param integer $size
784
+ * the size in bytes of the maker notes section
785
+ * @param integer $i
786
+ * the element's position in the {@link PelDataWindow} $data.
787
+ * @param integer $format
788
+ * the format {@link PelFormat} of the entry.
789
+ * @throws PelException
790
+ * @throws PelDataWindowWindowException
791
+ * @throws PelInvalidArgumentException
792
+ */
793
+ public function loadSingleMakerNotesValue($type, PelDataWindow $data, $offset, $size, $i, $format)
794
+ {
795
+ $elemSize = PelFormat::getSize($format);
796
+ if ($size > 0) {
797
+ $subdata = $data->getClone($offset + $i * $elemSize, $elemSize);
798
+ } else {
799
+ $subdata = new PelDataWindow();
800
+ }
801
+
802
+ try {
803
+ $entry = $this->newEntryFromData($i + 1, $format, 1, $subdata);
804
+ $this->addEntry($entry);
805
+ } catch (PelException $e) {
806
+ // Throw the exception when running in strict mode, store otherwise.
807
+ Pel::maybeThrow($e);
808
+ }
809
+
810
+ /* The format of the thumbnail is stored in this tag. */
811
+ // TODO: handle TIFF thumbnail.
812
+ // if ($tag == PelTag::COMPRESSION) {
813
+ // $this->thumb_format = $data->getShort();
814
+ // }
815
+ }
816
+
817
+ /**
818
+ * Make a new entry from a bunch of bytes.
819
+ *
820
+ * This method will create the proper subclass of {@link PelEntry}
821
+ * corresponding to the {@link PelTag} and {@link PelFormat} given.
822
+ * The entry will be initialized with the data given.
823
+ *
824
+ * Please note that the data you pass to this method should come
825
+ * from an image, that is, it should be raw bytes. If instead you
826
+ * want to create an entry for holding, say, an short integer, then
827
+ * create a {@link PelEntryShort} object directly and load the data
828
+ * into it.
829
+ *
830
+ * A {@link PelUnexpectedFormatException} is thrown if a mismatch is
831
+ * discovered between the tag and format, and likewise a {@link
832
+ * PelWrongComponentCountException} is thrown if the number of
833
+ * components does not match the requirements of the tag. The
834
+ * requirements for a given tag (if any) can be found in the
835
+ * documentation for {@link PelTag}.
836
+ *
837
+ * @param integer $tag
838
+ * the tag of the entry as defined in {@link PelTag}.
839
+ * @param integer $format
840
+ * the format of the entry as defined in {@link PelFormat}.
841
+ * @param integer $components
842
+ * the components in the entry.
843
+ * @param PelDataWindow $data
844
+ * the data which will be used to construct the
845
+ * entry.
846
+ * @return PelEntry a newly created entry, holding the data given.
847
+ * @throws PelException
848
+ * @throws PelEntryUndefined
849
+ * @throws PelUnexpectedFormatException
850
+ * @throws PelWrongComponentCountException
851
+ */
852
+ public function newEntryFromData($tag, $format, $components, PelDataWindow $data)
853
+ {
854
+
855
+ /*
856
+ * First handle tags for which we have a specific PelEntryXXX
857
+ * class.
858
+ */
859
+ switch ($this->type) {
860
+ case self::IFD0:
861
+ case self::IFD1:
862
+ case self::EXIF:
863
+ case self::INTEROPERABILITY:
864
+ switch ($tag) {
865
+ case PelTag::DATE_TIME:
866
+ case PelTag::DATE_TIME_ORIGINAL:
867
+ case PelTag::DATE_TIME_DIGITIZED:
868
+ if ($format != PelFormat::ASCII) {
869
+ throw new PelUnexpectedFormatException($this->type, $tag, $format, PelFormat::ASCII);
870
+ }
871
+ if ($components != 20) {
872
+ throw new PelWrongComponentCountException($this->type, $tag, $components, 20);
873
+ }
874
+ // TODO: handle timezones.
875
+ return new PelEntryTime($tag, $data->getBytes(0, - 1), PelEntryTime::EXIF_STRING);
876
+
877
+ case PelTag::COPYRIGHT:
878
+ if ($format != PelFormat::ASCII) {
879
+ throw new PelUnexpectedFormatException($this->type, $tag, $format, PelFormat::ASCII);
880
+ }
881
+ $v = explode("\0", trim($data->getBytes(), ' '));
882
+ if (! isset($v[1])) {
883
+ Pel::maybeThrow(new PelException('Invalid copyright: %s', $data->getBytes()));
884
+ // when not in strict mode, set empty copyright and continue
885
+ $v[1] = '';
886
+ }
887
+ return new PelEntryCopyright($v[0], $v[1]);
888
+
889
+ case PelTag::EXIF_VERSION:
890
+ case PelTag::FLASH_PIX_VERSION:
891
+ case PelTag::INTEROPERABILITY_VERSION:
892
+ if ($format != PelFormat::UNDEFINED) {
893
+ throw new PelUnexpectedFormatException($this->type, $tag, $format, PelFormat::UNDEFINED);
894
+ }
895
+ return new PelEntryVersion($tag, (float) $data->getBytes() / 100);
896
+
897
+ case PelTag::USER_COMMENT:
898
+ if ($format != PelFormat::UNDEFINED) {
899
+ throw new PelUnexpectedFormatException($this->type, $tag, $format, PelFormat::UNDEFINED);
900
+ }
901
+ if ($data->getSize() < 8) {
902
+ return new PelEntryUserComment();
903
+ } else {
904
+ return new PelEntryUserComment($data->getBytes(8), rtrim($data->getBytes(0, 8)));
905
+ }
906
+ // this point can not be reached
907
+ case PelTag::XP_TITLE:
908
+ case PelTag::XP_COMMENT:
909
+ case PelTag::XP_AUTHOR:
910
+ case PelTag::XP_KEYWORDS:
911
+ case PelTag::XP_SUBJECT:
912
+ if ($format != PelFormat::BYTE) {
913
+ throw new PelUnexpectedFormatException($this->type, $tag, $format, PelFormat::BYTE);
914
+ }
915
+ return new PelEntryWindowsString($tag, $data->getBytes(), true);
916
+ }
917
+ // This point can be reached! Continue with default.
918
+ case self::GPS:
919
+ default:
920
+ /* Then handle the basic formats. */
921
+ switch ($format) {
922
+ case PelFormat::BYTE:
923
+ $v = new PelEntryByte($tag);
924
+ for ($i = 0; $i < $components; $i ++) {
925
+ $v->addNumber($data->getByte($i));
926
+ }
927
+ return $v;
928
+
929
+ case PelFormat::SBYTE:
930
+ $v = new PelEntrySByte($tag);
931
+ for ($i = 0; $i < $components; $i ++) {
932
+ $v->addNumber($data->getSByte($i));
933
+ }
934
+ return $v;
935
+
936
+ case PelFormat::ASCII:
937
+ // cut off string after the first nul byte
938
+ $canonicalString = strstr($data->getBytes(0), "\0", true);
939
+ if ($canonicalString !== false) {
940
+ return new PelEntryAscii($tag, $canonicalString);
941
+ }
942
+ // TODO throw exception if string isn't nul-terminated
943
+ return new PelEntryAscii($tag, $data->getBytes(0));
944
+
945
+ case PelFormat::SHORT:
946
+ $v = new PelEntryShort($tag);
947
+ for ($i = 0; $i < $components; $i ++) {
948
+ $v->addNumber($data->getShort($i * 2));
949
+ }
950
+ return $v;
951
+
952
+ case PelFormat::SSHORT:
953
+ $v = new PelEntrySShort($tag);
954
+ for ($i = 0; $i < $components; $i ++) {
955
+ $v->addNumber($data->getSShort($i * 2));
956
+ }
957
+ return $v;
958
+
959
+ case PelFormat::LONG:
960
+ $v = new PelEntryLong($tag);
961
+ for ($i = 0; $i < $components; $i ++) {
962
+ $v->addNumber($data->getLong($i * 4));
963
+ }
964
+ return $v;
965
+
966
+ case PelFormat::SLONG:
967
+ $v = new PelEntrySLong($tag);
968
+ for ($i = 0; $i < $components; $i ++) {
969
+ $v->addNumber($data->getSLong($i * 4));
970
+ }
971
+ return $v;
972
+
973
+ case PelFormat::RATIONAL:
974
+ $v = new PelEntryRational($tag);
975
+ for ($i = 0; $i < $components; $i ++) {
976
+ $v->addNumber($data->getRational($i * 8));
977
+ }
978
+ return $v;
979
+
980
+ case PelFormat::SRATIONAL:
981
+ $v = new PelEntrySRational($tag);
982
+ for ($i = 0; $i < $components; $i ++) {
983
+ $v->addNumber($data->getSRational($i * 8));
984
+ }
985
+ return $v;
986
+
987
+ case PelFormat::UNDEFINED:
988
+ return new PelEntryUndefined($tag, $data->getBytes());
989
+
990
+ default:
991
+ throw new PelException('Unsupported format: %s', PelFormat::getName($format));
992
+ }
993
+ }
994
+ }
995
+
996
+ /**
997
+ * Extract thumbnail data safely.
998
+ *
999
+ * It is safe to call this method repeatedly with either the offset
1000
+ * or the length set to zero, since it requires both of these
1001
+ * arguments to be positive before the thumbnail is extracted.
1002
+ *
1003
+ * When both parameters are set it will check the length against the
1004
+ * available data and adjust as necessary. Only then is the
1005
+ * thumbnail data loaded.
1006
+ *
1007
+ * @param PelDataWindow $d
1008
+ * the data from which the thumbnail will be
1009
+ * extracted.
1010
+ * @param integer $offset
1011
+ * the offset into the data.
1012
+ * @param integer $length
1013
+ * the length of the thumbnail.
1014
+ * @throws PelIfdException
1015
+ * @throws PelDataWindowWindowException
1016
+ */
1017
+ private function safeSetThumbnail(PelDataWindow $d, $offset, $length)
1018
+ {
1019
+ /*
1020
+ * Load the thumbnail if both the offset and the length is
1021
+ * available.
1022
+ */
1023
+ if ($offset > 0 && $length > 0) {
1024
+ /*
1025
+ * Some images have a broken length, so we try to carefully
1026
+ * check the length before we store the thumbnail.
1027
+ */
1028
+ if ($offset + $length > $d->getSize()) {
1029
+ Pel::maybeThrow(new PelIfdException('Thumbnail length %d bytes ' . 'adjusted to %d bytes.', $length, $d->getSize() - $offset));
1030
+ $length = $d->getSize() - $offset;
1031
+ }
1032
+
1033
+ /* Now set the thumbnail normally. */
1034
+ try {
1035
+ $this->setThumbnail($d->getClone($offset, $length));
1036
+ } catch (PelDataWindowWindowException $e) {
1037
+ Pel::maybeThrow(new PelIfdException($e->getMessage()));
1038
+ }
1039
+ }
1040
+ }
1041
+
1042
+ /**
1043
+ * Set thumbnail data.
1044
+ *
1045
+ * Use this to embed an arbitrary JPEG image within this IFD. The
1046
+ * data will be checked to ensure that it has a proper {@link
1047
+ * PelJpegMarker::EOI} at the end. If not, then the length is
1048
+ * adjusted until one if found. An {@link PelIfdException} might be
1049
+ * thrown (depending on {@link Pel::$strict}) this case.
1050
+ *
1051
+ * @param PelDataWindow $d
1052
+ * the thumbnail data.
1053
+ * @throws PelIfdException
1054
+ */
1055
+ public function setThumbnail(PelDataWindow $d)
1056
+ {
1057
+ $size = $d->getSize();
1058
+ /* Now move backwards until we find the EOI JPEG marker. */
1059
+ while ($d->getByte($size - 2) != 0xFF || $d->getByte($size - 1) != PelJpegMarker::EOI) {
1060
+ $size --;
1061
+ }
1062
+
1063
+ if ($size != $d->getSize()) {
1064
+ Pel::maybeThrow(new PelIfdException('Decrementing thumbnail size ' . 'to %d bytes', $size));
1065
+ }
1066
+ $this->thumb_data = $d->getClone(0, $size);
1067
+ }
1068
+
1069
+ /**
1070
+ * Get the type of this directory.
1071
+ *
1072
+ * @return int of {@link PelIfd::IFD0}, {@link PelIfd::IFD1}, {@link
1073
+ * PelIfd::EXIF}, {@link PelIfd::GPS}, or {@link
1074
+ * PelIfd::INTEROPERABILITY}.
1075
+ */
1076
+ public function getType()
1077
+ {
1078
+ return $this->type;
1079
+ }
1080
+
1081
+ /**
1082
+ * Is a given tag valid for this IFD?
1083
+ *
1084
+ * Different types of IFDs can contain different kinds of tags ---
1085
+ * the {@link IFD0} type, for example, cannot contain a {@link
1086
+ * PelTag::GPS_LONGITUDE} tag.
1087
+ *
1088
+ * A special exception is tags with values above 0xF000. They are
1089
+ * treated as private tags and will be allowed everywhere (use this
1090
+ * for testing or for implementing your own types of tags).
1091
+ *
1092
+ * @param integer $tag
1093
+ * the tag.
1094
+ * @return boolean true if the tag is considered valid in this IFD,
1095
+ * false otherwise.
1096
+ * @see getValidTags()
1097
+ */
1098
+ public function isValidTag($tag)
1099
+ {
1100
+ return $tag > 0xF000 || in_array($tag, $this->getValidTags());
1101
+ }
1102
+
1103
+ /**
1104
+ * Returns a list of valid tags for this IFD.
1105
+ *
1106
+ * @return array an array of {@link PelTag}s which are valid for
1107
+ * this IFD.
1108
+ */
1109
+ public function getValidTags()
1110
+ {
1111
+ $tp = $this->type;
1112
+ if ($tp === self::IFD1) {
1113
+ // return the same for IFD0 and IFD1
1114
+ $tp = self::IFD0;
1115
+ }
1116
+ if (array_key_exists($tp, self::VALID_TAGS)) {
1117
+ return self::VALID_TAGS[$tp];
1118
+ }
1119
+ }
1120
+
1121
+ /**
1122
+ * Get the name of an IFD type.
1123
+ *
1124
+ * @param integer $type
1125
+ * one of {@link PelIfd::IFD0}, {@link PelIfd::IFD1},
1126
+ * {@link PelIfd::EXIF}, {@link PelIfd::GPS}, or {@link
1127
+ * PelIfd::INTEROPERABILITY}.
1128
+ * @return string the name of type.
1129
+ */
1130
+ public static function getTypeName($type)
1131
+ {
1132
+ if (array_key_exists($type, self::TYPE_NAMES)) {
1133
+ return self::TYPE_NAMES[$type];
1134
+ }
1135
+ throw new PelIfdException('Unknown IFD type: %d', $type);
1136
+ }
1137
+
1138
+ /**
1139
+ * Get the name of this directory.
1140
+ *
1141
+ * @return string the name of this directory.
1142
+ */
1143
+ public function getName()
1144
+ {
1145
+ return $this->getTypeName($this->type);
1146
+ }
1147
+
1148
+ /**
1149
+ * Adds an entry to the directory.
1150
+ *
1151
+ * @param PelEntry $e
1152
+ * the entry that will be added. If the entry is not
1153
+ * valid in this IFD (as per {@link isValidTag()}) an
1154
+ * {@link PelInvalidDataException} is thrown.
1155
+ * @todo The entry will be identified with its tag, so each
1156
+ * directory can only contain one entry with each tag. Is this a
1157
+ * bug?
1158
+ */
1159
+ public function addEntry(PelEntry $e)
1160
+ {
1161
+ if ($this->isValidTag($e->getTag())) {
1162
+ $e->setIfdType($this->type);
1163
+ $this->entries[$e->getTag()] = $e;
1164
+ } else {
1165
+ throw new PelInvalidDataException("IFD %s cannot hold\n%s", $this->getName(), $e->__toString());
1166
+ }
1167
+ }
1168
+
1169
+ /**
1170
+ * Does a given tag exist in this IFD?
1171
+ *
1172
+ * This methods is part of the ArrayAccess SPL interface for
1173
+ * overriding array access of objects, it allows you to check for
1174
+ * existance of an entry in the IFD:
1175
+ *
1176
+ * <code>
1177
+ * if (isset($ifd[PelTag::FNUMBER]))
1178
+ * // ... do something with the F-number.
1179
+ * </code>
1180
+ *
1181
+ * @param integer $tag
1182
+ * the offset to check.
1183
+ * @return boolean whether the tag exists.
1184
+ */
1185
+ #[\ReturnTypeWillChange]
1186
+ public function offsetExists($tag)
1187
+ {
1188
+ return isset($this->entries[$tag]);
1189
+ }
1190
+
1191
+ /**
1192
+ * Retrieve a given tag from this IFD.
1193
+ *
1194
+ * This methods is part of the ArrayAccess SPL interface for
1195
+ * overriding array access of objects, it allows you to read entries
1196
+ * from the IFD the same was as for an array:
1197
+ *
1198
+ * <code>
1199
+ * $entry = $ifd[PelTag::FNUMBER];
1200
+ * </code>
1201
+ *
1202
+ * @param integer $tag
1203
+ * the tag to return. It is an error to ask for a tag
1204
+ * which is not in the IFD, just like asking for a non-existant
1205
+ * array entry.
1206
+ * @return PelEntry the entry.
1207
+ */
1208
+ #[\ReturnTypeWillChange]
1209
+ public function offsetGet($tag)
1210
+ {
1211
+ return $this->entries[$tag];
1212
+ }
1213
+
1214
+ /**
1215
+ * Set or update a given tag in this IFD.
1216
+ *
1217
+ * This methods is part of the ArrayAccess SPL interface for
1218
+ * overriding array access of objects, it allows you to add new
1219
+ * entries or replace esisting entries by doing:
1220
+ *
1221
+ * <code>
1222
+ * $ifd[PelTag::EXPOSURE_BIAS_VALUE] = $entry;
1223
+ * </code>
1224
+ *
1225
+ * Note that the actual array index passed is ignored! Instead the
1226
+ * {@link PelTag} from the entry is used.
1227
+ *
1228
+ * @param integer $tag
1229
+ * unused.
1230
+ * @param PelEntry $e
1231
+ * the new value.
1232
+ * @throws PelInvalidArgumentException
1233
+ */
1234
+ #[\ReturnTypeWillChange]
1235
+ public function offsetSet($tag, $e)
1236
+ {
1237
+ if ($e instanceof PelEntry) {
1238
+ $tag = $e->getTag();
1239
+ $this->entries[$tag] = $e;
1240
+ } else {
1241
+ throw new PelInvalidArgumentException('Argument "%s" must be a PelEntry.', $e);
1242
+ }
1243
+ }
1244
+
1245
+ /**
1246
+ * Unset a given tag in this IFD.
1247
+ *
1248
+ * This methods is part of the ArrayAccess SPL interface for
1249
+ * overriding array access of objects, it allows you to delete
1250
+ * entries in the IFD by doing:
1251
+ *
1252
+ * <code>
1253
+ * unset($ifd[PelTag::EXPOSURE_BIAS_VALUE])
1254
+ * </code>
1255
+ *
1256
+ * @param integer $tag
1257
+ * the offset to delete.
1258
+ */
1259
+ #[\ReturnTypeWillChange]
1260
+ public function offsetUnset($tag)
1261
+ {
1262
+ unset($this->entries[$tag]);
1263
+ }
1264
+
1265
+ /**
1266
+ * Retrieve an entry.
1267
+ *
1268
+ * @param integer $tag
1269
+ * the tag identifying the entry.
1270
+ * @return PelEntry the entry associated with the tag, or null if no
1271
+ * such entry exists.
1272
+ */
1273
+ public function getEntry($tag)
1274
+ {
1275
+ if (isset($this->entries[$tag])) {
1276
+ return $this->entries[$tag];
1277
+ } else {
1278
+ return null;
1279
+ }
1280
+ }
1281
+
1282
+ /**
1283
+ * Returns all entries contained in this IFD.
1284
+ *
1285
+ * @return array an array of {@link PelEntry} objects, or rather
1286
+ * descendant classes. The array has {@link PelTag}s as keys
1287
+ * and the entries as values.
1288
+ * @see PelIfd::getEntry
1289
+ * @see PelIfd::getIterator
1290
+ */
1291
+ public function getEntries()
1292
+ {
1293
+ return $this->entries;
1294
+ }
1295
+
1296
+ /**
1297
+ * Return an iterator for all entries contained in this IFD.
1298
+ *
1299
+ * Used with foreach as in
1300
+ *
1301
+ * <code>
1302
+ * foreach ($ifd as $tag => $entry) {
1303
+ * // $tag is now a PelTag and $entry is a PelEntry object.
1304
+ * }
1305
+ * </code>
1306
+ *
1307
+ * @return \ArrayIterator an iterator using the {@link PelTag tags} as
1308
+ * keys and the entries as values.
1309
+ */
1310
+ #[\ReturnTypeWillChange]
1311
+ public function getIterator()
1312
+ {
1313
+ return new \ArrayIterator($this->entries);
1314
+ }
1315
+
1316
+ /**
1317
+ * Returns available thumbnail data.
1318
+ *
1319
+ * @return string the bytes in the thumbnail, if any. If the IFD
1320
+ * does not contain any thumbnail data, the empty string is
1321
+ * returned.
1322
+ * @throws PelDataWindowOffsetException
1323
+ * @todo Throw an exception instead when no data is available?
1324
+ * @todo Return the $this->thumb_data object instead of the bytes?
1325
+ */
1326
+ public function getThumbnailData()
1327
+ {
1328
+ if ($this->thumb_data !== null) {
1329
+ return $this->thumb_data->getBytes();
1330
+ } else {
1331
+ return '';
1332
+ }
1333
+ }
1334
+
1335
+ /**
1336
+ * Make this directory point to a new directory.
1337
+ *
1338
+ * @param PelIfd $i
1339
+ * the IFD that this directory will point to.
1340
+ */
1341
+ public function setNextIfd(PelIfd $i)
1342
+ {
1343
+ $this->next = $i;
1344
+ }
1345
+
1346
+ /**
1347
+ * Return the IFD pointed to by this directory.
1348
+ *
1349
+ * @return PelIfd the next IFD, following this IFD. If this is the
1350
+ * last IFD, null is returned.
1351
+ */
1352
+ public function getNextIfd()
1353
+ {
1354
+ return $this->next;
1355
+ }
1356
+
1357
+ /**
1358
+ * Check if this is the last IFD.
1359
+ *
1360
+ * @return boolean true if there are no following IFD, false
1361
+ * otherwise.
1362
+ */
1363
+ public function isLastIfd()
1364
+ {
1365
+ return $this->next === null;
1366
+ }
1367
+
1368
+ /**
1369
+ * Add a sub-IFD.
1370
+ *
1371
+ * Any previous sub-IFD of the same type will be overwritten.
1372
+ *
1373
+ * @param PelIfd $sub
1374
+ * the sub IFD. The type of must be one of {@link
1375
+ * PelIfd::EXIF}, {@link PelIfd::GPS}, or {@link
1376
+ * PelIfd::INTEROPERABILITY}.
1377
+ */
1378
+ public function addSubIfd(PelIfd $sub)
1379
+ {
1380
+ $this->sub[$sub->type] = $sub;
1381
+ }
1382
+
1383
+ /**
1384
+ * Return a sub IFD.
1385
+ *
1386
+ * @param integer $type
1387
+ * the type of the sub IFD. This must be one of {@link
1388
+ * PelIfd::EXIF}, {@link PelIfd::GPS}, or {@link
1389
+ * PelIfd::INTEROPERABILITY}.
1390
+ * @return PelIfd the IFD associated with the type, or null if that
1391
+ * sub IFD does not exist.
1392
+ */
1393
+ public function getSubIfd($type)
1394
+ {
1395
+ if (isset($this->sub[$type])) {
1396
+ return $this->sub[$type];
1397
+ } else {
1398
+ return null;
1399
+ }
1400
+ }
1401
+
1402
+ /**
1403
+ * Get all sub IFDs.
1404
+ *
1405
+ * @return array an associative array with (IFD-type, {@link
1406
+ * PelIfd}) pairs.
1407
+ */
1408
+ public function getSubIfds()
1409
+ {
1410
+ return $this->sub;
1411
+ }
1412
+
1413
+ /**
1414
+ * Turn this directory into bytes.
1415
+ *
1416
+ * This directory will be turned into a byte string, with the
1417
+ * specified byte order. The offsets will be calculated from the
1418
+ * offset given.
1419
+ *
1420
+ * @param integer $offset
1421
+ * the offset of the first byte of this directory.
1422
+ * @param boolean $order
1423
+ * the byte order that should be used when
1424
+ * turning integers into bytes. This should be one of {@link
1425
+ * PelConvert::LITTLE_ENDIAN} and {@link PelConvert::BIG_ENDIAN}.
1426
+ */
1427
+ public function getBytes($offset, $order)
1428
+ {
1429
+ $bytes = '';
1430
+ $extra_bytes = '';
1431
+
1432
+ Pel::debug('Bytes from IDF will start at offset %d within Exif data', $offset);
1433
+
1434
+ $n = count($this->entries) + count($this->sub);
1435
+ if ($this->thumb_data !== null) {
1436
+ /*
1437
+ * We need two extra entries for the thumbnail offset and
1438
+ * length.
1439
+ */
1440
+ $n += 2;
1441
+ }
1442
+
1443
+ $bytes .= PelConvert::shortToBytes($n, $order);
1444
+
1445
+ /*
1446
+ * Initialize offset of extra data. This included the bytes
1447
+ * preceding this IFD, the bytes needed for the count of entries,
1448
+ * the entries themselves (and sub entries), the extra data in the
1449
+ * entries, and the IFD link.
1450
+ */
1451
+ $end = $offset + 2 + 12 * $n + 4;
1452
+
1453
+ foreach ($this->entries as $tag => $entry) {
1454
+ /* Each entry is 12 bytes long. */
1455
+ $bytes .= PelConvert::shortToBytes($entry->getTag(), $order);
1456
+ $bytes .= PelConvert::shortToBytes($entry->getFormat(), $order);
1457
+ $bytes .= PelConvert::longToBytes($entry->getComponents(), $order);
1458
+
1459
+ /*
1460
+ * Size? If bigger than 4 bytes, the actual data is not in
1461
+ * the entry but somewhere else.
1462
+ */
1463
+ $data = $entry->getBytes($order);
1464
+ $s = strlen($data);
1465
+ if ($s > 4) {
1466
+ Pel::debug('Data size %d too big, storing at offset %d instead.', $s, $end);
1467
+ $bytes .= PelConvert::longToBytes($end, $order);
1468
+ $extra_bytes .= $data;
1469
+ $end += $s;
1470
+ } else {
1471
+ Pel::debug('Data size %d fits.', $s);
1472
+ /*
1473
+ * Copy data directly, pad with NULL bytes as necessary to
1474
+ * fill out the four bytes available.
1475
+ */
1476
+ $bytes .= $data . str_repeat(chr(0), 4 - $s);
1477
+ }
1478
+ }
1479
+
1480
+ if ($this->thumb_data !== null) {
1481
+ Pel::debug('Appending %d bytes of thumbnail data at %d', $this->thumb_data->getSize(), $end);
1482
+ // TODO: make PelEntry a class that can be constructed with
1483
+ // arguments corresponding to the newt four lines.
1484
+ $bytes .= PelConvert::shortToBytes(PelTag::JPEG_INTERCHANGE_FORMAT_LENGTH, $order);
1485
+ $bytes .= PelConvert::shortToBytes(PelFormat::LONG, $order);
1486
+ $bytes .= PelConvert::longToBytes(1, $order);
1487
+ $bytes .= PelConvert::longToBytes($this->thumb_data->getSize(), $order);
1488
+
1489
+ $bytes .= PelConvert::shortToBytes(PelTag::JPEG_INTERCHANGE_FORMAT, $order);
1490
+ $bytes .= PelConvert::shortToBytes(PelFormat::LONG, $order);
1491
+ $bytes .= PelConvert::longToBytes(1, $order);
1492
+ $bytes .= PelConvert::longToBytes($end, $order);
1493
+
1494
+ $extra_bytes .= $this->thumb_data->getBytes();
1495
+ $end += $this->thumb_data->getSize();
1496
+ }
1497
+
1498
+ /* Find bytes from sub IFDs. */
1499
+ $sub_bytes = '';
1500
+ foreach ($this->sub as $type => $sub) {
1501
+ if ($type == PelIfd::EXIF) {
1502
+ $tag = PelTag::EXIF_IFD_POINTER;
1503
+ } elseif ($type == PelIfd::GPS) {
1504
+ $tag = PelTag::GPS_INFO_IFD_POINTER;
1505
+ } elseif ($type == PelIfd::INTEROPERABILITY) {
1506
+ $tag = PelTag::INTEROPERABILITY_IFD_POINTER;
1507
+ } else {
1508
+ // PelConvert::BIG_ENDIAN is the default used by PelConvert
1509
+ $tag = PelConvert::BIG_ENDIAN;
1510
+ }
1511
+ /* Make an aditional entry with the pointer. */
1512
+ $bytes .= PelConvert::shortToBytes($tag, $order);
1513
+ /* Next the format, which is always unsigned long. */
1514
+ $bytes .= PelConvert::shortToBytes(PelFormat::LONG, $order);
1515
+ /* There is only one component. */
1516
+ $bytes .= PelConvert::longToBytes(1, $order);
1517
+
1518
+ $data = $sub->getBytes($end, $order);
1519
+ $s = strlen($data);
1520
+ $sub_bytes .= $data;
1521
+
1522
+ $bytes .= PelConvert::longToBytes($end, $order);
1523
+ $end += $s;
1524
+ }
1525
+
1526
+ /* Make link to next IFD, if any */
1527
+ if ($this->isLastIFD()) {
1528
+ $link = 0;
1529
+ } else {
1530
+ $link = $end;
1531
+ }
1532
+
1533
+ Pel::debug('Link to next IFD: %d', $link);
1534
+
1535
+ $bytes .= PelConvert::longtoBytes($link, $order);
1536
+
1537
+ $bytes .= $extra_bytes . $sub_bytes;
1538
+
1539
+ if (! $this->isLastIfd()) {
1540
+ $bytes .= $this->next->getBytes($end, $order);
1541
+ }
1542
+ return $bytes;
1543
+ }
1544
+
1545
+ /**
1546
+ * Turn this directory into text.
1547
+ *
1548
+ * @return string information about the directory, mainly for
1549
+ * debugging.
1550
+ */
1551
+ public function __toString()
1552
+ {
1553
+ $str = Pel::fmt("Dumping IFD %s with %d entries...\n", $this->getName(), count($this->entries));
1554
+
1555
+ foreach ($this->entries as $entry) {
1556
+ $str .= $entry->__toString();
1557
+ }
1558
+ $str .= Pel::fmt("Dumping %d sub IFDs...\n", count($this->sub));
1559
+
1560
+ foreach ($this->sub as $ifd) {
1561
+ $str .= $ifd->__toString();
1562
+ }
1563
+ if ($this->next !== null) {
1564
+ $str .= $this->next->__toString();
1565
+ }
1566
+ return $str;
1567
+ }
1568
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelIfdException.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007, 2008 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with Exif IFDs.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Exception indicating a general problem with the IFD.
37
+ *
38
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
39
+ * @package PEL
40
+ * @subpackage Exception
41
+ */
42
+ namespace lsolesen\pel;
43
+
44
+ class PelIfdException extends PelException
45
+ {
46
+ // do nothing
47
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelIllegalFormatException.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Exception indicating that an unexpected format was found.
28
+ *
29
+ * The documentation for each tag in {@link PelTag} will detail any
30
+ * constrains.
31
+ *
32
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
33
+ * @package PEL
34
+ * @subpackage Exception
35
+ */
36
+ namespace lsolesen\pel;
37
+
38
+ class PelIllegalFormatException extends PelException
39
+ {
40
+
41
+ /**
42
+ * Construct a new exception indicating an illegal format.
43
+ *
44
+ * @param int $type
45
+ * the type of IFD.
46
+ */
47
+ public function __construct($type)
48
+ {
49
+ parent::__construct('Unknown format: 0x%X', $type);
50
+ }
51
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelInvalidArgumentException.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Standard PEL exception.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Exception throw if an invalid argument is passed.
37
+ *
38
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
39
+ * @package PEL
40
+ * @subpackage Exception
41
+ */
42
+ namespace lsolesen\pel;
43
+
44
+ class PelInvalidArgumentException extends PelException
45
+ {
46
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelInvalidDataException.php ADDED
@@ -0,0 +1,46 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Standard PEL exception.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Exception throw if invalid data is found.
37
+ *
38
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
39
+ * @package PEL
40
+ * @subpackage Exception
41
+ */
42
+ namespace lsolesen\pel;
43
+
44
+ class PelInvalidDataException extends PelException
45
+ {
46
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpeg.php ADDED
@@ -0,0 +1,659 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class for handling JPEG data.
28
+ *
29
+ * The {@link PelJpeg} class defined here provides an abstraction for
30
+ * dealing with a JPEG file. The file will be contain a number of
31
+ * sections containing some {@link PelJpegContent content} identified
32
+ * by a {@link PelJpegMarker marker}.
33
+ *
34
+ * The {@link getExif()} method is used get hold of the {@link
35
+ * PelJpegMarker::APP1 APP1} section which stores Exif data. So if
36
+ * the name of the JPEG file is stored in $filename, then one would
37
+ * get hold of the Exif data by saying:
38
+ *
39
+ * <code>
40
+ * $jpeg = new PelJpeg($filename);
41
+ * $exif = $jpeg->getExif();
42
+ * $tiff = $exif->getTiff();
43
+ * $ifd0 = $tiff->getIfd();
44
+ * $exif = $ifd0->getSubIfd(PelIfd::EXIF);
45
+ * $ifd1 = $ifd0->getNextIfd();
46
+ * </code>
47
+ *
48
+ * The $idf0 and $ifd1 variables will then be two {@link PelTiff TIFF}
49
+ * {@link PelIfd Image File Directories}, in which the data is stored
50
+ * under the keys found in {@link PelTag}.
51
+ *
52
+ * Should one have some image data (in the form of a {@link
53
+ * PelDataWindow}) of an unknown type, then the {@link
54
+ * PelJpeg::isValid()} function is handy: it will quickly test if the
55
+ * data could be valid JPEG data. The {@link PelTiff::isValid()}
56
+ * function does the same for TIFF images.
57
+ *
58
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
59
+ * @package PEL
60
+ */
61
+ namespace lsolesen\pel;
62
+
63
+ class PelJpeg
64
+ {
65
+
66
+ /**
67
+ * The sections in the JPEG data.
68
+ *
69
+ * A JPEG file is built up as a sequence of sections, each section
70
+ * is identified with a {@link PelJpegMarker}. Some sections can
71
+ * occur more than once in the JPEG stream (the {@link
72
+ * PelJpegMarker::DQT DQT} and {@link PelJpegMarker::DHT DTH}
73
+ * markers for example) and so this is an array of ({@link
74
+ * PelJpegMarker}, {@link PelJpegContent}) pairs.
75
+ *
76
+ * The content can be either generic {@link PelJpegContent JPEG
77
+ * content} or {@link PelExif Exif data}.
78
+ *
79
+ * @var array
80
+ */
81
+ protected $sections = [];
82
+
83
+ /**
84
+ * The JPEG image data.
85
+ *
86
+ * @var PelDataWindow
87
+ */
88
+ private $jpeg_data = null;
89
+
90
+ /**
91
+ * Construct a new JPEG object.
92
+ *
93
+ * The new object will be empty unless an argument is given from
94
+ * which it can initialize itself. This can either be the filename
95
+ * of a JPEG image, a {@link PelDataWindow} object or a PHP image
96
+ * resource handle.
97
+ *
98
+ * New Exif data (in the form of a {@link PelExif} object) can be
99
+ * inserted with the {@link setExif()} method:
100
+ *
101
+ * <code>
102
+ * $jpeg = new PelJpeg($data);
103
+ * // Create container for the Exif information:
104
+ * $exif = new PelExif();
105
+ * // Now Add a PelTiff object with a PelIfd object with one or more
106
+ * // PelEntry objects to $exif... Finally add $exif to $jpeg:
107
+ * $jpeg->setExif($exif);
108
+ * </code>
109
+ *
110
+ * @param boolean|string|PelDataWindow|resource|\GDImage $data
111
+ * the data that this JPEG. This can either be a
112
+ * filename, a {@link PelDataWindow} object, or a PHP image resource
113
+ * handle.
114
+ * @throws PelInvalidArgumentException
115
+ */
116
+ public function __construct($data = false)
117
+ {
118
+ if ($data === false) {
119
+ return;
120
+ } elseif (is_string($data)) {
121
+ Pel::debug('Initializing PelJpeg object from %s', $data);
122
+ $this->loadFile($data);
123
+ } elseif ($data instanceof PelDataWindow) {
124
+ Pel::debug('Initializing PelJpeg object from PelDataWindow.');
125
+ $this->load($data);
126
+ } elseif ((is_resource($data) && get_resource_type($data) == 'gd') || (PHP_VERSION_ID >= 80000 && is_object($data) && $data instanceof \GDImage)) {
127
+ Pel::debug('Initializing PelJpeg object from image resource.');
128
+ $this->load(new PelDataWindow($data));
129
+ } else {
130
+ throw new PelInvalidArgumentException('Bad type for $data: %s', gettype($data));
131
+ }
132
+ }
133
+
134
+ /**
135
+ * JPEG sections start with 0xFF.
136
+ * The first byte that is not
137
+ * 0xFF is a marker (hopefully).
138
+ *
139
+ * @param PelDataWindow $d
140
+ *
141
+ * @return integer
142
+ */
143
+ protected static function getJpgSectionStart($d)
144
+ {
145
+ for ($i = 0; $i < 7; $i ++) {
146
+ if ($d->getByte($i) != 0xFF) {
147
+ break;
148
+ }
149
+ }
150
+ return $i;
151
+ }
152
+
153
+ /**
154
+ * Load data into a JPEG object.
155
+ *
156
+ * The data supplied will be parsed and turned into an object
157
+ * structure representing the image. This structure can then be
158
+ * manipulated and later turned back into an string of bytes.
159
+ *
160
+ * This methods can be called at any time after a JPEG object has
161
+ * been constructed, also after the {@link appendSection()} has been
162
+ * called to append custom sections. Loading several JPEG images
163
+ * into one object will accumulate the sections, but there will only
164
+ * be one {@link PelJpegMarker::SOS} section at any given time.
165
+ *
166
+ * @param PelDataWindow $d
167
+ * the data that will be turned into JPEG
168
+ * sections.
169
+ */
170
+ public function load(PelDataWindow $d)
171
+ {
172
+ Pel::debug('Parsing %d bytes...', $d->getSize());
173
+
174
+ /* JPEG data is stored in big-endian format. */
175
+ $d->setByteOrder(PelConvert::BIG_ENDIAN);
176
+
177
+ /*
178
+ * Run through the data to read the sections in the image. After
179
+ * each section is read, the start of the data window will be
180
+ * moved forward, and after the last section we'll terminate with
181
+ * no data left in the window.
182
+ */
183
+ while ($d->getSize() > 0) {
184
+ $i = $this->getJpgSectionStart($d);
185
+
186
+ $marker = $d->getByte($i);
187
+
188
+ if (! PelJpegMarker::isValid($marker)) {
189
+ throw new PelJpegInvalidMarkerException($marker, $i);
190
+ }
191
+
192
+ /*
193
+ * Move window so first byte becomes first byte in this
194
+ * section.
195
+ */
196
+ $d->setWindowStart($i + 1);
197
+
198
+ if ($marker == PelJpegMarker::SOI || $marker == PelJpegMarker::EOI) {
199
+ $content = new PelJpegContent(new PelDataWindow());
200
+ $this->appendSection($marker, $content);
201
+ } else {
202
+ /*
203
+ * Read the length of the section. The length includes the
204
+ * two bytes used to store the length.
205
+ */
206
+ $len = $d->getShort(0) - 2;
207
+
208
+ Pel::debug('Found %s section of length %d', PelJpegMarker::getName($marker), $len);
209
+
210
+ /* Skip past the length. */
211
+ $d->setWindowStart(2);
212
+
213
+ if ($marker == PelJpegMarker::APP1) {
214
+ try {
215
+ $content = new PelExif();
216
+ $content->load($d->getClone(0, $len));
217
+ } catch (PelInvalidDataException $e) {
218
+ /*
219
+ * We store the data as normal JPEG content if it could
220
+ * not be parsed as Exif data.
221
+ */
222
+ $content = new PelJpegContent($d->getClone(0, $len));
223
+ }
224
+
225
+ $this->appendSection($marker, $content);
226
+ /* Skip past the data. */
227
+ $d->setWindowStart($len);
228
+ } elseif ($marker == PelJpegMarker::COM) {
229
+ $content = new PelJpegComment();
230
+ $content->load($d->getClone(0, $len));
231
+ $this->appendSection($marker, $content);
232
+ $d->setWindowStart($len);
233
+ } else {
234
+ $content = new PelJpegContent($d->getClone(0, $len));
235
+ $this->appendSection($marker, $content);
236
+ /* Skip past the data. */
237
+ $d->setWindowStart($len);
238
+
239
+ /* In case of SOS, image data will follow. */
240
+ if ($marker == PelJpegMarker::SOS) {
241
+ /*
242
+ * Some images have some trailing (garbage?) following the
243
+ * EOI marker. To handle this we seek backwards until we
244
+ * find the EOI marker. Any trailing content is stored as
245
+ * a PelJpegContent object.
246
+ */
247
+
248
+ $length = $d->getSize();
249
+ while ($d->getByte($length - 2) != 0xFF || $d->getByte($length - 1) != PelJpegMarker::EOI) {
250
+ $length --;
251
+ }
252
+
253
+ $this->jpeg_data = $d->getClone(0, $length - 2);
254
+ Pel::debug('JPEG data: ' . $this->jpeg_data->__toString());
255
+
256
+ /* Append the EOI. */
257
+ $this->appendSection(PelJpegMarker::EOI, new PelJpegContent(new PelDataWindow()));
258
+
259
+ /* Now check to see if there are any trailing data. */
260
+ if ($length != $d->getSize()) {
261
+ Pel::maybeThrow(new PelException('Found trailing content ' . 'after EOI: %d bytes', $d->getSize() - $length));
262
+ $content = new PelJpegContent($d->getClone($length));
263
+ /*
264
+ * We don't have a proper JPEG marker for trailing
265
+ * garbage, so we just use 0x00...
266
+ */
267
+ $this->appendSection(0x00, $content);
268
+ }
269
+
270
+ /* Done with the loop. */
271
+ break;
272
+ }
273
+ }
274
+ }
275
+ } /* while ($d->getSize() > 0) */
276
+ }
277
+
278
+ /**
279
+ * Load data from a file into a JPEG object.
280
+ *
281
+ * @param string $filename.
282
+ * This must be a readable file.
283
+ * @return void
284
+ * @throws PelException if file could not be loaded
285
+ */
286
+ public function loadFile($filename)
287
+ {
288
+ $content = @file_get_contents($filename);
289
+ if ($content === false) {
290
+ throw new PelException('Can not open file "%s"', $filename);
291
+ } else {
292
+ $this->load(new PelDataWindow($content));
293
+ }
294
+ }
295
+
296
+ /**
297
+ * Set Exif data.
298
+ *
299
+ * Use this to set the Exif data in the image. This will overwrite
300
+ * any old Exif information in the image.
301
+ *
302
+ * @param PelExif $exif
303
+ * the Exif data.
304
+ */
305
+ public function setExif(PelExif $exif)
306
+ {
307
+ $app0_offset = 1;
308
+ $app1_offset = - 1;
309
+
310
+ /* Search through all sections looking for APP0 or APP1. */
311
+ $sections_count = count($this->sections);
312
+ for ($i = 0; $i < $sections_count; $i ++) {
313
+ if (! empty($this->sections[$i][0])) {
314
+ $section = $this->sections[$i];
315
+ if ($section[0] == PelJpegMarker::APP0) {
316
+ $app0_offset = $i;
317
+ } elseif (($section[0] == PelJpegMarker::APP1) && ($section[1] instanceof PelExif)) {
318
+ $app1_offset = $i;
319
+ break;
320
+ }
321
+ }
322
+ }
323
+
324
+ /*
325
+ * Store the Exif data at the appropriate place, either where the
326
+ * old Exif data was stored ($app1_offset) or right after APP0
327
+ * ($app0_offset+1).
328
+ */
329
+ if ($app1_offset > 0) {
330
+ $this->sections[$app1_offset][1] = $exif;
331
+ } else {
332
+ $this->insertSection(PelJpegMarker::APP1, $exif, $app0_offset + 1);
333
+ }
334
+ }
335
+
336
+ /**
337
+ * Set ICC data.
338
+ *
339
+ * Use this to set the ICC data in the image. This will overwrite
340
+ * any old ICC information in the image.
341
+ *
342
+ * @param PelJpegContent $icc
343
+ * the ICC data.
344
+ */
345
+ public function setICC(PelJpegContent $icc)
346
+ {
347
+ $app1_offset = 1;
348
+ $app2_offset = - 1;
349
+
350
+ /* Search through all sections looking for APP0 or APP1. */
351
+ $count_sections = count($this->sections);
352
+ for ($i = 0; $i < $count_sections; $i ++) {
353
+ if (! empty($this->sections[$i][0])) {
354
+ if ($this->sections[$i][0] == PelJpegMarker::APP1) {
355
+ $app1_offset = $i;
356
+ } elseif ($this->sections[$i][0] == PelJpegMarker::APP2) {
357
+ $app2_offset = $i;
358
+ break;
359
+ }
360
+ }
361
+ }
362
+
363
+ /*
364
+ * Store the Exif data at the appropriate place, either where the
365
+ * old Exif data was stored ($app1_offset) or right after APP0
366
+ * ($app0_offset+1).
367
+ */
368
+ if ($app2_offset > 0) {
369
+ $this->sections[$app1_offset][1] = $icc;
370
+ } else {
371
+ $this->insertSection(PelJpegMarker::APP2, $icc, $app1_offset + 1);
372
+ }
373
+ }
374
+
375
+ /**
376
+ * Get first valid APP1 Exif section data.
377
+ *
378
+ * Use this to get the @{link PelExif Exif data} stored.
379
+ *
380
+ * @return PelExif|null the Exif data found or null if the image has no
381
+ * Exif data.
382
+ */
383
+ public function getExif()
384
+ {
385
+ $sections_count = count($this->sections);
386
+ for ($i = 0; $i < $sections_count; $i ++) {
387
+ $section = $this->getSection(PelJpegMarker::APP1, $i);
388
+ if ($section instanceof PelExif) {
389
+ return $section;
390
+ }
391
+ }
392
+ return null;
393
+ }
394
+
395
+ /**
396
+ * Get ICC data.
397
+ *
398
+ * Use this to get the @{link PelJpegContent ICC data} stored.
399
+ *
400
+ * @return PelJpegContent|null the ICC data found or null if the image has no
401
+ * ICC data.
402
+ */
403
+ public function getICC()
404
+ {
405
+ $icc = $this->getSection(PelJpegMarker::APP2);
406
+ return $icc;
407
+ }
408
+
409
+ /**
410
+ * Clear any Exif data.
411
+ *
412
+ * This method will only clear @{link PelJpegMarker::APP1} EXIF sections found.
413
+ */
414
+ public function clearExif()
415
+ {
416
+ $idx = 0;
417
+ while ($idx < count($this->sections)) {
418
+ $s = $this->sections[$idx];
419
+ if (($s[0] == PelJpegMarker::APP1) && ($s[1] instanceof PelExif)) {
420
+ array_splice($this->sections, $idx, 1);
421
+ $idx --;
422
+ } else {
423
+ ++ $idx;
424
+ }
425
+ }
426
+ }
427
+
428
+ /**
429
+ * Append a new section.
430
+ *
431
+ * Used only when loading an image. If it used again later, then the
432
+ * section will end up after the @{link PelJpegMarker::EOI EOI
433
+ * marker} and will probably not be useful.
434
+ *
435
+ * Please use @{link setExif()} instead if you intend to add Exif
436
+ * information to an image as that function will know the right
437
+ * place to insert the data.
438
+ *
439
+ * @param integer $marker
440
+ * the marker identifying the new section.
441
+ * @param PelJpegContent $content
442
+ * the content of the new section.
443
+ */
444
+ public function appendSection($marker, PelJpegContent $content)
445
+ {
446
+ $this->sections[] = [
447
+ $marker,
448
+ $content
449
+ ];
450
+ }
451
+
452
+ /**
453
+ * Insert a new section.
454
+ *
455
+ * Please use @{link setExif()} instead if you intend to add Exif
456
+ * information to an image as that function will know the right
457
+ * place to insert the data.
458
+ *
459
+ * @param integer $marker
460
+ * the marker for the new section.
461
+ * @param PelJpegContent $content
462
+ * the content of the new section.
463
+ * @param integer $offset
464
+ * the offset where the new section will be inserted ---
465
+ * use 0 to insert it at the very beginning, use 1 to insert it
466
+ * between sections 1 and 2, etc.
467
+ */
468
+ public function insertSection($marker, PelJpegContent $content, $offset)
469
+ {
470
+ array_splice($this->sections, $offset, 0, [
471
+ [
472
+ $marker,
473
+ $content
474
+ ]
475
+ ]);
476
+ }
477
+
478
+ /**
479
+ * Get a section corresponding to a particular marker.
480
+ *
481
+ * Please use the {@link getExif()} if you just need the Exif data.
482
+ *
483
+ * This will search through the sections of this JPEG object,
484
+ * looking for a section identified with the specified {@link
485
+ * PelJpegMarker marker}. The {@link PelJpegContent content} will
486
+ * then be returned. The optional argument can be used to skip over
487
+ * some of the sections. So if one is looking for the, say, third
488
+ * {@link PelJpegMarker::DHT DHT} section one would do:
489
+ *
490
+ * <code>
491
+ * $dht3 = $jpeg->getSection(PelJpegMarker::DHT, 2);
492
+ * </code>
493
+ *
494
+ * @param integer $marker
495
+ * the marker identifying the section.
496
+ * @param integer $skip
497
+ * the number of sections to be skipped. This must be a
498
+ * non-negative integer.
499
+ * @return PelJpegContent|\lsolesen\pel\PelExif the content found, or null if there is no
500
+ * content available.
501
+ */
502
+ public function getSection($marker, $skip = 0)
503
+ {
504
+ foreach ($this->sections as $s) {
505
+ if ($s[0] == $marker) {
506
+ if ($skip > 0) {
507
+ $skip --;
508
+ } else {
509
+ return $s[1];
510
+ }
511
+ }
512
+ }
513
+
514
+ return null;
515
+ }
516
+
517
+ /**
518
+ * Get all sections.
519
+ *
520
+ * @return array an array of ({@link PelJpegMarker}, {@link
521
+ * PelJpegContent}) pairs. Each pair is an array with the {@link
522
+ * PelJpegMarker} as the first element and the {@link
523
+ * PelJpegContent} as the second element, so the return type is an
524
+ * array of arrays.
525
+ * So to loop through all the sections in a given JPEG image do
526
+ * this:
527
+ * <code>
528
+ * foreach ($jpeg->getSections() as $section) {
529
+ * $marker = $section[0];
530
+ * $content = $section[1];
531
+ * // Use $marker and $content here.
532
+ * }
533
+ * </code>
534
+ * instead of this:
535
+ * <code>
536
+ * foreach ($jpeg->getSections() as $marker => $content) {
537
+ * // Does not work the way you would think...
538
+ * }
539
+ * </code>
540
+ * The problem is that there could be several sections with the same
541
+ * marker, and thus a simple associative array does not suffice.
542
+ */
543
+ public function getSections()
544
+ {
545
+ return $this->sections;
546
+ }
547
+
548
+ /**
549
+ * Turn this JPEG object into bytes.
550
+ *
551
+ * The bytes returned by this method is ready to be stored in a file
552
+ * as a valid JPEG image. Use the {@link saveFile()} convenience
553
+ * method to do this.
554
+ *
555
+ * @return string bytes representing this JPEG object, including all
556
+ * its sections and their associated data.
557
+ */
558
+ public function getBytes()
559
+ {
560
+ $bytes = '';
561
+
562
+ foreach ($this->sections as $section) {
563
+ $m = $section[0];
564
+ $c = $section[1];
565
+
566
+ /* Write the marker */
567
+ $bytes .= "\xFF" . PelJpegMarker::getBytes($m);
568
+ /* Skip over empty markers. */
569
+ if ($m == PelJpegMarker::SOI || $m == PelJpegMarker::EOI) {
570
+ continue;
571
+ }
572
+
573
+ $data = $c->getBytes();
574
+ $size = strlen($data) + 2;
575
+
576
+ $bytes .= PelConvert::shortToBytes($size, PelConvert::BIG_ENDIAN);
577
+ $bytes .= $data;
578
+
579
+ /* In case of SOS, we need to write the JPEG data. */
580
+ if ($m == PelJpegMarker::SOS) {
581
+ $bytes .= $this->jpeg_data->getBytes();
582
+ }
583
+ }
584
+ return $bytes;
585
+ }
586
+
587
+ /**
588
+ * Save the JPEG object as a JPEG image in a file.
589
+ *
590
+ * @param string $filename
591
+ * the filename to save in. An existing file with the
592
+ * same name will be overwritten!
593
+ * @return integer|FALSE The number of bytes that were written to the
594
+ * file, or FALSE on failure.
595
+ */
596
+ public function saveFile($filename)
597
+ {
598
+ return file_put_contents($filename, $this->getBytes());
599
+ }
600
+
601
+ /**
602
+ * Make a string representation of this JPEG object.
603
+ *
604
+ * This is mainly usefull for debugging. It will show the structure
605
+ * of the image, and its sections.
606
+ *
607
+ * @return string debugging information about this JPEG object.
608
+ */
609
+ public function __toString()
610
+ {
611
+ $str = Pel::tra("Dumping JPEG data...\n");
612
+ $count_sections = count($this->sections);
613
+ for ($i = 0; $i < $count_sections; $i ++) {
614
+ $m = $this->sections[$i][0];
615
+ $c = $this->sections[$i][1];
616
+ $str .= Pel::fmt("Section %d (marker 0x%02X - %s):\n", $i, $m, PelJpegMarker::getName($m));
617
+ $str .= Pel::fmt(" Description: %s\n", PelJpegMarker::getDescription($m));
618
+
619
+ if ($m == PelJpegMarker::SOI || $m == PelJpegMarker::EOI) {
620
+ continue;
621
+ }
622
+
623
+ if ($c instanceof PelExif) {
624
+ $str .= Pel::tra(" Content : Exif data\n");
625
+ $str .= $c->__toString() . "\n";
626
+ } elseif ($c instanceof PelJpegComment) {
627
+ $str .= Pel::fmt(" Content : %s\n", $c->getValue());
628
+ } else {
629
+ $str .= Pel::tra(" Content : Unknown\n");
630
+ }
631
+ }
632
+
633
+ return $str;
634
+ }
635
+
636
+ /**
637
+ * Test data to see if it could be a valid JPEG image.
638
+ *
639
+ * The function will only look at the first few bytes of the data,
640
+ * and try to determine if it could be a valid JPEG image based on
641
+ * those bytes. This means that the check is more like a heuristic
642
+ * than a rigorous check.
643
+ *
644
+ * @param PelDataWindow $d
645
+ * the bytes that will be checked.
646
+ * @return boolean true if the bytes look like the beginning of a
647
+ * JPEG image, false otherwise.
648
+ * @see PelTiff::isValid()
649
+ */
650
+ public static function isValid(PelDataWindow $d)
651
+ {
652
+ /* JPEG data is stored in big-endian format. */
653
+ $d->setByteOrder(PelConvert::BIG_ENDIAN);
654
+
655
+ $i = self::getJpgSectionStart($d);
656
+
657
+ return $d->getByte($i) == PelJpegMarker::SOI;
658
+ }
659
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegComment.php ADDED
@@ -0,0 +1,119 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2005, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class for dealing with JPEG comments.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class representing JPEG comments.
37
+ *
38
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
39
+ * @package PEL
40
+ */
41
+ namespace lsolesen\pel;
42
+
43
+ class PelJpegComment extends PelJpegContent
44
+ {
45
+
46
+ /**
47
+ * The comment.
48
+ *
49
+ * @var string
50
+ */
51
+ private $comment = '';
52
+
53
+ /**
54
+ * Construct a new JPEG comment.
55
+ *
56
+ * The new comment will contain the string given.
57
+ *
58
+ * @param string $comment
59
+ */
60
+ public function __construct($comment = '')
61
+ {
62
+ $this->comment = $comment;
63
+ }
64
+
65
+ /**
66
+ * Load and parse data.
67
+ *
68
+ * This will load the comment from the data window passed.
69
+ *
70
+ * @param PelDataWindow $d
71
+ */
72
+ public function load(PelDataWindow $d)
73
+ {
74
+ $this->comment = $d->getBytes();
75
+ }
76
+
77
+ /**
78
+ * Update the value with a new comment.
79
+ *
80
+ * Any old comment will be overwritten.
81
+ *
82
+ * @param string $comment
83
+ * the new comment.
84
+ */
85
+ public function setValue($comment)
86
+ {
87
+ $this->comment = $comment;
88
+ }
89
+
90
+ /**
91
+ * Get the comment.
92
+ *
93
+ * @return string the comment.
94
+ */
95
+ public function getValue()
96
+ {
97
+ return $this->comment;
98
+ }
99
+
100
+ /**
101
+ * Turn this comment into bytes.
102
+ *
103
+ * @return string bytes representing this comment.
104
+ */
105
+ public function getBytes()
106
+ {
107
+ return $this->comment;
108
+ }
109
+
110
+ /**
111
+ * Return a string representation of this object.
112
+ *
113
+ * @return string the same as {@link getValue()}.
114
+ */
115
+ public function __toString()
116
+ {
117
+ return $this->getValue();
118
+ }
119
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegContent.php ADDED
@@ -0,0 +1,77 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Class representing content in a JPEG file.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class representing content in a JPEG file.
37
+ *
38
+ * A JPEG file consists of a sequence of each of which has an
39
+ * associated {@link PelJpegMarker marker} and some content. This
40
+ * class represents the content, and this basic type is just a simple
41
+ * holder of such content, represented by a {@link PelDataWindow}
42
+ * object. The {@link PelExif} class is an example of more
43
+ * specialized JPEG content.
44
+ *
45
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
46
+ * @package PEL
47
+ */
48
+ namespace lsolesen\pel;
49
+
50
+ class PelJpegContent
51
+ {
52
+
53
+ private $data = null;
54
+
55
+ /**
56
+ * Make a new piece of JPEG content.
57
+ *
58
+ * @param PelDataWindow $data
59
+ * the content.
60
+ */
61
+ public function __construct(PelDataWindow $data)
62
+ {
63
+ $this->data = $data;
64
+ }
65
+
66
+ /**
67
+ * Return the bytes of the content.
68
+ *
69
+ * @return string bytes representing this JPEG content. These bytes
70
+ * will match the bytes given to {@link __construct the
71
+ * constructor}.
72
+ */
73
+ public function getBytes()
74
+ {
75
+ return $this->data->getBytes();
76
+ }
77
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegInvalidMarkerException.php ADDED
@@ -0,0 +1,55 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * PEL: PHP Exif Library.
4
+ * A library with support for reading and
5
+ * writing all Exif headers in JPEG and TIFF images using PHP.
6
+ *
7
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
8
+ *
9
+ * This program is free software; you can redistribute it and/or modify
10
+ * it under the terms of the GNU General Public License as published by
11
+ * the Free Software Foundation; either version 2 of the License, or
12
+ * (at your option) any later version.
13
+ *
14
+ * This program is distributed in the hope that it will be useful,
15
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
16
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17
+ * GNU General Public License for more details.
18
+ *
19
+ * You should have received a copy of the GNU General Public License
20
+ * along with this program in the file COPYING; if not, write to the
21
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
22
+ * Boston, MA 02110-1301 USA
23
+ */
24
+
25
+ /**
26
+ * Exception thrown when an invalid marker is found.
27
+ *
28
+ * This exception is thrown when PEL expects to find a {@link
29
+ * PelJpegMarker} and instead finds a byte that isn't a known marker.
30
+ *
31
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
32
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public License (GPL)
33
+ * @package PEL
34
+ * @subpackage Exception
35
+ */
36
+ namespace lsolesen\pel;
37
+
38
+ class PelJpegInvalidMarkerException extends PelException
39
+ {
40
+
41
+ /**
42
+ * Construct a new invalid marker exception.
43
+ * The exception will contain a message describing the error,
44
+ * including the byte found and the offset of the offending byte.
45
+ *
46
+ * @param int $marker
47
+ * the byte found.
48
+ * @param int $offset
49
+ * the offset in the data.
50
+ */
51
+ public function __construct($marker, $offset)
52
+ {
53
+ parent::__construct('Invalid marker found at offset %d: 0x%2X', $offset, $marker);
54
+ }
55
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelJpegMarker.php ADDED
@@ -0,0 +1,534 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /*
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2006 Martin Geisler.
9
+ * Copyright (C) 2017 Johannes Weberhofer.
10
+ *
11
+ * This program is free software; you can redistribute it and/or modify
12
+ * it under the terms of the GNU General Public License as published by
13
+ * the Free Software Foundation; either version 2 of the License, or
14
+ * (at your option) any later version.
15
+ *
16
+ * This program is distributed in the hope that it will be useful,
17
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19
+ * GNU General Public License for more details.
20
+ *
21
+ * You should have received a copy of the GNU General Public License
22
+ * along with this program in the file COPYING; if not, write to the
23
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
24
+ * Boston, MA 02110-1301 USA
25
+ */
26
+
27
+ /**
28
+ * Classes for dealing with JPEG markers.
29
+ *
30
+ * This class defines the constants to be used whenever one refers to
31
+ * a JPEG marker. All the methods defined are static, and they all
32
+ * operate on one argument which should be one of the class constants.
33
+ * They will all be denoted by PelJpegMarker in the documentation.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @author Johannes Weberhofer <jweberhofer@weberhofer.at>
37
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
38
+ * License (GPL)
39
+ * @package PEL
40
+ */
41
+ namespace lsolesen\pel;
42
+
43
+ class PelJpegMarker
44
+ {
45
+
46
+ /**
47
+ * Encoding (baseline)
48
+ */
49
+ const SOF0 = 0xC0;
50
+
51
+ /**
52
+ * Encoding (extended sequential)
53
+ */
54
+ const SOF1 = 0xC1;
55
+
56
+ /**
57
+ * Encoding (progressive)
58
+ */
59
+ const SOF2 = 0xC2;
60
+
61
+ /**
62
+ * Encoding (lossless)
63
+ */
64
+ const SOF3 = 0xC3;
65
+
66
+ /**
67
+ * Define Huffman table
68
+ */
69
+ const DHT = 0xC4;
70
+
71
+ /**
72
+ * Encoding (differential sequential)
73
+ */
74
+ const SOF5 = 0xC5;
75
+
76
+ /**
77
+ * Encoding (differential progressive)
78
+ */
79
+ const SOF6 = 0xC6;
80
+
81
+ /**
82
+ * Encoding (differential lossless)
83
+ */
84
+ const SOF7 = 0xC7;
85
+
86
+ /**
87
+ * Extension
88
+ */
89
+ const JPG = 0xC8;
90
+
91
+ /**
92
+ * Encoding (extended sequential, arithmetic)
93
+ */
94
+ const SOF9 = 0xC9;
95
+
96
+ /**
97
+ * Encoding (progressive, arithmetic)
98
+ */
99
+ const SOF10 = 0xCA;
100
+
101
+ /**
102
+ * Encoding (lossless, arithmetic)
103
+ */
104
+ const SOF11 = 0xCB;
105
+
106
+ /**
107
+ * Define arithmetic coding conditioning
108
+ */
109
+ const DAC = 0xCC;
110
+
111
+ /**
112
+ * Encoding (differential sequential, arithmetic)
113
+ */
114
+ const SOF13 = 0xCD;
115
+
116
+ /**
117
+ * Encoding (differential progressive, arithmetic)
118
+ */
119
+ const SOF14 = 0xCE;
120
+
121
+ /**
122
+ * Encoding (differential lossless, arithmetic)
123
+ */
124
+ const SOF15 = 0xCF;
125
+
126
+ /**
127
+ * Restart 0
128
+ */
129
+ const RST0 = 0xD0;
130
+
131
+ /**
132
+ * Restart 1
133
+ */
134
+ const RST1 = 0xD1;
135
+
136
+ /**
137
+ * Restart 2
138
+ */
139
+ const RST2 = 0xD2;
140
+
141
+ /**
142
+ * Restart 3
143
+ */
144
+ const RST3 = 0xD3;
145
+
146
+ /**
147
+ * Restart 4
148
+ */
149
+ const RST4 = 0xD4;
150
+
151
+ /**
152
+ * Restart 5
153
+ */
154
+ const RST5 = 0xD5;
155
+
156
+ /**
157
+ * Restart 6
158
+ */
159
+ const RST6 = 0xD6;
160
+
161
+ /**
162
+ * Restart 7
163
+ */
164
+ const RST7 = 0xD7;
165
+
166
+ /**
167
+ * Start of image
168
+ */
169
+ const SOI = 0xD8;
170
+
171
+ /**
172
+ * End of image
173
+ */
174
+ const EOI = 0xD9;
175
+
176
+ /**
177
+ * Start of scan
178
+ */
179
+ const SOS = 0xDA;
180
+
181
+ /**
182
+ * Define quantization table
183
+ */
184
+ const DQT = 0xDB;
185
+
186
+ /**
187
+ * Define number of lines
188
+ */
189
+ const DNL = 0xDC;
190
+
191
+ /**
192
+ * Define restart interval
193
+ */
194
+ const DRI = 0xDD;
195
+
196
+ /**
197
+ * Define hierarchical progression
198
+ */
199
+ const DHP = 0xDE;
200
+
201
+ /**
202
+ * Expand reference component
203
+ */
204
+ const EXP = 0xDF;
205
+
206
+ /**
207
+ * Application segment 0
208
+ */
209
+ const APP0 = 0xE0;
210
+
211
+ /**
212
+ * Application segment 1
213
+ *
214
+ * When a JPEG image contains Exif data, the data will normally be
215
+ * stored in this section and a call to {@link PelJpeg::getExif()}
216
+ * will return a {@link PelExif} object representing it.
217
+ */
218
+ const APP1 = 0xE1;
219
+
220
+ /**
221
+ * Application segment 2
222
+ */
223
+ const APP2 = 0xE2;
224
+
225
+ /**
226
+ * Application segment 3
227
+ */
228
+ const APP3 = 0xE3;
229
+
230
+ /**
231
+ * Application segment 4
232
+ */
233
+ const APP4 = 0xE4;
234
+
235
+ /**
236
+ * Application segment 5
237
+ */
238
+ const APP5 = 0xE5;
239
+
240
+ /**
241
+ * Application segment 6
242
+ */
243
+ const APP6 = 0xE6;
244
+
245
+ /**
246
+ * Application segment 7
247
+ */
248
+ const APP7 = 0xE7;
249
+
250
+ /**
251
+ * Application segment 8
252
+ */
253
+ const APP8 = 0xE8;
254
+
255
+ /**
256
+ * Application segment 9
257
+ */
258
+ const APP9 = 0xE9;
259
+
260
+ /**
261
+ * Application segment 10
262
+ */
263
+ const APP10 = 0xEA;
264
+
265
+ /**
266
+ * Application segment 11
267
+ */
268
+ const APP11 = 0xEB;
269
+
270
+ /**
271
+ * Application segment 12
272
+ */
273
+ const APP12 = 0xEC;
274
+
275
+ /**
276
+ * Application segment 13
277
+ */
278
+ const APP13 = 0xED;
279
+
280
+ /**
281
+ * Application segment 14
282
+ */
283
+ const APP14 = 0xEE;
284
+
285
+ /**
286
+ * Application segment 15
287
+ */
288
+ const APP15 = 0xEF;
289
+
290
+ /**
291
+ * Extension 0
292
+ */
293
+ const JPG0 = 0xF0;
294
+
295
+ /**
296
+ * Extension 1
297
+ */
298
+ const JPG1 = 0xF1;
299
+
300
+ /**
301
+ * Extension 2
302
+ */
303
+ const JPG2 = 0xF2;
304
+
305
+ /**
306
+ * Extension 3
307
+ */
308
+ const JPG3 = 0xF3;
309
+
310
+ /**
311
+ * Extension 4
312
+ */
313
+ const JPG4 = 0xF4;
314
+
315
+ /**
316
+ * Extension 5
317
+ */
318
+ const JPG5 = 0xF5;
319
+
320
+ /**
321
+ * Extension 6
322
+ */
323
+ const JPG6 = 0xF6;
324
+
325
+ /**
326
+ * Extension 7
327
+ */
328
+ const JPG7 = 0xF7;
329
+
330
+ /**
331
+ * Extension 8
332
+ */
333
+ const JPG8 = 0xF8;
334
+
335
+ /**
336
+ * Extension 9
337
+ */
338
+ const JPG9 = 0xF9;
339
+
340
+ /**
341
+ * Extension 10
342
+ */
343
+ const JPG10 = 0xFA;
344
+
345
+ /**
346
+ * Extension 11
347
+ */
348
+ const JPG11 = 0xFB;
349
+
350
+ /**
351
+ * Extension 12
352
+ */
353
+ const JPG12 = 0xFC;
354
+
355
+ /**
356
+ * Extension 13
357
+ */
358
+ const JPG13 = 0xFD;
359
+
360
+ /**
361
+ * Comment
362
+ */
363
+ const COM = 0xFE;
364
+
365
+ /**
366
+ * Values for marker's short names
367
+ */
368
+ protected static $jpegMarkerShort = [
369
+ self::SOF0 => 'SOF0',
370
+ self::SOF1 => 'SOF1',
371
+ self::SOF2 => 'SOF2',
372
+ self::SOF3 => 'SOF3',
373
+ self::SOF5 => 'SOF5',
374
+ self::SOF6 => 'SOF6',
375
+ self::SOF7 => 'SOF7',
376
+ self::SOF9 => 'SOF9',
377
+ self::SOF10 => 'SOF10',
378
+ self::SOF11 => 'SOF11',
379
+ self::SOF13 => 'SOF13',
380
+ self::SOF14 => 'SOF14',
381
+ self::SOF15 => 'SOF15',
382
+ self::SOI => 'SOI',
383
+ self::EOI => 'EOI',
384
+ self::SOS => 'SOS',
385
+ self::COM => 'COM',
386
+ self::DHT => 'DHT',
387
+ self::JPG => 'JPG',
388
+ self::DAC => 'DAC',
389
+ self::RST0 => 'RST0',
390
+ self::RST1 => 'RST1',
391
+ self::RST2 => 'RST2',
392
+ self::RST3 => 'RST3',
393
+ self::RST4 => 'RST4',
394
+ self::RST5 => 'RST5',
395
+ self::RST6 => 'RST6',
396
+ self::RST7 => 'RST7',
397
+ self::DQT => 'DQT',
398
+ self::DNL => 'DNL',
399
+ self::DRI => 'DRI',
400
+ self::DHP => 'DHP',
401
+ self::EXP => 'EXP',
402
+ self::APP0 => 'APP0',
403
+ self::APP1 => 'APP1',
404
+ self::APP2 => 'APP2',
405
+ self::APP3 => 'APP3',
406
+ self::APP4 => 'APP4',
407
+ self::APP5 => 'APP5',
408
+ self::APP6 => 'APP6',
409
+ self::APP7 => 'APP7',
410
+ self::APP8 => 'APP8',
411
+ self::APP9 => 'APP9',
412
+ self::APP10 => 'APP10',
413
+ self::APP11 => 'APP11',
414
+ self::APP12 => 'APP12',
415
+ self::APP13 => 'APP13',
416
+ self::APP14 => 'APP14',
417
+ self::APP15 => 'APP15',
418
+ self::JPG0 => 'JPG0',
419
+ self::JPG1 => 'JPG1',
420
+ self::JPG2 => 'JPG2',
421
+ self::JPG3 => 'JPG3',
422
+ self::JPG4 => 'JPG4',
423
+ self::JPG5 => 'JPG5',
424
+ self::JPG6 => 'JPG6',
425
+ self::JPG7 => 'JPG7',
426
+ self::JPG8 => 'JPG8',
427
+ self::JPG9 => 'JPG9',
428
+ self::JPG10 => 'JPG10',
429
+ self::JPG11 => 'JPG11',
430
+ self::JPG12 => 'JPG12',
431
+ self::JPG13 => 'JPG13',
432
+ self::COM => 'COM'
433
+ ];
434
+
435
+ /**
436
+ * Values for marker's descriptions names.
437
+ */
438
+ protected static $jpegMarkerDescriptions = [
439
+ self::SOF0 => 'Encoding (baseline)',
440
+ self::SOF1 => 'Encoding (extended sequential)',
441
+ self::SOF2 => 'Encoding (progressive)',
442
+ self::SOF3 => 'Encoding (lossless)',
443
+ self::SOF5 => 'Encoding (differential sequential)',
444
+ self::SOF6 => 'Encoding (differential progressive)',
445
+ self::SOF7 => 'Encoding (differential lossless)',
446
+ self::SOF9 => 'Encoding (extended sequential, arithmetic)',
447
+ self::SOF10 => 'Encoding (progressive, arithmetic)',
448
+ self::SOF11 => 'Encoding (lossless, arithmetic)',
449
+ self::SOF13 => 'Encoding (differential sequential, arithmetic)',
450
+ self::SOF14 => 'Encoding (differential progressive, arithmetic)',
451
+ self::SOF15 => 'Encoding (differential lossless, arithmetic)',
452
+ self::SOI => 'Start of image',
453
+ self::EOI => 'End of image',
454
+ self::SOS => 'Start of scan',
455
+ self::COM => 'Comment',
456
+ self::DHT => 'Define Huffman table',
457
+ self::JPG => 'Extension',
458
+ self::DAC => 'Define arithmetic coding conditioning',
459
+ 'RST' => 'Restart %d',
460
+ self::DQT => 'Define quantization table',
461
+ self::DNL => 'Define number of lines',
462
+ self::DRI => 'Define restart interval',
463
+ self::DHP => 'Define hierarchical progression',
464
+ self::EXP => 'Expand reference component',
465
+ 'APP' => 'Application segment %d',
466
+ 'JPG' => 'Extension %d',
467
+ self::COM => 'Comment'
468
+ ];
469
+
470
+ /**
471
+ * Check if a byte is a valid JPEG marker.
472
+ * If the byte is recognized true is returned, otherwise false will be returned.
473
+ *
474
+ * @param integer $marker
475
+ * the marker as defined in {@link PelJpegMarker}
476
+ * @return boolean
477
+ */
478
+ public static function isValid($marker)
479
+ {
480
+ return ($marker >= self::SOF0 && $marker <= self::COM);
481
+ }
482
+
483
+ /**
484
+ * Turn a JPEG marker into bytes.
485
+ * This will be a string with just a single byte since all JPEG markers are simply single bytes.
486
+ *
487
+ * @param integer $marker
488
+ * the marker as defined in {@link PelJpegMarker}
489
+ * @return string
490
+ */
491
+ public static function getBytes($marker)
492
+ {
493
+ return chr($marker);
494
+ }
495
+
496
+ /**
497
+ * Return the short name for a marker, e.g., 'SOI' for the Start
498
+ * of Image marker.
499
+ *
500
+ * @param integer $marker
501
+ * the marker as defined in {@link PelJpegMarker}
502
+ * @return string
503
+ */
504
+ public static function getName($marker)
505
+ {
506
+ if (array_key_exists($marker, self::$jpegMarkerShort)) {
507
+ return self::$jpegMarkerShort[$marker];
508
+ } else {
509
+ return Pel::fmt('Unknown marker: 0x%02X', $marker);
510
+ }
511
+ }
512
+
513
+ /**
514
+ * Returns a description of a JPEG marker.
515
+ *
516
+ * @param integer $marker
517
+ * the marker as defined in {@link PelJpegMarker}
518
+ * @return string
519
+ */
520
+ public static function getDescription($marker)
521
+ {
522
+ if (array_key_exists($marker, self::$jpegMarkerShort)) {
523
+ if (array_key_exists($marker, self::$jpegMarkerDescriptions)) {
524
+ return self::$jpegMarkerDescriptions[$marker];
525
+ } else {
526
+ $splitted = preg_split("/(\d+)/", self::$jpegMarkerShort[$marker], - 1, PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE);
527
+ if ((count($splitted) == 2) && array_key_exists($splitted[0], self::$jpegMarkerDescriptions)) {
528
+ return Pel::fmt(self::$jpegMarkerDescriptions[$splitted[0]], $splitted[1]);
529
+ }
530
+ }
531
+ }
532
+ return Pel::fmt('Unknown marker: 0x%02X', $marker);
533
+ }
534
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelMakerNotes.php ADDED
@@ -0,0 +1,79 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /*
3
+ * PEL: PHP Exif Library.
4
+ * A library with support for reading and
5
+ * writing all Exif headers in JPEG and TIFF images using PHP.
6
+ *
7
+ * Copyright (C) 2004, 2005 Martin Geisler.
8
+ * Copyright (C) 2017 Johannes Weberhofer.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Namespace for functions operating on Exif formats.
28
+ *
29
+ * This class defines the constants that are to be used whenever one
30
+ * has to refer to the format of an Exif tag. They will be
31
+ * collectively denoted by the pseudo-type PelFormat throughout the
32
+ * documentation.
33
+ *
34
+ * All the methods defined here are static, and they all operate on a
35
+ * single argument which should be one of the class constants.
36
+ *
37
+ * @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
38
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
39
+ * License (GPL)
40
+ * @package
41
+ *
42
+ */
43
+ namespace lsolesen\pel;
44
+
45
+ abstract class PelMakerNotes
46
+ {
47
+
48
+ protected $type;
49
+
50
+ protected $parent;
51
+
52
+ protected $data;
53
+
54
+ protected $components;
55
+
56
+ protected $offset;
57
+
58
+ public static function createMakerNotesFromManufacturer($man, $parent, $data, $size, $offset)
59
+ {
60
+ switch ($man) {
61
+ case 'Canon':
62
+ return new PelCanonMakerNotes($parent, $data, $size, $offset);
63
+ default:
64
+ return null;
65
+ }
66
+ }
67
+
68
+ public function __construct($parent, $data, $size, $offset)
69
+ {
70
+ $this->parent = $parent;
71
+ $this->data = $data;
72
+ $this->size = $size;
73
+ $this->offset = $offset;
74
+ $this->components = 0;
75
+ Pel::debug('Creating MakerNotes with %d bytes at offset %d.', $size, $offset);
76
+ }
77
+
78
+ abstract public function load();
79
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelMakerNotesMalformedException.php ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with Exif entries.
28
+ *
29
+ * This file defines two exception classes and the abstract class
30
+ * {@link PelEntry} which provides the basic methods that all Exif
31
+ * entries will have. All Exif entries will be represented by
32
+ * descendants of the {@link PelEntry} class --- the class itself is
33
+ * abstract and so it cannot be instantiated.
34
+ *
35
+ * @author Vinzenz Rosenkranz <vinzenz.rosenkranz@gmail.com>
36
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
37
+ * License (GPL)
38
+ * @package PEL
39
+ */
40
+
41
+ /**
42
+ * An exception thrown when the makernotes IFD is malformed.
43
+ *
44
+ * @package PEL
45
+ * @subpackage Exception
46
+ */
47
+ namespace lsolesen\pel;
48
+
49
+ class PelMakerNotesMalformedException extends PelException
50
+ {
51
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelOverflowException.php ADDED
@@ -0,0 +1,67 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with Exif entries.
28
+ *
29
+ * This file defines two exception classes and the abstract class
30
+ * {@link PelEntry} which provides the basic methods that all Exif
31
+ * entries will have. All Exif entries will be represented by
32
+ * descendants of the {@link PelEntry} class --- the class itself is
33
+ * abstract and so it cannot be instantiated.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
37
+ * License (GPL)
38
+ * @package PEL
39
+ */
40
+
41
+ /**
42
+ * Exception cast when numbers overflow.
43
+ *
44
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
45
+ * @package PEL
46
+ * @subpackage Exception
47
+ */
48
+ namespace lsolesen\pel;
49
+
50
+ class PelOverflowException extends PelException
51
+ {
52
+
53
+ /**
54
+ * Construct a new overflow exception.
55
+ *
56
+ * @param int $v
57
+ * the value that is out of range.
58
+ * @param int $min
59
+ * the minimum allowed value.
60
+ * @param int $max
61
+ * the maximum allowed value.
62
+ */
63
+ public function __construct($v, $min, $max)
64
+ {
65
+ parent::__construct('Value %.0f out of range [%.0f, %.0f]', $v, $min, $max);
66
+ }
67
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelTag.php ADDED
@@ -0,0 +1,2591 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006, 2007 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Namespace for functions operating on Exif tags.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class with static methods for Exif tags.
37
+ *
38
+ * This class defines the constants that represents the Exif tags
39
+ * known to PEL. They are supposed to be used whenever one needs to
40
+ * specify an Exif tag, and they will be denoted by the pseudo-type
41
+ * {@link PelTag} throughout the documentation.
42
+ *
43
+ * Please note that the constrains on the format and number of
44
+ * components given here are advisory only. To follow the Exif
45
+ * specification one should obey them, but there is nothing that
46
+ * prevents you from creating an {@link IMAGE_LENGTH} entry with two
47
+ * or more components, even though the standard says that there should
48
+ * be exactly one component.
49
+ *
50
+ * All the methods in this class are static and should be called with
51
+ * the Exif tag on which they should operate.
52
+ *
53
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
54
+ * @package PEL
55
+ */
56
+ namespace lsolesen\pel;
57
+
58
+ class PelTag
59
+ {
60
+
61
+ /**
62
+ * Interoperability index.
63
+ *
64
+ * Format: {@link PelFormat::ASCII}.
65
+ *
66
+ * Components: 4.
67
+ */
68
+ const INTEROPERABILITY_INDEX = 0x0001;
69
+
70
+ /**
71
+ * Interoperability version.
72
+ *
73
+ * Format: {@link PelFormat::UNDEFINED}.
74
+ *
75
+ * Components: 4.
76
+ */
77
+ const INTEROPERABILITY_VERSION = 0x0002;
78
+
79
+ /**
80
+ * Image width.
81
+ *
82
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
83
+ *
84
+ * Components: 1.
85
+ */
86
+ const IMAGE_WIDTH = 0x0100;
87
+
88
+ /**
89
+ * Image length.
90
+ *
91
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
92
+ *
93
+ * Components: 1.
94
+ */
95
+ const IMAGE_LENGTH = 0x0101;
96
+
97
+ /**
98
+ * Number of bits per component.
99
+ *
100
+ * Format: {@link PelFormat::SHORT}.
101
+ *
102
+ * Components: 3.
103
+ */
104
+ const BITS_PER_SAMPLE = 0x0102;
105
+
106
+ /**
107
+ * Compression scheme.
108
+ *
109
+ * Format: {@link PelFormat::SHORT}.
110
+ *
111
+ * Components: 1.
112
+ */
113
+ const COMPRESSION = 0x0103;
114
+
115
+ /**
116
+ * Pixel composition.
117
+ *
118
+ * Format: {@link PelFormat::SHORT}.
119
+ *
120
+ * Components: 1.
121
+ */
122
+ const PHOTOMETRIC_INTERPRETATION = 0x0106;
123
+
124
+ /**
125
+ * Fill Order
126
+ *
127
+ * Format: Unknown.
128
+ *
129
+ * Components: Unknown.
130
+ */
131
+ const FILL_ORDER = 0x010A;
132
+
133
+ /**
134
+ * Document Name
135
+ *
136
+ * Format: {@link PelEntryAscii}.
137
+ *
138
+ * Components: any number.
139
+ */
140
+ const DOCUMENT_NAME = 0x010D;
141
+
142
+ /**
143
+ * Image Description
144
+ *
145
+ * Format: {@link PelEntryAscii}.
146
+ *
147
+ * Components: any number.
148
+ */
149
+ const IMAGE_DESCRIPTION = 0x010E;
150
+
151
+ /**
152
+ * Manufacturer
153
+ *
154
+ * Format: {@link PelEntryAscii}.
155
+ *
156
+ * Components: any number.
157
+ */
158
+ const MAKE = 0x010F;
159
+
160
+ /**
161
+ * Model
162
+ *
163
+ * Format: {@link PelFormat::ASCII}.
164
+ *
165
+ * Components: any number.
166
+ */
167
+ const MODEL = 0x0110;
168
+
169
+ /**
170
+ * Strip Offsets
171
+ *
172
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
173
+ *
174
+ * Components: any number.
175
+ */
176
+ const STRIP_OFFSETS = 0x0111;
177
+
178
+ /**
179
+ * Orientation of image.
180
+ *
181
+ * Format: {@link PelFormat::SHORT}.
182
+ *
183
+ * Components: 1.
184
+ */
185
+ const ORIENTATION = 0x0112;
186
+
187
+ /**
188
+ * Number of components.
189
+ *
190
+ * Format: {@link PelFormat::SHORT}.
191
+ *
192
+ * Components: 1.
193
+ */
194
+ const SAMPLES_PER_PIXEL = 0x0115;
195
+
196
+ /**
197
+ * Rows per Strip
198
+ *
199
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
200
+ *
201
+ * Components: 1.
202
+ */
203
+ const ROWS_PER_STRIP = 0x0116;
204
+
205
+ /**
206
+ * Strip Byte Count
207
+ *
208
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
209
+ *
210
+ * Components: any number.
211
+ */
212
+ const STRIP_BYTE_COUNTS = 0x0117;
213
+
214
+ /**
215
+ * Image resolution in width direction.
216
+ *
217
+ * Format: {@link PelFormat::RATIONAL}.
218
+ *
219
+ * Components: 1.
220
+ */
221
+ const X_RESOLUTION = 0x011A;
222
+
223
+ /**
224
+ * Image resolution in height direction.
225
+ *
226
+ * Format: {@link PelFormat::RATIONAL}.
227
+ *
228
+ * Components: 1.
229
+ */
230
+ const Y_RESOLUTION = 0x011B;
231
+
232
+ /**
233
+ * Image data arrangement.
234
+ *
235
+ * Format: {@link PelFormat::SHORT}.
236
+ *
237
+ * Components: 1.
238
+ */
239
+ const PLANAR_CONFIGURATION = 0x011C;
240
+
241
+ /**
242
+ * Unit of X and Y resolution.
243
+ *
244
+ * Format: {@link PelFormat::SHORT}.
245
+ *
246
+ * Components: 1.
247
+ */
248
+ const RESOLUTION_UNIT = 0x0128;
249
+
250
+ /**
251
+ * Transfer function.
252
+ *
253
+ * Format: {@link PelFormat::SHORT}.
254
+ *
255
+ * Components: 3.
256
+ */
257
+ const TRANSFER_FUNCTION = 0x012D;
258
+
259
+ /**
260
+ * Software used.
261
+ *
262
+ * Format: {@link PelFormat::ASCII}.
263
+ *
264
+ * Components: any number.
265
+ */
266
+ const SOFTWARE = 0x0131;
267
+
268
+ /**
269
+ * File change date and time.
270
+ *
271
+ * Format: {@link PelFormat::ASCII}, modelled by the {@link
272
+ * PelEntryTime} class.
273
+ *
274
+ * Components: 20.
275
+ */
276
+ const DATE_TIME = 0x0132;
277
+
278
+ /**
279
+ * Person who created the image.
280
+ *
281
+ * Format: {@link PelFormat::ASCII}.
282
+ *
283
+ * Components: any number.
284
+ */
285
+ const ARTIST = 0x013B;
286
+
287
+ /**
288
+ * Predictor.
289
+ *
290
+ * Format: {@link PelFormat::SHORT}.
291
+ *
292
+ * Components: 1.
293
+ */
294
+ const PREDICTOR = 0x013D;
295
+
296
+ /**
297
+ * White point chromaticity.
298
+ *
299
+ * Format: {@link PelFormat::RATIONAL}.
300
+ *
301
+ * Components: 2.
302
+ */
303
+ const WHITE_POINT = 0x013E;
304
+
305
+ /**
306
+ * Chromaticities of primaries.
307
+ *
308
+ * Format: {@link PelFormat::RATIONAL}.
309
+ *
310
+ * Components: 6.
311
+ */
312
+ const PRIMARY_CHROMATICITIES = 0x013F;
313
+
314
+ /**
315
+ * Extra Samples.
316
+ *
317
+ * Format: {@link PelFormat::SHORT}.
318
+ *
319
+ * Components: 1.
320
+ */
321
+ const EXTRA_SAMPLES = 0x0152;
322
+
323
+ /**
324
+ * Sample Format.
325
+ *
326
+ * Format: {@link PelFormat::SHORT}.
327
+ *
328
+ * Components: 4.
329
+ */
330
+ const SAMPLE_FORMAT = 0x0153;
331
+
332
+ /**
333
+ * Transfer Range
334
+ *
335
+ * Format: Unknown.
336
+ *
337
+ * Components: Unknown.
338
+ */
339
+ const TRANSFER_RANGE = 0x0156;
340
+
341
+ /**
342
+ * JPEGProc
343
+ *
344
+ * Format: Unknown.
345
+ *
346
+ * Components: Unknown.
347
+ */
348
+ const JPEG_PROC = 0x0200;
349
+
350
+ /**
351
+ * Offset to JPEG SOI.
352
+ *
353
+ * Format: {@link PelFormat::LONG}.
354
+ *
355
+ * Components: 1.
356
+ */
357
+ const JPEG_INTERCHANGE_FORMAT = 0x0201;
358
+
359
+ /**
360
+ * Bytes of JPEG data.
361
+ *
362
+ * Format: {@link PelFormat::LONG}.
363
+ *
364
+ * Components: 1.
365
+ */
366
+ const JPEG_INTERCHANGE_FORMAT_LENGTH = 0x0202;
367
+
368
+ /**
369
+ * Color space transformation matrix coefficients.
370
+ *
371
+ * Format: {@link PelFormat::RATIONAL}.
372
+ *
373
+ * Components: 3.
374
+ */
375
+ const YCBCR_COEFFICIENTS = 0x0211;
376
+
377
+ /**
378
+ * Subsampling ratio of Y to C.
379
+ *
380
+ * Format: {@link PelFormat::SHORT}.
381
+ *
382
+ * Components: 2.
383
+ */
384
+ const YCBCR_SUB_SAMPLING = 0x0212;
385
+
386
+ /**
387
+ * Y and C positioning.
388
+ *
389
+ * Format: {@link PelFormat::SHORT}.
390
+ *
391
+ * Components: 1.
392
+ */
393
+ const YCBCR_POSITIONING = 0x0213;
394
+
395
+ /**
396
+ * Pair of black and white reference values.
397
+ *
398
+ * Format: {@link PelFormat::RATIONAL}.
399
+ *
400
+ * Components: 6.
401
+ */
402
+ const REFERENCE_BLACK_WHITE = 0x0214;
403
+
404
+ /**
405
+ * Application Notes.
406
+ *
407
+ * Format: {@link PelFormat::BYTE}.
408
+ *
409
+ * Components: Unknown.
410
+ */
411
+ const APPLICATION_NOTES = 0x02bc;
412
+
413
+ /**
414
+ * Related Image File Format
415
+ *
416
+ * Format: Unknown.
417
+ *
418
+ * Components: Unknown.
419
+ */
420
+ const RELATED_IMAGE_FILE_FORMAT = 0x1000;
421
+
422
+ /**
423
+ * Related Image Width
424
+ *
425
+ * Format: Unknown, probably {@link PelFormat::SHORT}?
426
+ *
427
+ * Components: Unknown, probably 1.
428
+ */
429
+ const RELATED_IMAGE_WIDTH = 0x1001;
430
+
431
+ /**
432
+ * Related Image Length
433
+ *
434
+ * Format: Unknown, probably {@link PelFormat::SHORT}?
435
+ *
436
+ * Components: Unknown, probably 1.
437
+ */
438
+ const RELATED_IMAGE_LENGTH = 0x1002;
439
+
440
+ /**
441
+ * Rating
442
+ *
443
+ * Format: {@link PelFormat::SHORT}
444
+ *
445
+ * Components: 1.
446
+ */
447
+ const RATING = 0x4746;
448
+
449
+ /**
450
+ * Rating percent
451
+ *
452
+ * Format: {@link PelFormat::SHORT}
453
+ *
454
+ * Components: 1.
455
+ */
456
+ const RATING_PERCENT = 0x4749;
457
+
458
+ /**
459
+ * CFA Repeat Pattern Dim.
460
+ *
461
+ * Format: {@link PelFormat::SHORT}.
462
+ *
463
+ * Components: 2.
464
+ */
465
+ const CFA_REPEAT_PATTERN_DIM = 0x828D;
466
+
467
+ /**
468
+ * Battery level.
469
+ *
470
+ * Format: Unknown.
471
+ *
472
+ * Components: Unknown.
473
+ */
474
+ const BATTERY_LEVEL = 0x828F;
475
+
476
+ /**
477
+ * Copyright holder.
478
+ *
479
+ * Format: {@link PelFormat::ASCII}, modelled by the {@link
480
+ * PelEntryCopyright} class.
481
+ *
482
+ * Components: any number.
483
+ */
484
+ const COPYRIGHT = 0x8298;
485
+
486
+ /**
487
+ * Exposure Time
488
+ *
489
+ * Format: {@link PelFormat::RATIONAL}.
490
+ *
491
+ * Components: 1.
492
+ */
493
+ const EXPOSURE_TIME = 0x829A;
494
+
495
+ /**
496
+ * FNumber
497
+ *
498
+ * Format: {@link PelFormat::RATIONAL}.
499
+ *
500
+ * Components: 1.
501
+ */
502
+ const FNUMBER = 0x829D;
503
+
504
+ /**
505
+ * IPTC/NAA
506
+ *
507
+ * Format: {@link PelFormat::LONG}.
508
+ *
509
+ * Components: any number.
510
+ */
511
+ const IPTC_NAA = 0x83BB;
512
+
513
+ /**
514
+ * Exif IFD Pointer
515
+ *
516
+ * Format: {@link PelFormat::LONG}.
517
+ *
518
+ * Components: 1.
519
+ */
520
+ const EXIF_IFD_POINTER = 0x8769;
521
+
522
+ /**
523
+ * Inter Color Profile
524
+ *
525
+ * Format: {@link PelFormat::UNDEFINED}.
526
+ *
527
+ * Components: any number.
528
+ */
529
+ const INTER_COLOR_PROFILE = 0x8773;
530
+
531
+ /**
532
+ * Exposure Program
533
+ *
534
+ * Format: {@link PelFormat::SHORT}.
535
+ *
536
+ * Components: 1.
537
+ */
538
+ const EXPOSURE_PROGRAM = 0x8822;
539
+
540
+ /**
541
+ * Spectral Sensitivity
542
+ *
543
+ * Format: {@link PelFormat::ASCII}.
544
+ *
545
+ * Components: any number.
546
+ */
547
+ const SPECTRAL_SENSITIVITY = 0x8824;
548
+
549
+ /**
550
+ * GPS Info IFD Pointer
551
+ *
552
+ * Format: {@link PelFormat::LONG}.
553
+ *
554
+ * Components: 1.
555
+ */
556
+ const GPS_INFO_IFD_POINTER = 0x8825;
557
+
558
+ /**
559
+ * ISO Speed Ratings
560
+ *
561
+ * Format: {@link PelFormat::SHORT}.
562
+ *
563
+ * Components: 2.
564
+ */
565
+ const ISO_SPEED_RATINGS = 0x8827;
566
+
567
+ /**
568
+ * OECF
569
+ *
570
+ * Format: {@link PelFormat::UNDEFINED}.
571
+ *
572
+ * Components: any number.
573
+ */
574
+ const OECF = 0x8828;
575
+
576
+ /**
577
+ * Exif version.
578
+ *
579
+ * Format: {@link PelFormat::UNDEFINED}, modelled by the {@link
580
+ * PelEntryVersion} class.
581
+ *
582
+ * Components: 4.
583
+ */
584
+ const EXIF_VERSION = 0x9000;
585
+
586
+ /**
587
+ * Date and time of original data generation.
588
+ *
589
+ * Format: {@link PelFormat::ASCII}, modelled by the {@link
590
+ * PelEntryTime} class.
591
+ *
592
+ * Components: 20.
593
+ */
594
+ const DATE_TIME_ORIGINAL = 0x9003;
595
+
596
+ /**
597
+ * Date and time of digital data generation.
598
+ *
599
+ * Format: {@link PelFormat::ASCII}, modelled by the {@link
600
+ * PelEntryTime} class.
601
+ *
602
+ * Components: 20.
603
+ */
604
+ const DATE_TIME_DIGITIZED = 0x9004;
605
+
606
+ /**
607
+ * Offset time (timezone) of file change time.
608
+ *
609
+ * Format: {@link PelFormat::ASCII}
610
+ *
611
+ * Components: 7.
612
+ */
613
+ const OFFSET_TIME = 0x9010;
614
+
615
+ /**
616
+ * Offset time (timezone) of original data generation.
617
+ *
618
+ * Format: {@link PelFormat::ASCII}
619
+ *
620
+ * Components: 7.
621
+ */
622
+ const OFFSET_TIME_ORIGINAL = 0x9011;
623
+
624
+ /**
625
+ * Offset time (timezone) of digital data generation.
626
+ *
627
+ * Format: {@link PelFormat::ASCII}
628
+ *
629
+ * Components: 7.
630
+ */
631
+ const OFFSET_TIME_DIGITIZED = 0x9012;
632
+
633
+ /**
634
+ * Meaning of each component.
635
+ *
636
+ * Format: {@link PelFormat::UNDEFINED}.
637
+ *
638
+ * Components: 4.
639
+ */
640
+ const COMPONENTS_CONFIGURATION = 0x9101;
641
+
642
+ /**
643
+ * Image compression mode.
644
+ *
645
+ * Format: {@link PelFormat::RATIONAL}.
646
+ *
647
+ * Components: 1.
648
+ */
649
+ const COMPRESSED_BITS_PER_PIXEL = 0x9102;
650
+
651
+ /**
652
+ * Shutter speed
653
+ *
654
+ * Format: {@link PelFormat::SRATIONAL}.
655
+ *
656
+ * Components: 1.
657
+ */
658
+ const SHUTTER_SPEED_VALUE = 0x9201;
659
+
660
+ /**
661
+ * Aperture
662
+ *
663
+ * Format: {@link PelFormat::RATIONAL}.
664
+ *
665
+ * Components: 1.
666
+ */
667
+ const APERTURE_VALUE = 0x9202;
668
+
669
+ /**
670
+ * Brightness
671
+ *
672
+ * Format: {@link PelFormat::SRATIONAL}.
673
+ *
674
+ * Components: 1.
675
+ */
676
+ const BRIGHTNESS_VALUE = 0x9203;
677
+
678
+ /**
679
+ * Exposure Bias
680
+ *
681
+ * Format: {@link PelFormat::SRATIONAL}.
682
+ *
683
+ * Components: 1.
684
+ */
685
+ const EXPOSURE_BIAS_VALUE = 0x9204;
686
+
687
+ /**
688
+ * Max Aperture Value
689
+ *
690
+ * Format: {@link PelFormat::RATIONAL}.
691
+ *
692
+ * Components: 1.
693
+ */
694
+ const MAX_APERTURE_VALUE = 0x9205;
695
+
696
+ /**
697
+ * Subject Distance
698
+ *
699
+ * Format: {@link PelFormat::SRATIONAL}.
700
+ *
701
+ * Components: 1.
702
+ */
703
+ const SUBJECT_DISTANCE = 0x9206;
704
+
705
+ /**
706
+ * Metering Mode
707
+ *
708
+ * Format: {@link PelFormat::SHORT}.
709
+ *
710
+ * Components: 1.
711
+ */
712
+ const METERING_MODE = 0x9207;
713
+
714
+ /**
715
+ * Light Source
716
+ *
717
+ * Format: {@link PelFormat::SHORT}.
718
+ *
719
+ * Components: 1.
720
+ */
721
+ const LIGHT_SOURCE = 0x9208;
722
+
723
+ /**
724
+ * Flash
725
+ *
726
+ * Format: {@link PelFormat::SHORT}.
727
+ *
728
+ * Components: 1.
729
+ */
730
+ const FLASH = 0x9209;
731
+
732
+ /**
733
+ * Focal Length
734
+ *
735
+ * Format: {@link PelFormat::RATIONAL}.
736
+ *
737
+ * Components: 1.
738
+ */
739
+ const FOCAL_LENGTH = 0x920A;
740
+
741
+ /**
742
+ * Subject Area
743
+ *
744
+ * Format: {@link PelFormat::SHORT}.
745
+ *
746
+ * Components: 4.
747
+ */
748
+ const SUBJECT_AREA = 0x9214;
749
+
750
+ /**
751
+ * Maker Note
752
+ *
753
+ * Format: {@link PelFormat::UNDEFINED}.
754
+ *
755
+ * Components: any number.
756
+ */
757
+ const MAKER_NOTE = 0x927C;
758
+
759
+ /**
760
+ * User Comment
761
+ *
762
+ * Format: {@link PelFormat::UNDEFINED}, modelled by the {@link
763
+ * PelEntryUserComment} class.
764
+ *
765
+ * Components: any number.
766
+ */
767
+ const USER_COMMENT = 0x9286;
768
+
769
+ /**
770
+ * SubSec Time
771
+ *
772
+ * Format: {@link PelFormat::ASCII}.
773
+ *
774
+ * Components: any number.
775
+ */
776
+ const SUB_SEC_TIME = 0x9290;
777
+
778
+ /**
779
+ * SubSec Time Original
780
+ *
781
+ * Format: {@link PelFormat::ASCII}.
782
+ *
783
+ * Components: any number.
784
+ */
785
+ const SUB_SEC_TIME_ORIGINAL = 0x9291;
786
+
787
+ /**
788
+ * SubSec Time Digitized
789
+ *
790
+ * Format: {@link PelFormat::ASCII}.
791
+ *
792
+ * Components: any number.
793
+ */
794
+ const SUB_SEC_TIME_DIGITIZED = 0x9292;
795
+
796
+ /**
797
+ * Windows XP Title
798
+ *
799
+ * Format: {@link PelFormat::BYTE}, modelled by the
800
+ * {@link PelEntryWindowsString} class.
801
+ *
802
+ * Components: any number.
803
+ */
804
+ const XP_TITLE = 0x9C9B;
805
+
806
+ /**
807
+ * Windows XP Comment
808
+ *
809
+ * Format: {@link PelFormat::BYTE}, modelled by the
810
+ * {@link PelEntryWindowsString} class.
811
+ *
812
+ * Components: any number.
813
+ */
814
+ const XP_COMMENT = 0x9C9C;
815
+
816
+ /**
817
+ * Windows XP Author
818
+ *
819
+ * Format: {@link PelFormat::BYTE}, modelled by the
820
+ * {@link PelEntryWindowsString} class.
821
+ *
822
+ * Components: any number.
823
+ */
824
+ const XP_AUTHOR = 0x9C9D;
825
+
826
+ /**
827
+ * Windows XP Keywords
828
+ *
829
+ * Format: {@link PelFormat::BYTE}, modelled by the
830
+ * {@link PelEntryWindowsString} class.
831
+ *
832
+ * Components: any number.
833
+ */
834
+ const XP_KEYWORDS = 0x9C9E;
835
+
836
+ /**
837
+ * Windows XP Subject
838
+ *
839
+ * Format: {@link PelFormat::BYTE}, modelled by the
840
+ * {@link PelEntryWindowsString} class.
841
+ *
842
+ * Components: any number.
843
+ */
844
+ const XP_SUBJECT = 0x9C9F;
845
+
846
+ /**
847
+ * Supported Flashpix version
848
+ *
849
+ * Format: {@link PelFormat::UNDEFINED}, modelled by the {@link
850
+ * PelEntryVersion} class.
851
+ *
852
+ * Components: 4.
853
+ */
854
+ const FLASH_PIX_VERSION = 0xA000;
855
+
856
+ /**
857
+ * Color space information.
858
+ *
859
+ * Format: {@link PelFormat::SHORT}.
860
+ *
861
+ * Components: 1.
862
+ */
863
+ const COLOR_SPACE = 0xA001;
864
+
865
+ /**
866
+ * Valid image width.
867
+ *
868
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
869
+ *
870
+ * Components: 1.
871
+ */
872
+ const PIXEL_X_DIMENSION = 0xA002;
873
+
874
+ /**
875
+ * Valid image height.
876
+ *
877
+ * Format: {@link PelFormat::SHORT} or {@link PelFormat::LONG}.
878
+ *
879
+ * Components: 1.
880
+ */
881
+ const PIXEL_Y_DIMENSION = 0xA003;
882
+
883
+ /**
884
+ * Related audio file.
885
+ *
886
+ * Format: {@link PelFormat::ASCII}.
887
+ *
888
+ * Components: any number.
889
+ */
890
+ const RELATED_SOUND_FILE = 0xA004;
891
+
892
+ /**
893
+ * Interoperability IFD Pointer
894
+ *
895
+ * Format: {@link PelFormat::LONG}.
896
+ *
897
+ * Components: 1.
898
+ */
899
+ const INTEROPERABILITY_IFD_POINTER = 0xA005;
900
+
901
+ /**
902
+ * Flash energy.
903
+ *
904
+ * Format: {@link PelFormat::RATIONAL}.
905
+ *
906
+ * Components: 1.
907
+ */
908
+ const FLASH_ENERGY = 0xA20B;
909
+
910
+ /**
911
+ * Spatial frequency response.
912
+ *
913
+ * Format: {@link PelFormat::UNDEFINED}.
914
+ *
915
+ * Components: any number.
916
+ */
917
+ const SPATIAL_FREQUENCY_RESPONSE = 0xA20C;
918
+
919
+ /**
920
+ * Focal plane X resolution.
921
+ *
922
+ * Format: {@link PelFormat::RATIONAL}.
923
+ *
924
+ * Components: 1.
925
+ */
926
+ const FOCAL_PLANE_X_RESOLUTION = 0xA20E;
927
+
928
+ /**
929
+ * Focal plane Y resolution.
930
+ *
931
+ * Format: {@link PelFormat::RATIONAL}.
932
+ *
933
+ * Components: 1.
934
+ */
935
+ const FOCAL_PLANE_Y_RESOLUTION = 0xA20F;
936
+
937
+ /**
938
+ * Focal plane resolution unit.
939
+ *
940
+ * Format: {@link PelFormat::SHORT}.
941
+ *
942
+ * Components: 1.
943
+ */
944
+ const FOCAL_PLANE_RESOLUTION_UNIT = 0xA210;
945
+
946
+ /**
947
+ * Subject location.
948
+ *
949
+ * Format: {@link PelFormat::SHORT}.
950
+ *
951
+ * Components: 1.
952
+ */
953
+ const SUBJECT_LOCATION = 0xA214;
954
+
955
+ /**
956
+ * Exposure index.
957
+ *
958
+ * Format: {@link PelFormat::RATIONAL}.
959
+ *
960
+ * Components: 1.
961
+ */
962
+ const EXPOSURE_INDEX = 0xA215;
963
+
964
+ /**
965
+ * Sensing method.
966
+ *
967
+ * Format: {@link PelFormat::SHORT}.
968
+ *
969
+ * Components: 1.
970
+ */
971
+ const SENSING_METHOD = 0xA217;
972
+
973
+ /**
974
+ * File source.
975
+ *
976
+ * Format: {@link PelFormat::UNDEFINED}.
977
+ *
978
+ * Components: 1.
979
+ */
980
+ const FILE_SOURCE = 0xA300;
981
+
982
+ /**
983
+ * Scene type.
984
+ *
985
+ * Format: {@link PelFormat::UNDEFINED}.
986
+ *
987
+ * Components: 1.
988
+ */
989
+ const SCENE_TYPE = 0xA301;
990
+
991
+ /**
992
+ * CFA pattern.
993
+ *
994
+ * Format: {@link PelFormat::UNDEFINED}.
995
+ *
996
+ * Components: any number.
997
+ */
998
+ const CFA_PATTERN = 0xA302;
999
+
1000
+ /**
1001
+ * Custom image processing.
1002
+ *
1003
+ * Format: {@link PelFormat::SHORT}.
1004
+ *
1005
+ * Components: 1.
1006
+ */
1007
+ const CUSTOM_RENDERED = 0xA401;
1008
+
1009
+ /**
1010
+ * Exposure mode.
1011
+ *
1012
+ * Format: {@link PelFormat::SHORT}.
1013
+ *
1014
+ * Components: 1.
1015
+ */
1016
+ const EXPOSURE_MODE = 0xA402;
1017
+
1018
+ /**
1019
+ * White balance.
1020
+ *
1021
+ * Format: {@link PelFormat::SHORT}.
1022
+ *
1023
+ * Components: 1.
1024
+ */
1025
+ const WHITE_BALANCE = 0xA403;
1026
+
1027
+ /**
1028
+ * Digital zoom ratio.
1029
+ *
1030
+ * Format: {@link PelFormat::RATIONAL}.
1031
+ *
1032
+ * Components: 1.
1033
+ */
1034
+ const DIGITAL_ZOOM_RATIO = 0xA404;
1035
+
1036
+ /**
1037
+ * Focal length in 35mm film.
1038
+ *
1039
+ * Format: {@link PelFormat::RATIONAL}.
1040
+ *
1041
+ * Components: 1.
1042
+ */
1043
+ const FOCAL_LENGTH_IN_35MM_FILM = 0xA405;
1044
+
1045
+ /**
1046
+ * Scene capture type.
1047
+ *
1048
+ * Format: {@link PelFormat::SHORT}.
1049
+ *
1050
+ * Components: 1.
1051
+ */
1052
+ const SCENE_CAPTURE_TYPE = 0xA406;
1053
+
1054
+ /**
1055
+ * Gain control.
1056
+ *
1057
+ * Format: {@link PelFormat::SHORT}.
1058
+ *
1059
+ * Components: 1.
1060
+ */
1061
+ const GAIN_CONTROL = 0xA407;
1062
+
1063
+ /**
1064
+ * Contrast.
1065
+ *
1066
+ * Format: {@link PelFormat::SHORT}.
1067
+ *
1068
+ * Components: 1.
1069
+ */
1070
+ const CONTRAST = 0xA408;
1071
+
1072
+ /**
1073
+ * Saturation.
1074
+ *
1075
+ * Format: {@link PelFormat::SHORT}.
1076
+ *
1077
+ * Components: 1.
1078
+ */
1079
+ const SATURATION = 0xA409;
1080
+
1081
+ /**
1082
+ * Sharpness.
1083
+ *
1084
+ * Format: {@link PelFormat::SHORT}.
1085
+ *
1086
+ * Components: 1.
1087
+ */
1088
+ const SHARPNESS = 0xA40A;
1089
+
1090
+ /**
1091
+ * Device settings description.
1092
+ *
1093
+ * This tag indicates information on the picture-taking conditions
1094
+ * of a particular camera model. The tag is used only to indicate
1095
+ * the picture-taking conditions in the reader.
1096
+ */
1097
+ const DEVICE_SETTING_DESCRIPTION = 0xA40B;
1098
+
1099
+ /**
1100
+ * Subject distance range.
1101
+ *
1102
+ * Format: {@link PelFormat::SHORT}.
1103
+ *
1104
+ * Components: 1.
1105
+ */
1106
+ const SUBJECT_DISTANCE_RANGE = 0xA40C;
1107
+
1108
+ /**
1109
+ * Image unique ID.
1110
+ *
1111
+ * Format: {@link PelFormat::ASCII}.
1112
+ *
1113
+ * Components: 32.
1114
+ */
1115
+ const IMAGE_UNIQUE_ID = 0xA420;
1116
+
1117
+ /**
1118
+ * Gamma.
1119
+ *
1120
+ * Format: {@link PelFormat::RATIONAL}.
1121
+ *
1122
+ * Components: 1.
1123
+ */
1124
+ const GAMMA = 0xA500;
1125
+
1126
+ /**
1127
+ * PrintIM
1128
+ *
1129
+ * Format: {@link PelFormat::UNDEFINED}.
1130
+ *
1131
+ * Components: unknown.
1132
+ */
1133
+ const PRINT_IM = 0xC4A5;
1134
+
1135
+ /**
1136
+ * GPS tag version.
1137
+ *
1138
+ * Format: {@link PelFormat::BYTE}.
1139
+ *
1140
+ * Components: 4.
1141
+ */
1142
+ const GPS_VERSION_ID = 0x0000;
1143
+
1144
+ /**
1145
+ * North or South Latitude.
1146
+ *
1147
+ * Format: {@link PelFormat::ASCII}.
1148
+ *
1149
+ * Components: 2.
1150
+ */
1151
+ const GPS_LATITUDE_REF = 0x0001;
1152
+
1153
+ /**
1154
+ * Latitude.
1155
+ *
1156
+ * Format: {@link PelFormat::RATIONAL}.
1157
+ *
1158
+ * Components: 3.
1159
+ */
1160
+ const GPS_LATITUDE = 0x0002;
1161
+
1162
+ /**
1163
+ * East or West Longitude.
1164
+ *
1165
+ * Format: {@link PelFormat::ASCII}.
1166
+ *
1167
+ * Components: 2.
1168
+ */
1169
+ const GPS_LONGITUDE_REF = 0x0003;
1170
+
1171
+ /**
1172
+ * Longitude.
1173
+ *
1174
+ * Format: {@link PelFormat::RATIONAL}.
1175
+ *
1176
+ * Components: 3.
1177
+ */
1178
+ const GPS_LONGITUDE = 0x0004;
1179
+
1180
+ /**
1181
+ * Altitude reference.
1182
+ *
1183
+ * Format: {@link PelFormat::BYTE}.
1184
+ *
1185
+ * Components: 1.
1186
+ */
1187
+ const GPS_ALTITUDE_REF = 0x0005;
1188
+
1189
+ /**
1190
+ * Altitude.
1191
+ *
1192
+ * Format: {@link PelFormat::RATIONAL}.
1193
+ *
1194
+ * Components: 1.
1195
+ */
1196
+ const GPS_ALTITUDE = 0x0006;
1197
+
1198
+ /**
1199
+ * GPS time (atomic clock).
1200
+ *
1201
+ * Format: {@link PelFormat::RATIONAL}.
1202
+ *
1203
+ * Components: 3.
1204
+ */
1205
+ const GPS_TIME_STAMP = 0x0007;
1206
+
1207
+ /**
1208
+ * GPS satellites used for measurement.
1209
+ *
1210
+ * Format: {@link PelFormat::ASCII}.
1211
+ *
1212
+ * Components: Any.
1213
+ */
1214
+ const GPS_SATELLITES = 0x0008;
1215
+
1216
+ /**
1217
+ * GPS receiver status.
1218
+ *
1219
+ * Format: {@link PelFormat::ASCII}.
1220
+ *
1221
+ * Components: 2.
1222
+ */
1223
+ const GPS_STATUS = 0x0009;
1224
+
1225
+ /**
1226
+ * GPS measurement mode.
1227
+ *
1228
+ * Format: {@link PelFormat::ASCII}.
1229
+ *
1230
+ * Components: 2.
1231
+ */
1232
+ const GPS_MEASURE_MODE = 0x000A;
1233
+
1234
+ /**
1235
+ * Measurement precision.
1236
+ *
1237
+ * Format: {@link PelFormat::RATIONAL}.
1238
+ *
1239
+ * Components: 1.
1240
+ */
1241
+ const GPS_DOP = 0x000B;
1242
+
1243
+ /**
1244
+ * Speed unit.
1245
+ *
1246
+ * Format: {@link PelFormat::ASCII}.
1247
+ *
1248
+ * Components: 2.
1249
+ */
1250
+ const GPS_SPEED_REF = 0x000C;
1251
+
1252
+ /**
1253
+ * Speed of GPS receiver.
1254
+ *
1255
+ * Format: {@link PelFormat::RATIONAL}.
1256
+ *
1257
+ * Components: 1.
1258
+ */
1259
+ const GPS_SPEED = 0x000D;
1260
+
1261
+ /**
1262
+ * Reference for direction of movement.
1263
+ *
1264
+ * Format: {@link PelFormat::ASCII}.
1265
+ *
1266
+ * Components: 2.
1267
+ */
1268
+ const GPS_TRACK_REF = 0x000E;
1269
+
1270
+ /**
1271
+ * Direction of movement.
1272
+ *
1273
+ * Format: {@link PelFormat::RATIONAL}.
1274
+ *
1275
+ * Components: 1.
1276
+ */
1277
+ const GPS_TRACK = 0x000F;
1278
+
1279
+ /**
1280
+ * Reference for direction of image.
1281
+ *
1282
+ * Format: {@link PelFormat::ASCII}.
1283
+ *
1284
+ * Components: 2.
1285
+ */
1286
+ const GPS_IMG_DIRECTION_REF = 0x0010;
1287
+
1288
+ /**
1289
+ * Direction of image.
1290
+ *
1291
+ * Format: {@link PelFormat::RATIONAL}.
1292
+ *
1293
+ * Components: 1.
1294
+ */
1295
+ const GPS_IMG_DIRECTION = 0x0011;
1296
+
1297
+ /**
1298
+ * Geodetic survey data used.
1299
+ *
1300
+ * Format: {@link PelFormat::ASCII}.
1301
+ *
1302
+ * Components: Any.
1303
+ */
1304
+ const GPS_MAP_DATUM = 0x0012;
1305
+
1306
+ /**
1307
+ * Reference for latitude of destination.
1308
+ *
1309
+ * Format: {@link PelFormat::ASCII}.
1310
+ *
1311
+ * Components: 2.
1312
+ */
1313
+ const GPS_DEST_LATITUDE_REF = 0x0013;
1314
+
1315
+ /**
1316
+ * Latitude of destination.
1317
+ *
1318
+ * Format: {@link PelFormat::RATIONAL}.
1319
+ *
1320
+ * Components: 3.
1321
+ */
1322
+ const GPS_DEST_LATITUDE = 0x0014;
1323
+
1324
+ /**
1325
+ * Reference for longitude of destination.
1326
+ *
1327
+ * Format: {@link PelFormat::ASCII}.
1328
+ *
1329
+ * Components: 2.
1330
+ */
1331
+ const GPS_DEST_LONGITUDE_REF = 0x0015;
1332
+
1333
+ /**
1334
+ * Longitude of destination.
1335
+ *
1336
+ * Format: {@link PelFormat::RATIONAL}.
1337
+ *
1338
+ * Components: 3.
1339
+ */
1340
+ const GPS_DEST_LONGITUDE = 0x0016;
1341
+
1342
+ /**
1343
+ * Reference for bearing of destination.
1344
+ *
1345
+ * Format: {@link PelFormat::ASCII}.
1346
+ *
1347
+ * Components: 2.
1348
+ */
1349
+ const GPS_DEST_BEARING_REF = 0x0017;
1350
+
1351
+ /**
1352
+ * Bearing of destination.
1353
+ *
1354
+ * Format: {@link PelFormat::RATIONAL}.
1355
+ *
1356
+ * Components: 1.
1357
+ */
1358
+ const GPS_DEST_BEARING = 0x0018;
1359
+
1360
+ /**
1361
+ * Reference for distance to destination.
1362
+ *
1363
+ * Format: {@link PelFormat::ASCII}.
1364
+ *
1365
+ * Components: 2.
1366
+ */
1367
+ const GPS_DEST_DISTANCE_REF = 0x0019;
1368
+
1369
+ /**
1370
+ * Distance to destination.
1371
+ *
1372
+ * Format: {@link PelFormat::RATIONAL}.
1373
+ *
1374
+ * Components: 1.
1375
+ */
1376
+ const GPS_DEST_DISTANCE = 0x001A;
1377
+
1378
+ /**
1379
+ * Name of GPS processing method.
1380
+ *
1381
+ * Format: {@link PelFormat::UNDEFINED}.
1382
+ *
1383
+ * Components: Any.
1384
+ */
1385
+ const GPS_PROCESSING_METHOD = 0x001B;
1386
+
1387
+ /**
1388
+ * Name of GPS area.
1389
+ *
1390
+ * Format: {@link PelFormat::UNDEFINED}.
1391
+ *
1392
+ * Components: Any.
1393
+ */
1394
+ const GPS_AREA_INFORMATION = 0x001C;
1395
+
1396
+ /**
1397
+ * GPS date.
1398
+ *
1399
+ * Format: {@link PelFormat::ASCII}.
1400
+ *
1401
+ * Components: 11.
1402
+ */
1403
+ const GPS_DATE_STAMP = 0x001D;
1404
+
1405
+ /**
1406
+ * GPS differential correction.
1407
+ *
1408
+ * Format: {@link PelFormat::SHORT}.
1409
+ *
1410
+ * Components: 1.
1411
+ */
1412
+ const GPS_DIFFERENTIAL = 0x001E;
1413
+
1414
+ /**
1415
+ * Canon camera settings.
1416
+ *
1417
+ * Format: {@link PelFormat::SHORT}.
1418
+ *
1419
+ * Components: Any.
1420
+ */
1421
+ const CANON_CAMERA_SETTINGS = 0x0001;
1422
+
1423
+ /**
1424
+ * Canon focal length.
1425
+ *
1426
+ * Format: {@link PelFormat::SHORT}.
1427
+ *
1428
+ * Components: Any.
1429
+ */
1430
+ const CANON_FOCAL_LENGTH = 0x0002;
1431
+
1432
+ /**
1433
+ * Canon shot info.
1434
+ *
1435
+ * Format: {@link PelFormat::SHORT}.
1436
+ *
1437
+ * Components: Any.
1438
+ */
1439
+ const CANON_SHOT_INFO = 0x0004;
1440
+
1441
+ /**
1442
+ * Canon panorama.
1443
+ *
1444
+ * Format: {@link PelFormat::SHORT}.
1445
+ *
1446
+ * Components: Any.
1447
+ */
1448
+ const CANON_PANORAMA = 0x0005;
1449
+
1450
+ /**
1451
+ * Canon image type.
1452
+ *
1453
+ * Format: {@link PelFormat::ASCII}.
1454
+ *
1455
+ * Components: Any.
1456
+ */
1457
+ const CANON_IMAGE_TYPE = 0x0006;
1458
+
1459
+ /**
1460
+ * Canon firmware version.
1461
+ *
1462
+ * Format: {@link PelFormat::ASCII}.
1463
+ *
1464
+ * Components: Any.
1465
+ */
1466
+ const CANON_FIRMWARE_VERSION = 0x0007;
1467
+
1468
+ /**
1469
+ * Canon file number.
1470
+ *
1471
+ * Format: {@link PelFormat::LONG}.
1472
+ *
1473
+ * Components: Any.
1474
+ */
1475
+ const CANON_FILE_NUMBER = 0x0008;
1476
+
1477
+ /**
1478
+ * Canon owner name.
1479
+ *
1480
+ * Format: {@link PelFormat::ASCII}.
1481
+ *
1482
+ * Components: Any.
1483
+ */
1484
+ const CANON_OWNER_NAME = 0x0009;
1485
+
1486
+ /**
1487
+ * Canon serial number.
1488
+ *
1489
+ * Format: {@link PelFormat::LONG}.
1490
+ *
1491
+ * Components: Any.
1492
+ */
1493
+ const CANON_SERIAL_NUMBER = 0x000c;
1494
+
1495
+ /**
1496
+ * Canon camera info.
1497
+ *
1498
+ * Format: {@link PelFormat::SHORT}.
1499
+ *
1500
+ * Components: Any.
1501
+ */
1502
+ const CANON_CAMERA_INFO = 0x000d;
1503
+
1504
+ /**
1505
+ * Canon custom functions.
1506
+ *
1507
+ * Format: {@link PelFormat::SHORT}.
1508
+ *
1509
+ * Components: Any.
1510
+ */
1511
+ const CANON_CUSTOM_FUNCTIONS = 0x000f;
1512
+
1513
+ /**
1514
+ * Canon model id.
1515
+ *
1516
+ * Format: {@link PelFormat::LONG}.
1517
+ *
1518
+ * Components: Any.
1519
+ */
1520
+ const CANON_MODEL_ID = 0x0010;
1521
+
1522
+ /**
1523
+ * Canon picture info.
1524
+ *
1525
+ * Format: {@link PelFormat::SHORT}.
1526
+ *
1527
+ * Components: Any.
1528
+ */
1529
+ const CANON_PICTURE_INFO = 0x0012;
1530
+
1531
+ /**
1532
+ * Canon thumbnail image valid area.
1533
+ *
1534
+ * Format: {@link PelFormat::SSHORT}.
1535
+ *
1536
+ * Components: Any.
1537
+ */
1538
+ const CANON_THUMBNAIL_IMAGE_VALID_AREA = 0x0013;
1539
+
1540
+ /**
1541
+ * Canon serial number format.
1542
+ *
1543
+ * Format: {@link PelFormat::LONG}.
1544
+ *
1545
+ * Components: Any.
1546
+ */
1547
+ const CANON_SERIAL_NUMBER_FORMAT = 0x0015;
1548
+
1549
+ /**
1550
+ * Canon super macro.
1551
+ *
1552
+ * Format: {@link PelFormat::SSHORT}.
1553
+ *
1554
+ * Components: Any.
1555
+ */
1556
+ const CANON_SUPER_MACRO = 0x001a;
1557
+
1558
+ /**
1559
+ * Canon firmware revision.
1560
+ *
1561
+ * Format: {@link PelFormat::LONG}.
1562
+ *
1563
+ * Components: Any.
1564
+ */
1565
+ const CANON_FIRMWARE_REVISION = 0x001e;
1566
+
1567
+ /**
1568
+ * Canon af info.
1569
+ *
1570
+ * Format: {@link PelFormat::SHORT}.
1571
+ *
1572
+ * Components: Any.
1573
+ */
1574
+ const CANON_AF_INFO = 0x0026;
1575
+
1576
+ /**
1577
+ * Canon original decision data offset.
1578
+ *
1579
+ * Format: {@link PelFormat::SLONG}.
1580
+ *
1581
+ * Components: Any.
1582
+ */
1583
+ const CANON_ORIGINAL_DECISION_DATA_OFFSET = 0x0083;
1584
+
1585
+ /**
1586
+ * Canon white balance table.
1587
+ *
1588
+ * Format: {@link PelFormat::SHORT}.
1589
+ *
1590
+ * Components: Any.
1591
+ */
1592
+ const CANON_WHITE_BALANCE_TABLE = 0x00a4;
1593
+
1594
+ /**
1595
+ * Canon file info.
1596
+ *
1597
+ * Format: {@link PelFormat::UNDEFINED}.
1598
+ *
1599
+ * Components: Any.
1600
+ */
1601
+ const CANON_FILE_INFO = 0x0093;
1602
+
1603
+ /**
1604
+ * Canon lens model.
1605
+ *
1606
+ * Format: {@link PelFormat::ASCII}.
1607
+ *
1608
+ * Components: Any.
1609
+ */
1610
+ const CANON_LENS_MODEL = 0x0095;
1611
+
1612
+ /**
1613
+ * Canon internal serial number.
1614
+ *
1615
+ * Format: {@link PelFormat::ASCII}.
1616
+ *
1617
+ * Components: Any.
1618
+ */
1619
+ const CANON_INTERNAL_SERIAL_NUMBER = 0x0096;
1620
+
1621
+ /**
1622
+ * Canon dust removal data.
1623
+ *
1624
+ * Format: {@link PelFormat::ASCII}.
1625
+ *
1626
+ * Components: Any.
1627
+ */
1628
+ const CANON_DUST_REMOVAL_DATA = 0x0097;
1629
+
1630
+ /**
1631
+ * Canon custom functions (2).
1632
+ *
1633
+ * Format: {@link PelFormat::SHORT}.
1634
+ *
1635
+ * Components: Any.
1636
+ */
1637
+ const CANON_CUSTOM_FUNCTIONS_2 = 0x0099;
1638
+
1639
+ /**
1640
+ * Canon processing info.
1641
+ *
1642
+ * Format: {@link PelFormat::SHORT}.
1643
+ *
1644
+ * Components: Any.
1645
+ */
1646
+ const CANON_PROCESSING_INFO = 0x00a0;
1647
+
1648
+ /**
1649
+ * Canon measured color.
1650
+ *
1651
+ * Format: {@link PelFormat::SHORT}.
1652
+ *
1653
+ * Components: Any.
1654
+ */
1655
+ const CANON_MEASURED_COLOR = 0x00aa;
1656
+
1657
+ /**
1658
+ * Canon color space.
1659
+ *
1660
+ * Format: {@link PelFormat::SSHORT}.
1661
+ *
1662
+ * Components: Any.
1663
+ */
1664
+ const CANON_COLOR_SPACE = 0x00b4;
1665
+
1666
+ /**
1667
+ * Canon vrd offset.
1668
+ *
1669
+ * Format: {@link PelFormat::LONG}.
1670
+ *
1671
+ * Components: Any.
1672
+ */
1673
+ const CANON_VRD_OFFSET = 0x00d0;
1674
+
1675
+ /**
1676
+ * Canon sensor info.
1677
+ *
1678
+ * Format: {@link PelFormat::SHORT}.
1679
+ *
1680
+ * Components: Any.
1681
+ */
1682
+ const CANON_SENSOR_INFO = 0x00e0;
1683
+
1684
+ /**
1685
+ * Canon color data.
1686
+ *
1687
+ * Format: {@link PelFormat::SHORT}.
1688
+ *
1689
+ * Components: Any.
1690
+ */
1691
+ const CANON_COLOR_DATA = 0x4001;
1692
+
1693
+ const CANON_CS_MACRO = 0x0001;
1694
+
1695
+ const CANON_CS_SELF_TIMER = 0x0002;
1696
+
1697
+ const CANON_CS_QUALITY = 0x0003;
1698
+
1699
+ const CANON_CS_FLASH_MODE = 0x0004;
1700
+
1701
+ const CANON_CS_DRIVE_MODE = 0x0005;
1702
+
1703
+ const CANON_CS_FOCUS_MODE = 0x0007;
1704
+
1705
+ const CANON_CS_RECORD_MODE = 0x0009;
1706
+
1707
+ const CANON_CS_IMAGE_SIZE = 0x000a;
1708
+
1709
+ const CANON_CS_EASY_MODE = 0x000b;
1710
+
1711
+ const CANON_CS_DIGITAL_ZOOM = 0x000c;
1712
+
1713
+ const CANON_CS_CONTRAST = 0x000d;
1714
+
1715
+ const CANON_CS_SATURATION = 0x000e;
1716
+
1717
+ const CANON_CS_SHARPNESS = 0x000f;
1718
+
1719
+ const CANON_CS_ISO_SPEED = 0x0010;
1720
+
1721
+ const CANON_CS_METERING_MODE = 0x0011;
1722
+
1723
+ const CANON_CS_FOCUS_TYPE = 0x0012;
1724
+
1725
+ const CANON_CS_AF_POINT = 0x0013;
1726
+
1727
+ const CANON_CS_EXPOSURE_PROGRAM = 0x0014;
1728
+
1729
+ const CANON_CS_LENS_TYPE = 0x0016;
1730
+
1731
+ const CANON_CS_LENS = 0x0017;
1732
+
1733
+ const CANON_CS_SHORT_FOCAL = 0x0018;
1734
+
1735
+ const CANON_CS_FOCAL_UNITS = 0x0019;
1736
+
1737
+ const CANON_CS_MAX_APERTURE = 0x001a;
1738
+
1739
+ const CANON_CS_MIN_APERTURE = 0x001b;
1740
+
1741
+ const CANON_CS_FLASH_ACTIVITY = 0x001c;
1742
+
1743
+ const CANON_CS_FLASH_DETAILS = 0x001d;
1744
+
1745
+ const CANON_CS_FOCUS_CONTINUOUS = 0x0020;
1746
+
1747
+ const CANON_CS_AE_SETTING = 0x0021;
1748
+
1749
+ const CANON_CS_IMAGE_STABILIZATION = 0x0022;
1750
+
1751
+ const CANON_CS_DISPLAY_APERTURE = 0x0023;
1752
+
1753
+ const CANON_CS_ZOOM_SOURCE_WIDTH = 0x0024;
1754
+
1755
+ const CANON_CS_ZOOM_TARGET_WIDTH = 0x0025;
1756
+
1757
+ const CANON_CS_SPOT_METERING_MODE = 0x0027;
1758
+
1759
+ const CANON_CS_PHOTO_EFFECT = 0x0028;
1760
+
1761
+ const CANON_CS_MANUAL_FLASH_OUTPUT = 0x0029;
1762
+
1763
+ const CANON_CS_COLOR_TONE = 0x002a;
1764
+
1765
+ const CANON_CS_SRAW_QUALITY = 0x002e;
1766
+
1767
+ const CANON_SI_ISO_SPEED = 0x0002;
1768
+
1769
+ const CANON_SI_MEASURED_EV = 0x0003;
1770
+
1771
+ const CANON_SI_TARGET_APERTURE = 0x0004;
1772
+
1773
+ const CANON_SI_TARGET_SHUTTER_SPEED = 0x0005;
1774
+
1775
+ const CANON_SI_WHITE_BALANCE = 0x0007;
1776
+
1777
+ const CANON_SI_SLOW_SHUTTER = 0x0008;
1778
+
1779
+ const CANON_SI_SEQUENCE = 0x0009;
1780
+
1781
+ const CANON_SI_AF_POINT_USED = 0x000e;
1782
+
1783
+ const CANON_SI_FLASH_BIAS = 0x000f;
1784
+
1785
+ const CANON_SI_AUTO_EXPOSURE_BRACKETING = 0x0010;
1786
+
1787
+ const CANON_SI_SUBJECT_DISTANCE = 0x0013;
1788
+
1789
+ const CANON_SI_APERTURE_VALUE = 0x0015;
1790
+
1791
+ const CANON_SI_SHUTTER_SPEED_VALUE = 0x0016;
1792
+
1793
+ const CANON_SI_MEASURED_EV2 = 0x0017;
1794
+
1795
+ const CANON_SI_CAMERA_TYPE = 0x001a;
1796
+
1797
+ const CANON_SI_AUTO_ROTATE = 0x001b;
1798
+
1799
+ const CANON_SI_ND_FILTER = 0x001c;
1800
+
1801
+ const CANON_PA_PANORAMA_FRAME = 0x0002;
1802
+
1803
+ const CANON_PA_PANORAMA_DIRECTION = 0x0005;
1804
+
1805
+ const CANON_PI_IMAGE_WIDTH = 0x0002;
1806
+
1807
+ const CANON_PI_IMAGE_HEIGHT = 0x0003;
1808
+
1809
+ const CANON_PI_IMAGE_WIDTH_AS_SHOT = 0x0004;
1810
+
1811
+ const CANON_PI_IMAGE_HEIGHT_AS_SHOT = 0x0005;
1812
+
1813
+ const CANON_PI_AF_POINTS_USED = 0x0016;
1814
+
1815
+ const CANON_PI_AF_POINTS_USED_20D = 0x001a;
1816
+
1817
+ const CANON_FI_FILE_NUMBER = 0x0001;
1818
+
1819
+ const CANON_FI_BRACKET_MODE = 0x0003;
1820
+
1821
+ const CANON_FI_BRACKET_VALUE = 0x0004;
1822
+
1823
+ const CANON_FI_BRACKET_SHOT_NUMBER = 0x0005;
1824
+
1825
+ const CANON_FI_RAW_JPG_QUALITY = 0x0006;
1826
+
1827
+ const CANON_FI_RAW_JPG_SIZE = 0x0007;
1828
+
1829
+ const CANON_FI_NOISE_REDUCTION = 0x0008;
1830
+
1831
+ const CANON_FI_WB_BRACKET_MODE = 0x0009;
1832
+
1833
+ const CANON_FI_WB_BRACKET_VALUE_AB = 0x000c;
1834
+
1835
+ const CANON_FI_WB_BRACKET_VALUE_GM = 0x000d;
1836
+
1837
+ const CANON_FI_FILTER_EFFECT = 0x000e;
1838
+
1839
+ const CANON_FI_TONING_EFFECT = 0x000f;
1840
+
1841
+ const CANON_FI_MACRO_MAGNIFICATION = 0x0010;
1842
+
1843
+ const CANON_FI_LIVE_VIEW_SHOOTING = 0x0013;
1844
+
1845
+ const CANON_FI_FOCUS_DISTANCE_UPPER = 0x0014;
1846
+
1847
+ const CANON_FI_FOCUS_DISTANCE_LOWER = 0x0015;
1848
+
1849
+ const CANON_FI_FLASH_EXPOSURE_LOCK = 0x0019;
1850
+
1851
+ /**
1852
+ * Values for tags short names.
1853
+ */
1854
+ protected static $exifTagsShort = [
1855
+ self::INTEROPERABILITY_INDEX => 'InteroperabilityIndex',
1856
+ self::INTEROPERABILITY_VERSION => 'InteroperabilityVersion',
1857
+ self::IMAGE_WIDTH => 'ImageWidth',
1858
+ self::IMAGE_LENGTH => 'ImageLength',
1859
+ self::BITS_PER_SAMPLE => 'BitsPerSample',
1860
+ self::COMPRESSION => 'Compression',
1861
+ self::PHOTOMETRIC_INTERPRETATION => 'PhotometricInterpretation',
1862
+ self::FILL_ORDER => 'FillOrder',
1863
+ self::DOCUMENT_NAME => 'DocumentName',
1864
+ self::IMAGE_DESCRIPTION => 'ImageDescription',
1865
+ self::MAKE => 'Make',
1866
+ self::MODEL => 'Model',
1867
+ self::STRIP_OFFSETS => 'StripOffsets',
1868
+ self::ORIENTATION => 'Orientation',
1869
+ self::SAMPLES_PER_PIXEL => 'SamplesPerPixel',
1870
+ self::ROWS_PER_STRIP => 'RowsPerStrip',
1871
+ self::STRIP_BYTE_COUNTS => 'StripByteCounts',
1872
+ self::X_RESOLUTION => 'XResolution',
1873
+ self::Y_RESOLUTION => 'YResolution',
1874
+ self::PLANAR_CONFIGURATION => 'PlanarConfiguration',
1875
+ self::RESOLUTION_UNIT => 'ResolutionUnit',
1876
+ self::TRANSFER_FUNCTION => 'TransferFunction',
1877
+ self::SOFTWARE => 'Software',
1878
+ self::DATE_TIME => 'DateTime',
1879
+ self::ARTIST => 'Artist',
1880
+ self::WHITE_POINT => 'WhitePoint',
1881
+ self::PRIMARY_CHROMATICITIES => 'PrimaryChromaticities',
1882
+ self::TRANSFER_RANGE => 'TransferRange',
1883
+ self::JPEG_PROC => 'JPEGProc',
1884
+ self::JPEG_INTERCHANGE_FORMAT => 'JPEGInterchangeFormat',
1885
+ self::JPEG_INTERCHANGE_FORMAT_LENGTH => 'JPEGInterchangeFormatLength',
1886
+ self::YCBCR_COEFFICIENTS => 'YCbCrCoefficients',
1887
+ self::YCBCR_SUB_SAMPLING => 'YCbCrSubSampling',
1888
+ self::YCBCR_POSITIONING => 'YCbCrPositioning',
1889
+ self::REFERENCE_BLACK_WHITE => 'ReferenceBlackWhite',
1890
+ self::RELATED_IMAGE_FILE_FORMAT => 'RelatedImageFileFormat',
1891
+ self::RELATED_IMAGE_WIDTH => 'RelatedImageWidth',
1892
+ self::RELATED_IMAGE_LENGTH => 'RelatedImageLength',
1893
+ self::RATING => 'Rating',
1894
+ self::RATING_PERCENT => 'RatingPercent',
1895
+ self::CFA_REPEAT_PATTERN_DIM => 'CFARepeatPatternDim',
1896
+ self::CFA_PATTERN => 'CFAPattern',
1897
+ self::BATTERY_LEVEL => 'BatteryLevel',
1898
+ self::COPYRIGHT => 'Copyright',
1899
+ self::EXPOSURE_TIME => 'ExposureTime',
1900
+ self::FNUMBER => 'FNumber',
1901
+ self::IPTC_NAA => 'IPTC/NAA',
1902
+ self::EXIF_IFD_POINTER => 'ExifIFDPointer',
1903
+ self::INTER_COLOR_PROFILE => 'InterColorProfile',
1904
+ self::EXPOSURE_PROGRAM => 'ExposureProgram',
1905
+ self::SPECTRAL_SENSITIVITY => 'SpectralSensitivity',
1906
+ self::GPS_INFO_IFD_POINTER => 'GPSInfoIFDPointer',
1907
+ self::ISO_SPEED_RATINGS => 'ISOSpeedRatings',
1908
+ self::OECF => 'OECF',
1909
+ self::EXIF_VERSION => 'ExifVersion',
1910
+ self::DATE_TIME_ORIGINAL => 'DateTimeOriginal',
1911
+ self::DATE_TIME_DIGITIZED => 'DateTimeDigitized',
1912
+ self::OFFSET_TIME => 'OffsetTime',
1913
+ self::OFFSET_TIME_ORIGINAL => 'OffsetTimeOriginal',
1914
+ self::OFFSET_TIME_DIGITIZED => 'OffsetTimeDigitized',
1915
+ self::COMPONENTS_CONFIGURATION => 'ComponentsConfiguration',
1916
+ self::COMPRESSED_BITS_PER_PIXEL => 'CompressedBitsPerPixel',
1917
+ self::SHUTTER_SPEED_VALUE => 'ShutterSpeedValue',
1918
+ self::APERTURE_VALUE => 'ApertureValue',
1919
+ self::BRIGHTNESS_VALUE => 'BrightnessValue',
1920
+ self::EXPOSURE_BIAS_VALUE => 'ExposureBiasValue',
1921
+ self::MAX_APERTURE_VALUE => 'MaxApertureValue',
1922
+ self::SUBJECT_DISTANCE => 'SubjectDistance',
1923
+ self::METERING_MODE => 'MeteringMode',
1924
+ self::LIGHT_SOURCE => 'LightSource',
1925
+ self::FLASH => 'Flash',
1926
+ self::FOCAL_LENGTH => 'FocalLength',
1927
+ self::MAKER_NOTE => 'MakerNote',
1928
+ self::USER_COMMENT => 'UserComment',
1929
+ self::SUB_SEC_TIME => 'SubSecTime',
1930
+ self::SUB_SEC_TIME_ORIGINAL => 'SubSecTimeOriginal',
1931
+ self::SUB_SEC_TIME_DIGITIZED => 'SubSecTimeDigitized',
1932
+ self::XP_TITLE => 'WindowsXPTitle',
1933
+ self::XP_COMMENT => 'WindowsXPComment',
1934
+ self::XP_AUTHOR => 'WindowsXPAuthor',
1935
+ self::XP_KEYWORDS => 'WindowsXPKeywords',
1936
+ self::XP_SUBJECT => 'WindowsXPSubject',
1937
+ self::FLASH_PIX_VERSION => 'FlashPixVersion',
1938
+ self::COLOR_SPACE => 'ColorSpace',
1939
+ self::PIXEL_X_DIMENSION => 'PixelXDimension',
1940
+ self::PIXEL_Y_DIMENSION => 'PixelYDimension',
1941
+ self::RELATED_SOUND_FILE => 'RelatedSoundFile',
1942
+ self::INTEROPERABILITY_IFD_POINTER => 'InteroperabilityIFDPointer',
1943
+ self::FLASH_ENERGY => 'FlashEnergy',
1944
+ self::SPATIAL_FREQUENCY_RESPONSE => 'SpatialFrequencyResponse',
1945
+ self::FOCAL_PLANE_X_RESOLUTION => 'FocalPlaneXResolution',
1946
+ self::FOCAL_PLANE_Y_RESOLUTION => 'FocalPlaneYResolution',
1947
+ self::FOCAL_PLANE_RESOLUTION_UNIT => 'FocalPlaneResolutionUnit',
1948
+ self::SUBJECT_LOCATION => 'SubjectLocation',
1949
+ self::EXPOSURE_INDEX => 'ExposureIndex',
1950
+ self::SENSING_METHOD => 'SensingMethod',
1951
+ self::FILE_SOURCE => 'FileSource',
1952
+ self::SCENE_TYPE => 'SceneType',
1953
+ self::SUBJECT_AREA => 'SubjectArea',
1954
+ self::CUSTOM_RENDERED => 'CustomRendered',
1955
+ self::EXPOSURE_MODE => 'ExposureMode',
1956
+ self::WHITE_BALANCE => 'WhiteBalance',
1957
+ self::DIGITAL_ZOOM_RATIO => 'DigitalZoomRatio',
1958
+ self::FOCAL_LENGTH_IN_35MM_FILM => 'FocalLengthIn35mmFilm',
1959
+ self::SCENE_CAPTURE_TYPE => 'SceneCaptureType',
1960
+ self::GAIN_CONTROL => 'GainControl',
1961
+ self::CONTRAST => 'Contrast',
1962
+ self::SATURATION => 'Saturation',
1963
+ self::SHARPNESS => 'Sharpness',
1964
+ self::DEVICE_SETTING_DESCRIPTION => 'DeviceSettingDescription',
1965
+ self::SUBJECT_DISTANCE_RANGE => 'SubjectDistanceRange',
1966
+ self::IMAGE_UNIQUE_ID => 'ImageUniqueID',
1967
+ self::GAMMA => 'Gamma',
1968
+ self::PRINT_IM => 'PrintIM',
1969
+ self::PREDICTOR => 'Predictor',
1970
+ self::EXTRA_SAMPLES => 'ExtraSamples',
1971
+ self::SAMPLE_FORMAT => 'SampleFormat',
1972
+ self::APPLICATION_NOTES => 'ApplicationNotes'
1973
+ ];
1974
+
1975
+ /**
1976
+ * Values for tags titles.
1977
+ */
1978
+ protected static $exifTagsTitle = [
1979
+ self::INTEROPERABILITY_INDEX => 'Interoperability Index',
1980
+ self::INTEROPERABILITY_VERSION => 'Interoperability Version',
1981
+ self::IMAGE_WIDTH => 'Image Width',
1982
+ self::IMAGE_LENGTH => 'Image Length',
1983
+ self::BITS_PER_SAMPLE => 'Bits per Sample',
1984
+ self::COMPRESSION => 'Compression',
1985
+ self::PHOTOMETRIC_INTERPRETATION => 'Photometric Interpretation',
1986
+ self::FILL_ORDER => 'Fill Order',
1987
+ self::DOCUMENT_NAME => 'Document Name',
1988
+ self::IMAGE_DESCRIPTION => 'Image Description',
1989
+ self::MAKE => 'Manufacturer',
1990
+ self::MODEL => 'Model',
1991
+ self::STRIP_OFFSETS => 'Strip Offsets',
1992
+ self::ORIENTATION => 'Orientation',
1993
+ self::SAMPLES_PER_PIXEL => 'Samples per Pixel',
1994
+ self::ROWS_PER_STRIP => 'Rows per Strip',
1995
+ self::STRIP_BYTE_COUNTS => 'Strip Byte Count',
1996
+ self::X_RESOLUTION => 'x-Resolution',
1997
+ self::Y_RESOLUTION => 'y-Resolution',
1998
+ self::PLANAR_CONFIGURATION => 'Planar Configuration',
1999
+ self::RESOLUTION_UNIT => 'Resolution Unit',
2000
+ self::TRANSFER_FUNCTION => 'Transfer Function',
2001
+ self::SOFTWARE => 'Software',
2002
+ self::DATE_TIME => 'Date and Time',
2003
+ self::ARTIST => 'Artist',
2004
+ self::WHITE_POINT => 'White Point',
2005
+ self::PRIMARY_CHROMATICITIES => 'Primary Chromaticities',
2006
+ self::TRANSFER_RANGE => 'Transfer Range',
2007
+ self::JPEG_PROC => 'JPEG Process',
2008
+ self::JPEG_INTERCHANGE_FORMAT => 'JPEG Interchange Format',
2009
+ self::JPEG_INTERCHANGE_FORMAT_LENGTH => 'JPEG Interchange Format Length',
2010
+ self::YCBCR_COEFFICIENTS => 'YCbCr Coefficients',
2011
+ self::YCBCR_SUB_SAMPLING => 'YCbCr Sub-Sampling',
2012
+ self::YCBCR_POSITIONING => 'YCbCr Positioning',
2013
+ self::REFERENCE_BLACK_WHITE => 'Reference Black/White',
2014
+ self::RELATED_IMAGE_FILE_FORMAT => 'Related Image File Format',
2015
+ self::RELATED_IMAGE_WIDTH => 'Related Image Width',
2016
+ self::RELATED_IMAGE_LENGTH => 'Related Image Length',
2017
+ self::RATING => 'Star Rating',
2018
+ self::RATING_PERCENT => 'Percent Rating',
2019
+ self::CFA_REPEAT_PATTERN_DIM => 'CFA Repeat Pattern Dim',
2020
+ self::CFA_PATTERN => 'CFA Pattern',
2021
+ self::BATTERY_LEVEL => 'Battery Level',
2022
+ self::COPYRIGHT => 'Copyright',
2023
+ self::EXPOSURE_TIME => 'Exposure Time',
2024
+ self::FNUMBER => 'FNumber',
2025
+ self::IPTC_NAA => 'IPTC/NAA',
2026
+ self::EXIF_IFD_POINTER => 'Exif IFD Pointer',
2027
+ self::INTER_COLOR_PROFILE => 'Inter Color Profile',
2028
+ self::EXPOSURE_PROGRAM => 'Exposure Program',
2029
+ self::SPECTRAL_SENSITIVITY => 'Spectral Sensitivity',
2030
+ self::GPS_INFO_IFD_POINTER => 'GPS Info IFD Pointer',
2031
+ self::ISO_SPEED_RATINGS => 'ISO Speed Ratings',
2032
+ self::OECF => 'OECF',
2033
+ self::EXIF_VERSION => 'Exif Version',
2034
+ self::DATE_TIME_ORIGINAL => 'Date and Time (original)',
2035
+ self::DATE_TIME_DIGITIZED => 'Date and Time (digitized)',
2036
+ self::OFFSET_TIME => 'Timezone',
2037
+ self::OFFSET_TIME_ORIGINAL => 'Timezone (original)',
2038
+ self::OFFSET_TIME_DIGITIZED => 'Timezone (digitized)',
2039
+ self::COMPONENTS_CONFIGURATION => 'Components Configuration',
2040
+ self::COMPRESSED_BITS_PER_PIXEL => 'Compressed Bits per Pixel',
2041
+ self::SHUTTER_SPEED_VALUE => 'Shutter speed',
2042
+ self::APERTURE_VALUE => 'Aperture',
2043
+ self::BRIGHTNESS_VALUE => 'Brightness',
2044
+ self::EXPOSURE_BIAS_VALUE => 'Exposure Bias',
2045
+ self::MAX_APERTURE_VALUE => 'Max Aperture Value',
2046
+ self::SUBJECT_DISTANCE => 'Subject Distance',
2047
+ self::METERING_MODE => 'Metering Mode',
2048
+ self::LIGHT_SOURCE => 'Light Source',
2049
+ self::FLASH => 'Flash',
2050
+ self::FOCAL_LENGTH => 'Focal Length',
2051
+ self::MAKER_NOTE => 'Maker Note',
2052
+ self::USER_COMMENT => 'User Comment',
2053
+ self::SUB_SEC_TIME => 'SubSec Time',
2054
+ self::SUB_SEC_TIME_ORIGINAL => 'SubSec Time Original',
2055
+ self::SUB_SEC_TIME_DIGITIZED => 'SubSec Time Digitized',
2056
+ self::XP_TITLE => 'Windows XP Title',
2057
+ self::XP_COMMENT => 'Windows XP Comment',
2058
+ self::XP_AUTHOR => 'Windows XP Author',
2059
+ self::XP_KEYWORDS => 'Windows XP Keywords',
2060
+ self::XP_SUBJECT => 'Windows XP Subject',
2061
+ self::FLASH_PIX_VERSION => 'FlashPix Version',
2062
+ self::COLOR_SPACE => 'Color Space',
2063
+ self::PIXEL_X_DIMENSION => 'Pixel x-Dimension',
2064
+ self::PIXEL_Y_DIMENSION => 'Pixel y-Dimension',
2065
+ self::RELATED_SOUND_FILE => 'Related Sound File',
2066
+ self::INTEROPERABILITY_IFD_POINTER => 'Interoperability IFD Pointer',
2067
+ self::FLASH_ENERGY => 'Flash Energy',
2068
+ self::SPATIAL_FREQUENCY_RESPONSE => 'Spatial Frequency Response',
2069
+ self::FOCAL_PLANE_X_RESOLUTION => 'Focal Plane x-Resolution',
2070
+ self::FOCAL_PLANE_Y_RESOLUTION => 'Focal Plane y-Resolution',
2071
+ self::FOCAL_PLANE_RESOLUTION_UNIT => 'Focal Plane Resolution Unit',
2072
+ self::SUBJECT_LOCATION => 'Subject Location',
2073
+ self::EXPOSURE_INDEX => 'Exposure index',
2074
+ self::SENSING_METHOD => 'Sensing Method',
2075
+ self::FILE_SOURCE => 'File Source',
2076
+ self::SCENE_TYPE => 'Scene Type',
2077
+ self::SUBJECT_AREA => 'Subject Area',
2078
+ self::CUSTOM_RENDERED => 'Custom Rendered',
2079
+ self::EXPOSURE_MODE => 'Exposure Mode',
2080
+ self::WHITE_BALANCE => 'White Balance',
2081
+ self::DIGITAL_ZOOM_RATIO => 'Digital Zoom Ratio',
2082
+ self::FOCAL_LENGTH_IN_35MM_FILM => 'Focal Length In 35mm Film',
2083
+ self::SCENE_CAPTURE_TYPE => 'Scene Capture Type',
2084
+ self::GAIN_CONTROL => 'Gain Control',
2085
+ self::CONTRAST => 'Contrast',
2086
+ self::SATURATION => 'Saturation',
2087
+ self::SHARPNESS => 'Sharpness',
2088
+ self::DEVICE_SETTING_DESCRIPTION => 'Device Setting Description',
2089
+ self::SUBJECT_DISTANCE_RANGE => 'Subject Distance Range',
2090
+ self::IMAGE_UNIQUE_ID => 'Image Unique ID',
2091
+ self::GAMMA => 'Gamma',
2092
+ self::PRINT_IM => 'Print IM',
2093
+ self::PREDICTOR => 'Predictor',
2094
+ self::EXTRA_SAMPLES => 'Extra Samples',
2095
+ self::SAMPLE_FORMAT => 'Sample Format',
2096
+ self::APPLICATION_NOTES => 'Application Notes'
2097
+ ];
2098
+
2099
+ /**
2100
+ * Values for gps tags short names.
2101
+ */
2102
+ protected static $gpsTagsShort = [
2103
+ self::GPS_VERSION_ID => 'GPSVersionID',
2104
+ self::GPS_LATITUDE_REF => 'GPSLatitudeRef',
2105
+ self::GPS_LATITUDE => 'GPSLatitude',
2106
+ self::GPS_LONGITUDE_REF => 'GPSLongitudeRef',
2107
+ self::GPS_LONGITUDE => 'GPSLongitude',
2108
+ self::GPS_ALTITUDE_REF => 'GPSAltitudeRef',
2109
+ self::GPS_ALTITUDE => 'GPSAltitude',
2110
+ self::GPS_TIME_STAMP => 'GPSTimeStamp',
2111
+ self::GPS_SATELLITES => 'GPSSatellites',
2112
+ self::GPS_STATUS => 'GPSStatus',
2113
+ self::GPS_MEASURE_MODE => 'GPSMeasureMode',
2114
+ self::GPS_DOP => 'GPSDOP',
2115
+ self::GPS_SPEED_REF => 'GPSSpeedRef',
2116
+ self::GPS_SPEED => 'GPSSpeed',
2117
+ self::GPS_TRACK_REF => 'GPSTrackRef',
2118
+ self::GPS_TRACK => 'GPSTrack',
2119
+ self::GPS_IMG_DIRECTION_REF => 'GPSImgDirectionRef',
2120
+ self::GPS_IMG_DIRECTION => 'GPSImgDirection',
2121
+ self::GPS_MAP_DATUM => 'GPSMapDatum',
2122
+ self::GPS_DEST_LATITUDE_REF => 'GPSDestLatitudeRef',
2123
+ self::GPS_DEST_LATITUDE => 'GPSDestLatitude',
2124
+ self::GPS_DEST_LONGITUDE_REF => 'GPSDestLongitudeRef',
2125
+ self::GPS_DEST_LONGITUDE => 'GPSDestLongitude',
2126
+ self::GPS_DEST_BEARING_REF => 'GPSDestBearingRef',
2127
+ self::GPS_DEST_BEARING => 'GPSDestBearing',
2128
+ self::GPS_DEST_DISTANCE_REF => 'GPSDestDistanceRef',
2129
+ self::GPS_DEST_DISTANCE => 'GPSDestDistance',
2130
+ self::GPS_PROCESSING_METHOD => 'GPSProcessingMethod',
2131
+ self::GPS_AREA_INFORMATION => 'GPSAreaInformation',
2132
+ self::GPS_DATE_STAMP => 'GPSDateStamp',
2133
+ self::GPS_DIFFERENTIAL => 'GPSDifferential'
2134
+ ];
2135
+
2136
+ /**
2137
+ * Values for canon maker notes tags titles
2138
+ */
2139
+ protected static $canonTagsTitle = [
2140
+ self::CANON_CAMERA_SETTINGS => 'Camera Settings',
2141
+ self::CANON_FOCAL_LENGTH => 'Focal Length',
2142
+ self::CANON_SHOT_INFO => 'Shot Info',
2143
+ self::CANON_PANORAMA => 'Panorama',
2144
+ self::CANON_IMAGE_TYPE => 'Image Type',
2145
+ self::CANON_FIRMWARE_VERSION => 'Firmware Version',
2146
+ self::CANON_FILE_NUMBER => 'File Number',
2147
+ self::CANON_OWNER_NAME => 'Owner Name',
2148
+ self::CANON_SERIAL_NUMBER => 'Serial Number',
2149
+ self::CANON_CAMERA_INFO => 'Camera Info',
2150
+ self::CANON_CUSTOM_FUNCTIONS => 'Custom Functions',
2151
+ self::CANON_MODEL_ID => 'Model ID',
2152
+ self::CANON_PICTURE_INFO => 'Picture Info',
2153
+ self::CANON_THUMBNAIL_IMAGE_VALID_AREA => 'Thumbnail Image Valid Area',
2154
+ self::CANON_SERIAL_NUMBER_FORMAT => 'Serial number format',
2155
+ self::CANON_SUPER_MACRO => 'Super macro',
2156
+ self::CANON_FIRMWARE_REVISION => 'Firmware Revision',
2157
+ self::CANON_AF_INFO => 'AF info',
2158
+ self::CANON_ORIGINAL_DECISION_DATA_OFFSET => 'Original decision data offset',
2159
+ self::CANON_WHITE_BALANCE_TABLE => 'White balance table',
2160
+ self::CANON_LENS_MODEL => 'Lens model',
2161
+ self::CANON_INTERNAL_SERIAL_NUMBER => 'Internal serial number',
2162
+ self::CANON_DUST_REMOVAL_DATA => 'Dust removal data',
2163
+ self::CANON_CUSTOM_FUNCTIONS_2 => 'Custom functions',
2164
+ self::CANON_PROCESSING_INFO => 'Processing info',
2165
+ self::CANON_MEASURED_COLOR => 'Measured color',
2166
+ self::CANON_COLOR_SPACE => 'Color Space',
2167
+ self::CANON_VRD_OFFSET => 'VRD offset',
2168
+ self::CANON_SENSOR_INFO => 'Sensor info',
2169
+ self::CANON_COLOR_DATA => 'Color data'
2170
+ ];
2171
+
2172
+ /**
2173
+ * Values for canon maker notes tags short names
2174
+ */
2175
+ protected static $canonTagsShort = [
2176
+ self::CANON_CAMERA_SETTINGS => 'CameraSettings',
2177
+ self::CANON_FOCAL_LENGTH => 'FocalLength',
2178
+ self::CANON_SHOT_INFO => 'ShotInfo',
2179
+ self::CANON_PANORAMA => 'Panorama',
2180
+ self::CANON_IMAGE_TYPE => 'ImageType',
2181
+ self::CANON_FIRMWARE_VERSION => 'FirmwareVersion',
2182
+ self::CANON_FILE_NUMBER => 'FileNumber',
2183
+ self::CANON_OWNER_NAME => 'OwnerName',
2184
+ self::CANON_SERIAL_NUMBER => 'SerialNumber',
2185
+ self::CANON_CAMERA_INFO => 'CameraInfo',
2186
+ self::CANON_CUSTOM_FUNCTIONS => 'CustomFunctions',
2187
+ self::CANON_MODEL_ID => 'ModelID',
2188
+ self::CANON_PICTURE_INFO => 'PictureInfo',
2189
+ self::CANON_THUMBNAIL_IMAGE_VALID_AREA => 'ThumbnailImageValidArea',
2190
+ self::CANON_SERIAL_NUMBER_FORMAT => 'Serial Number Format',
2191
+ self::CANON_SUPER_MACRO => 'SuperMacro',
2192
+ self::CANON_FIRMWARE_REVISION => 'FirmwareRevision',
2193
+ self::CANON_AF_INFO => 'AFinfo',
2194
+ self::CANON_ORIGINAL_DECISION_DATA_OFFSET => 'OriginalDecision Data Offset',
2195
+ self::CANON_WHITE_BALANCE_TABLE => 'WhiteBalanceTable',
2196
+ self::CANON_LENS_MODEL => 'LensModel',
2197
+ self::CANON_INTERNAL_SERIAL_NUMBER => 'InternalSerialNumber',
2198
+ self::CANON_DUST_REMOVAL_DATA => 'DustRemovalData',
2199
+ self::CANON_CUSTOM_FUNCTIONS_2 => 'CustomFunctions',
2200
+ self::CANON_PROCESSING_INFO => 'ProcessingInfo',
2201
+ self::CANON_MEASURED_COLOR => 'MeasuredColor',
2202
+ self::CANON_COLOR_SPACE => 'ColorSpace',
2203
+ self::CANON_VRD_OFFSET => 'VRDOffset',
2204
+ self::CANON_SENSOR_INFO => 'SensorInfo',
2205
+ self::CANON_COLOR_DATA => 'ColorData'
2206
+ ];
2207
+
2208
+ /**
2209
+ * Values for canon camera settings tags titles
2210
+ */
2211
+ protected static $canonCsTagsTitle = [
2212
+ self::CANON_CS_MACRO => 'Macro Mode',
2213
+ self::CANON_CS_SELF_TIMER => 'Self Timer',
2214
+ self::CANON_CS_QUALITY => 'Quality',
2215
+ self::CANON_CS_FLASH_MODE => 'Flash Mode',
2216
+ self::CANON_CS_DRIVE_MODE => 'Drive Mode',
2217
+ self::CANON_CS_FOCUS_MODE => 'Focus Mode',
2218
+ self::CANON_CS_RECORD_MODE => 'Record Mode',
2219
+ self::CANON_CS_IMAGE_SIZE => 'Image Size',
2220
+ self::CANON_CS_EASY_MODE => 'Easy Shooting Mode',
2221
+ self::CANON_CS_DIGITAL_ZOOM => 'Digital Zoom',
2222
+ self::CANON_CS_CONTRAST => 'Contrast',
2223
+ self::CANON_CS_SATURATION => 'Saturation',
2224
+ self::CANON_CS_SHARPNESS => 'Sharpness',
2225
+ self::CANON_CS_ISO_SPEED => 'ISO Speed',
2226
+ self::CANON_CS_METERING_MODE => 'Metering Mode',
2227
+ self::CANON_CS_FOCUS_TYPE => 'Focus Type',
2228
+ self::CANON_CS_AF_POINT => 'AF Point Selected',
2229
+ self::CANON_CS_EXPOSURE_PROGRAM => 'Exposure Mode',
2230
+ self::CANON_CS_LENS_TYPE => 'Lens Type',
2231
+ self::CANON_CS_LENS => 'Long Focal Length',
2232
+ self::CANON_CS_SHORT_FOCAL => 'Short Focal Length',
2233
+ self::CANON_CS_FOCAL_UNITS => 'Focal Units',
2234
+ self::CANON_CS_MAX_APERTURE => 'Max Aperture',
2235
+ self::CANON_CS_MIN_APERTURE => 'Min Aperture',
2236
+ self::CANON_CS_FLASH_ACTIVITY => 'Flash Activity',
2237
+ self::CANON_CS_FLASH_DETAILS => 'Flash Details',
2238
+ self::CANON_CS_FOCUS_CONTINUOUS => 'Focus Continuous',
2239
+ self::CANON_CS_AE_SETTING => 'AE Setting',
2240
+ self::CANON_CS_IMAGE_STABILIZATION => 'Image Stabilization',
2241
+ self::CANON_CS_DISPLAY_APERTURE => 'Display Aperture',
2242
+ self::CANON_CS_ZOOM_SOURCE_WIDTH => 'Zoom Source Width',
2243
+ self::CANON_CS_ZOOM_TARGET_WIDTH => 'Zoom Target Width',
2244
+ self::CANON_CS_SPOT_METERING_MODE => 'Spot Metering Mode',
2245
+ self::CANON_CS_PHOTO_EFFECT => 'Photo Effect',
2246
+ self::CANON_CS_MANUAL_FLASH_OUTPUT => 'Manual Flash Output',
2247
+ self::CANON_CS_COLOR_TONE => 'Color Tone',
2248
+ self::CANON_CS_SRAW_QUALITY => 'SRAW Quality'
2249
+ ];
2250
+
2251
+ /**
2252
+ * Values for canon camera settings tags short names
2253
+ */
2254
+ protected static $canonCsTagsShort = [
2255
+ self::CANON_CS_MACRO => 'MacroMode',
2256
+ self::CANON_CS_SELF_TIMER => 'SelfTimer',
2257
+ self::CANON_CS_QUALITY => 'Quality',
2258
+ self::CANON_CS_FLASH_MODE => 'FlashMode',
2259
+ self::CANON_CS_DRIVE_MODE => 'DriveMode',
2260
+ self::CANON_CS_FOCUS_MODE => 'FocusMode',
2261
+ self::CANON_CS_RECORD_MODE => 'RecordMode',
2262
+ self::CANON_CS_IMAGE_SIZE => 'ImageSize',
2263
+ self::CANON_CS_EASY_MODE => 'EasyShootingMode',
2264
+ self::CANON_CS_DIGITAL_ZOOM => 'DigitalZoom',
2265
+ self::CANON_CS_CONTRAST => 'Contrast',
2266
+ self::CANON_CS_SATURATION => 'Saturation',
2267
+ self::CANON_CS_SHARPNESS => 'Sharpness',
2268
+ self::CANON_CS_ISO_SPEED => 'ISOSpeed',
2269
+ self::CANON_CS_METERING_MODE => 'MeteringMode',
2270
+ self::CANON_CS_FOCUS_TYPE => 'FocusType',
2271
+ self::CANON_CS_AF_POINT => 'AFPointSelected',
2272
+ self::CANON_CS_EXPOSURE_PROGRAM => 'ExposureMode',
2273
+ self::CANON_CS_LENS_TYPE => 'LensType',
2274
+ self::CANON_CS_LENS => 'LongFocalLength',
2275
+ self::CANON_CS_SHORT_FOCAL => 'ShortFocalLength',
2276
+ self::CANON_CS_FOCAL_UNITS => 'FocalUnits',
2277
+ self::CANON_CS_MAX_APERTURE => 'MaxAperture',
2278
+ self::CANON_CS_MIN_APERTURE => 'MinAperture',
2279
+ self::CANON_CS_FLASH_ACTIVITY => 'FlashActivity',
2280
+ self::CANON_CS_FLASH_DETAILS => 'FlashDetails',
2281
+ self::CANON_CS_FOCUS_CONTINUOUS => 'FocusContinuous',
2282
+ self::CANON_CS_AE_SETTING => 'AESetting',
2283
+ self::CANON_CS_IMAGE_STABILIZATION => 'ImageStabilization',
2284
+ self::CANON_CS_DISPLAY_APERTURE => 'DisplayAperture',
2285
+ self::CANON_CS_ZOOM_SOURCE_WIDTH => 'ZoomSourceWidth',
2286
+ self::CANON_CS_ZOOM_TARGET_WIDTH => 'ZoomTargetWidth',
2287
+ self::CANON_CS_SPOT_METERING_MODE => 'SpotMeteringMode',
2288
+ self::CANON_CS_PHOTO_EFFECT => 'PhotoEffect',
2289
+ self::CANON_CS_MANUAL_FLASH_OUTPUT => 'ManualFlashOutput',
2290
+ self::CANON_CS_COLOR_TONE => 'ColorTone',
2291
+ self::CANON_CS_SRAW_QUALITY => 'SRAWQuality'
2292
+ ];
2293
+
2294
+ /**
2295
+ * Values for canon shot info tags titles
2296
+ */
2297
+ protected static $canonSiTagsTitle = [
2298
+ self::CANON_SI_ISO_SPEED => 'ISO Speed Used',
2299
+ self::CANON_SI_MEASURED_EV => 'Measured EV',
2300
+ self::CANON_SI_TARGET_APERTURE => 'Target Aperture',
2301
+ self::CANON_SI_TARGET_SHUTTER_SPEED => 'Target Shutter Speed',
2302
+ self::CANON_SI_WHITE_BALANCE => 'White Balance Setting',
2303
+ self::CANON_SI_SLOW_SHUTTER => 'Slow Shutter',
2304
+ self::CANON_SI_SEQUENCE => 'Sequence Number',
2305
+ self::CANON_SI_AF_POINT_USED => 'AF Point Used',
2306
+ self::CANON_SI_FLASH_BIAS => 'Flash Bias',
2307
+ self::CANON_SI_AUTO_EXPOSURE_BRACKETING => 'Auto Exposure Bracketing',
2308
+ self::CANON_SI_SUBJECT_DISTANCE => 'Subject Distance',
2309
+ self::CANON_SI_APERTURE_VALUE => 'Aperture',
2310
+ self::CANON_SI_SHUTTER_SPEED_VALUE => 'Shutter Speed',
2311
+ self::CANON_SI_MEASURED_EV2 => 'Measured EV 2',
2312
+ self::CANON_SI_CAMERA_TYPE => 'Camera Type',
2313
+ self::CANON_SI_AUTO_ROTATE => 'Auto Rotate',
2314
+ self::CANON_SI_ND_FILTER => 'ND Filter'
2315
+ ];
2316
+
2317
+ /**
2318
+ * Values for canon shot info tags short names
2319
+ */
2320
+ protected static $canonSiTagsShort = [
2321
+ self::CANON_SI_ISO_SPEED => 'ISOSpeedUsed',
2322
+ self::CANON_SI_MEASURED_EV => 'MeasuredEV',
2323
+ self::CANON_SI_TARGET_APERTURE => 'TargetAperture',
2324
+ self::CANON_SI_TARGET_SHUTTER_SPEED => 'TargetShutterSpeed',
2325
+ self::CANON_SI_WHITE_BALANCE => 'WhiteBalanceSetting',
2326
+ self::CANON_SI_SLOW_SHUTTER => 'SlowShutter',
2327
+ self::CANON_SI_SEQUENCE => 'SequenceNumber',
2328
+ self::CANON_SI_AF_POINT_USED => 'AFPointUsed',
2329
+ self::CANON_SI_FLASH_BIAS => 'FlashBias',
2330
+ self::CANON_SI_AUTO_EXPOSURE_BRACKETING => 'AutoExposureBracketing',
2331
+ self::CANON_SI_SUBJECT_DISTANCE => 'SubjectDistance',
2332
+ self::CANON_SI_APERTURE_VALUE => 'Aperture',
2333
+ self::CANON_SI_SHUTTER_SPEED_VALUE => 'ShutterSpeed',
2334
+ self::CANON_SI_MEASURED_EV2 => 'MeasuredEV2',
2335
+ self::CANON_SI_CAMERA_TYPE => 'CameraType',
2336
+ self::CANON_SI_AUTO_ROTATE => 'AutoRotate',
2337
+ self::CANON_SI_ND_FILTER => 'NDFilter'
2338
+ ];
2339
+
2340
+ /**
2341
+ * Values for canon panorama tags titles
2342
+ */
2343
+ protected static $canonPaTagsTitle = [
2344
+ self::CANON_PA_PANORAMA_FRAME => 'Panorama Frame',
2345
+ self::CANON_PA_PANORAMA_DIRECTION => 'Panorama Direction'
2346
+ ];
2347
+
2348
+ /**
2349
+ * Values for canon panorama tags short names
2350
+ */
2351
+ protected static $canonPaTagsShort = [
2352
+ self::CANON_PA_PANORAMA_FRAME => 'PanoramaFrame',
2353
+ self::CANON_PA_PANORAMA_DIRECTION => 'PanoramaDirection'
2354
+ ];
2355
+
2356
+ /**
2357
+ * Values for canon picture info tags titles
2358
+ */
2359
+ protected static $canonPiTagsTitle = [
2360
+ self::CANON_PI_IMAGE_WIDTH => 'Image Width',
2361
+ self::CANON_PI_IMAGE_HEIGHT => 'Image Height',
2362
+ self::CANON_PI_IMAGE_WIDTH_AS_SHOT => 'Image Width As Shot',
2363
+ self::CANON_PI_IMAGE_HEIGHT_AS_SHOT => 'Image Height As Shot',
2364
+ self::CANON_PI_AF_POINTS_USED => 'AF Points Used',
2365
+ self::CANON_PI_AF_POINTS_USED_20D => 'AF Points Used (20D)'
2366
+ ];
2367
+
2368
+ /**
2369
+ * Values for canon picture info tags short names
2370
+ */
2371
+ protected static $canonPiTagsShort = [
2372
+ self::CANON_PI_IMAGE_WIDTH => 'ImageWidth',
2373
+ self::CANON_PI_IMAGE_HEIGHT => 'ImageHeight',
2374
+ self::CANON_PI_IMAGE_WIDTH_AS_SHOT => 'ImageWidthAsShot',
2375
+ self::CANON_PI_IMAGE_HEIGHT_AS_SHOT => 'ImageHeightAsShot',
2376
+ self::CANON_PI_AF_POINTS_USED => 'AFPointsUsed',
2377
+ self::CANON_PI_AF_POINTS_USED_20D => 'AFPointsUsed(20D)'
2378
+ ];
2379
+
2380
+ /**
2381
+ * Values for canon file info tags titles
2382
+ */
2383
+ protected static $canonFiTagsTitle = [
2384
+ self::CANON_FI_FILE_NUMBER => 'File Number',
2385
+ self::CANON_FI_BRACKET_MODE => 'Bracket Mode',
2386
+ self::CANON_FI_BRACKET_VALUE => 'Bracket Value',
2387
+ self::CANON_FI_BRACKET_SHOT_NUMBER => 'Bracket Shot Number',
2388
+ self::CANON_FI_RAW_JPG_QUALITY => 'Raw Jpg Quality',
2389
+ self::CANON_FI_RAW_JPG_SIZE => 'Raw Jpg Size',
2390
+ self::CANON_FI_NOISE_REDUCTION => 'Noise Reduction',
2391
+ self::CANON_FI_WB_BRACKET_MODE => 'WB Bracket Mode',
2392
+ self::CANON_FI_WB_BRACKET_VALUE_AB => 'WB Bracket Value AB',
2393
+ self::CANON_FI_WB_BRACKET_VALUE_GM => 'WB Bracket Value GM',
2394
+ self::CANON_FI_FILTER_EFFECT => 'Filter Effect',
2395
+ self::CANON_FI_TONING_EFFECT => 'Toning Effect',
2396
+ self::CANON_FI_MACRO_MAGNIFICATION => 'Macro Magnification',
2397
+ self::CANON_FI_LIVE_VIEW_SHOOTING => 'Live View Shooting',
2398
+ self::CANON_FI_FOCUS_DISTANCE_UPPER => 'Focus Distance Upper',
2399
+ self::CANON_FI_FOCUS_DISTANCE_LOWER => 'Focus Distance Lower',
2400
+ self::CANON_FI_FLASH_EXPOSURE_LOCK => 'Flash Exposure Lock'
2401
+ ];
2402
+
2403
+ /**
2404
+ * Values for canon file info tags short names
2405
+ */
2406
+ protected static $canonFiTagsShort = [
2407
+ self::CANON_FI_FILE_NUMBER => 'FileNumber',
2408
+ self::CANON_FI_BRACKET_MODE => 'BracketMode',
2409
+ self::CANON_FI_BRACKET_VALUE => 'BracketValue',
2410
+ self::CANON_FI_BRACKET_SHOT_NUMBER => 'BracketShotNumber',
2411
+ self::CANON_FI_RAW_JPG_QUALITY => 'RawJpgQuality',
2412
+ self::CANON_FI_RAW_JPG_SIZE => 'RawJpgSize',
2413
+ self::CANON_FI_NOISE_REDUCTION => 'NoiseReduction',
2414
+ self::CANON_FI_WB_BRACKET_MODE => 'WBBracketMode',
2415
+ self::CANON_FI_WB_BRACKET_VALUE_AB => 'WBBracketValueAB',
2416
+ self::CANON_FI_WB_BRACKET_VALUE_GM => 'WBBracketValueGM',
2417
+ self::CANON_FI_FILTER_EFFECT => 'FilterEffect',
2418
+ self::CANON_FI_TONING_EFFECT => 'ToningEffect',
2419
+ self::CANON_FI_MACRO_MAGNIFICATION => 'MacroMagnification',
2420
+ self::CANON_FI_LIVE_VIEW_SHOOTING => 'LiveViewShooting',
2421
+ self::CANON_FI_FOCUS_DISTANCE_UPPER => 'FocusDistanceUpper',
2422
+ self::CANON_FI_FOCUS_DISTANCE_LOWER => 'FocusDistanceLower',
2423
+ self::CANON_FI_FLASH_EXPOSURE_LOCK => 'FlashExposureLock'
2424
+ ];
2425
+
2426
+ /**
2427
+ * Returns a string from container with key $tag and subcontainer index of $idx
2428
+ *
2429
+ * @param array $container
2430
+ * {@link PelTag::EXIF_TAGS_SHORT}, {@link PelTag::EXIF_TAGS_TITLE},
2431
+ * {@link PelTag::GPS_TAGS_SHORT} or {@link PelTag::GPS_TAGS_TITLE} container.
2432
+ * @param int $tag
2433
+ * the tag.
2434
+ * @return string short name or long name of the tag.
2435
+ */
2436
+ public static function getValue($container, $tag)
2437
+ {
2438
+ if (isset($container[$tag])) {
2439
+ return $container[$tag];
2440
+ }
2441
+
2442
+ return self::unknownTag($tag);
2443
+ }
2444
+
2445
+ /**
2446
+ * Reverse lookup of a tag id by its short name.
2447
+ * Return false for the unknown tag name.
2448
+ *
2449
+ * @deprecated Use getExifTagByName() and getGpsTagByName() to distinct the type of tag.
2450
+ * @param string $name
2451
+ * tag short name.
2452
+ * @return mixed (bool|int)
2453
+ * the tag.
2454
+ */
2455
+ public static function getTagByName($name)
2456
+ {
2457
+ $k = array_search($name, self::$exifTagsShort);
2458
+ if ($k !== false) {
2459
+ return $k;
2460
+ }
2461
+
2462
+ $k = array_search($name, static::$gpsTagsShort);
2463
+ if ($k !== false) {
2464
+ return $k;
2465
+ }
2466
+
2467
+ return array_search($name, self::$canonTagsShort);
2468
+ }
2469
+
2470
+ /**
2471
+ * Reverse lookup of a EXIF related tag id by its short name.
2472
+ * Return false for the unknown tag name.
2473
+ *
2474
+ * @param string $name
2475
+ * tag short name.
2476
+ * @return mixed (bool|int)
2477
+ * the tag.
2478
+ */
2479
+ public static function getExifTagByName($name)
2480
+ {
2481
+ return array_search($name, static::$exifTagsShort);
2482
+ }
2483
+
2484
+ /**
2485
+ * Reverse lookup of a GPS related tag id by its short name.
2486
+ * Return false for the unknown tag name.
2487
+ *
2488
+ * @param string $name
2489
+ * tag short name.
2490
+ * @return mixed (bool|int)
2491
+ * the tag.
2492
+ */
2493
+ public static function getGpsTagByName($name)
2494
+ {
2495
+ return array_search($name, static::$gpsTagsShort);
2496
+ }
2497
+
2498
+ /**
2499
+ * Returns string defining unknown tag.
2500
+ *
2501
+ * @param int $tag
2502
+ * the tag.
2503
+ * @return string description string.
2504
+ */
2505
+ protected static function unknownTag($tag)
2506
+ {
2507
+ return Pel::fmt('Unknown: 0x%04X', $tag);
2508
+ }
2509
+
2510
+ /**
2511
+ * Returns a short name for an Exif tag.
2512
+ *
2513
+ * @param int $type
2514
+ * the IFD type of the tag, one of {@link PelIfd::IFD0},
2515
+ * {@link PelIfd::IFD1}, {@link PelIfd::EXIF}, {@link PelIfd::GPS},
2516
+ * or {@link PelIfd::INTEROPERABILITY}.
2517
+ * @param int $tag
2518
+ * the tag.
2519
+ * @return string the short name of the tag, e.g., 'ImageWidth' for
2520
+ * the {@link IMAGE_WIDTH} tag. If the tag is not known, the string
2521
+ * 'Unknown:0xTTTT' will be returned where 'TTTT' is the hexadecimal
2522
+ * representation of the tag.
2523
+ */
2524
+ public static function getName($type, $tag)
2525
+ {
2526
+ switch ($type) {
2527
+ case PelIfd::IFD0:
2528
+ case PelIfd::IFD1:
2529
+ case PelIfd::EXIF:
2530
+ case PelIfd::INTEROPERABILITY:
2531
+ return self::getValue(self::$exifTagsShort, $tag);
2532
+ case PelIfd::GPS:
2533
+ return self::getValue(self::$gpsTagsShort, $tag);
2534
+ case PelIfd::CANON_MAKER_NOTES:
2535
+ return self::getValue(self::$canonTagsShort, $tag);
2536
+ case PelIfd::CANON_CAMERA_SETTINGS:
2537
+ return self::getValue(self::$canonCsTagsShort, $tag);
2538
+ case PelIfd::CANON_SHOT_INFO:
2539
+ return self::getValue(self::$canonSiTagsShort, $tag);
2540
+ case PelIfd::CANON_PANORAMA:
2541
+ return self::getValue(self::$canonPaTagsShort, $tag);
2542
+ case PelIfd::CANON_PICTURE_INFO:
2543
+ return self::getValue(self::$canonPiTagsShort, $tag);
2544
+ case PelIfd::CANON_FILE_INFO:
2545
+ return self::getValue(self::$canonFiTagsShort, $tag);
2546
+ }
2547
+
2548
+ return self::unknownTag($tag);
2549
+ }
2550
+
2551
+ /**
2552
+ * Returns a title for an Exif tag.
2553
+ *
2554
+ * @param int $type
2555
+ * the IFD type of the tag, one of {@link PelIfd::IFD0},
2556
+ * {@link PelIfd::IFD1}, {@link PelIfd::EXIF}, {@link PelIfd::GPS},
2557
+ * or {@link PelIfd::INTEROPERABILITY}.
2558
+ * @param int $tag
2559
+ * the tag.
2560
+ * @return string the title of the tag, e.g., 'Image Width' for the
2561
+ * {@link IMAGE_WIDTH} tag. If the tag isn't known, the string
2562
+ * 'Unknown Tag: 0xTT' will be returned where 'TT' is the
2563
+ * hexadecimal representation of the tag.
2564
+ */
2565
+ public function getTitle($type, $tag)
2566
+ {
2567
+ switch ($type) {
2568
+ case PelIfd::IFD0:
2569
+ case PelIfd::IFD1:
2570
+ case PelIfd::EXIF:
2571
+ case PelIfd::INTEROPERABILITY:
2572
+ return Pel::tra(self::getValue(self::$exifTagsTitle, $tag));
2573
+ case PelIfd::GPS:
2574
+ return Pel::tra(self::getValue(self::$gpsTagsShort, $tag));
2575
+ case PelIfd::CANON_MAKER_NOTES:
2576
+ return Pel::tra(self::getValue(self::$canonTagsTitle, $tag));
2577
+ case PelIfd::CANON_CAMERA_SETTINGS:
2578
+ return self::getValue(self::$canonCsTagsTitle, $tag);
2579
+ case PelIfd::CANON_SHOT_INFO:
2580
+ return self::getValue(self::$canonSiTagsTitle, $tag);
2581
+ case PelIfd::CANON_PANORAMA:
2582
+ return self::getValue(self::$canonPaTagsTitle, $tag);
2583
+ case PelIfd::CANON_PICTURE_INFO:
2584
+ return self::getValue(self::$canonPiTagsTitle, $tag);
2585
+ case PelIfd::CANON_FILE_INFO:
2586
+ return self::getValue(self::$canonFiTagsTitle, $tag);
2587
+ }
2588
+
2589
+ return self::unknownTag($tag);
2590
+ }
2591
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelTiff.php ADDED
@@ -0,0 +1,310 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with TIFF data.
28
+ *
29
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
30
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
31
+ * License (GPL)
32
+ * @package PEL
33
+ */
34
+
35
+ /**
36
+ * Class for handling TIFF data.
37
+ *
38
+ * Exif data is actually an extension of the TIFF file format. TIFF
39
+ * images consist of a number of {@link PelIfd Image File Directories}
40
+ * (IFDs), each containing a number of {@link PelEntry entries}. The
41
+ * IFDs are linked to each other --- one can get hold of the first one
42
+ * with the {@link getIfd()} method.
43
+ *
44
+ * To parse a TIFF image for Exif data one would do:
45
+ *
46
+ * <code>
47
+ * $tiff = new PelTiff($data);
48
+ * $ifd0 = $tiff->getIfd();
49
+ * $exif = $ifd0->getSubIfd(PelIfd::EXIF);
50
+ * $ifd1 = $ifd0->getNextIfd();
51
+ * </code>
52
+ *
53
+ * Should one have some image data of an unknown type, then the {@link
54
+ * PelTiff::isValid()} function is handy: it will quickly test if the
55
+ * data could be valid TIFF data. The {@link PelJpeg::isValid()}
56
+ * function does the same for JPEG images.
57
+ *
58
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
59
+ * @package PEL
60
+ */
61
+ namespace lsolesen\pel;
62
+
63
+ class PelTiff
64
+ {
65
+
66
+ /**
67
+ * TIFF header.
68
+ *
69
+ * This must follow after the two bytes indicating the byte order.
70
+ */
71
+ const TIFF_HEADER = 0x002A;
72
+
73
+ /**
74
+ * The first Image File Directory, if any.
75
+ *
76
+ * If set, then the type of the IFD must be {@link PelIfd::IFD0}.
77
+ *
78
+ * @var PelIfd
79
+ */
80
+ private $ifd = null;
81
+
82
+ /**
83
+ * Construct a new object for holding TIFF data.
84
+ *
85
+ * The new object will be empty (with no {@link PelIfd}) unless an
86
+ * argument is given from which it can initialize itself. This can
87
+ * either be the filename of a TIFF image or a {@link PelDataWindow}
88
+ * object.
89
+ *
90
+ * Use {@link setIfd()} to explicitly set the IFD.
91
+ *
92
+ * @param boolean|string|PelDataWindow $data;
93
+ */
94
+ public function __construct($data = false)
95
+ {
96
+ if ($data === false) {
97
+ return;
98
+ }
99
+ if (is_string($data)) {
100
+ Pel::debug('Initializing PelTiff object from %s', $data);
101
+ $this->loadFile($data);
102
+ } elseif ($data instanceof PelDataWindow) {
103
+ Pel::debug('Initializing PelTiff object from PelDataWindow.');
104
+ $this->load($data);
105
+ } else {
106
+ throw new PelInvalidArgumentException('Bad type for $data: %s', gettype($data));
107
+ }
108
+ }
109
+
110
+ /**
111
+ * Load TIFF data.
112
+ *
113
+ * The data given will be parsed and an internal tree representation
114
+ * will be built. If the data cannot be parsed correctly, a {@link
115
+ * PelInvalidDataException} is thrown, explaining the problem.
116
+ *
117
+ * @param PelDataWindow $d
118
+ * the data from which the object will be
119
+ * constructed. This should be valid TIFF data, coming either
120
+ * directly from a TIFF image or from the Exif data in a JPEG image.
121
+ */
122
+ public function load(PelDataWindow $d)
123
+ {
124
+ Pel::debug('Parsing %d bytes of TIFF data...', $d->getSize());
125
+
126
+ /*
127
+ * There must be at least 8 bytes available: 2 bytes for the byte
128
+ * order, 2 bytes for the TIFF header, and 4 bytes for the offset
129
+ * to the first IFD.
130
+ */
131
+ if ($d->getSize() < 8) {
132
+ throw new PelInvalidDataException('Expected at least 8 bytes of TIFF ' . 'data, found just %d bytes.', $d->getSize());
133
+ }
134
+ /* Byte order */
135
+ if ($d->strcmp(0, 'II')) {
136
+ Pel::debug('Found Intel byte order');
137
+ $d->setByteOrder(PelConvert::LITTLE_ENDIAN);
138
+ } elseif ($d->strcmp(0, 'MM')) {
139
+ Pel::debug('Found Motorola byte order');
140
+ $d->setByteOrder(PelConvert::BIG_ENDIAN);
141
+ } else {
142
+ throw new PelInvalidDataException('Unknown byte order found in TIFF ' . 'data: 0x%2X%2X', $d->getByte(0), $d->getByte(1));
143
+ }
144
+
145
+ /* Verify the TIFF header */
146
+ if ($d->getShort(2) != self::TIFF_HEADER) {
147
+ throw new PelInvalidDataException('Missing TIFF magic value.');
148
+ }
149
+ /* IFD 0 offset */
150
+ $offset = $d->getLong(4);
151
+ Pel::debug('First IFD at offset %d.', $offset);
152
+
153
+ if ($offset > 0) {
154
+ /*
155
+ * Parse the first IFD, this will automatically parse the
156
+ * following IFDs and any sub IFDs.
157
+ */
158
+ $this->ifd = new PelIfd(PelIfd::IFD0);
159
+ $this->ifd->load($d, $offset);
160
+ }
161
+ }
162
+
163
+ /**
164
+ * Load data from a file into a TIFF object.
165
+ *
166
+ * @param string $filename
167
+ * the filename. This must be a readable file.
168
+ */
169
+ public function loadFile($filename)
170
+ {
171
+ $this->load(new PelDataWindow(file_get_contents($filename)));
172
+ }
173
+
174
+ /**
175
+ * Set the first IFD.
176
+ *
177
+ * @param PelIfd $ifd
178
+ * the new first IFD, which must be of type {@link
179
+ * PelIfd::IFD0}.
180
+ */
181
+ public function setIfd(PelIfd $ifd)
182
+ {
183
+ if ($ifd->getType() != PelIfd::IFD0) {
184
+ throw new PelInvalidDataException('Invalid type of IFD: %d, expected %d.', $ifd->getType(), PelIfd::IFD0);
185
+ }
186
+ $this->ifd = $ifd;
187
+ }
188
+
189
+ /**
190
+ * Return the first IFD.
191
+ *
192
+ * @return PelIfd the first IFD contained in the TIFF data, if any.
193
+ * If there is no IFD null will be returned.
194
+ */
195
+ public function getIfd()
196
+ {
197
+ return $this->ifd;
198
+ }
199
+
200
+ /**
201
+ * Turn this object into bytes.
202
+ *
203
+ * TIFF images can have {@link PelConvert::LITTLE_ENDIAN
204
+ * little-endian} or {@link PelConvert::BIG_ENDIAN big-endian} byte
205
+ * order, and so this method takes an argument specifying that.
206
+ *
207
+ * @param boolean $order
208
+ * the desired byte order of the TIFF data.
209
+ * This should be one of {@link PelConvert::LITTLE_ENDIAN} or {@link
210
+ * PelConvert::BIG_ENDIAN}.
211
+ * @return string the bytes representing this object.
212
+ */
213
+ public function getBytes($order = PelConvert::LITTLE_ENDIAN)
214
+ {
215
+ if ($order == PelConvert::LITTLE_ENDIAN) {
216
+ $bytes = 'II';
217
+ } else {
218
+ $bytes = 'MM';
219
+ }
220
+
221
+ /* TIFF magic number --- fixed value. */
222
+ $bytes .= PelConvert::shortToBytes(self::TIFF_HEADER, $order);
223
+
224
+ if ($this->ifd !== null) {
225
+ /*
226
+ * IFD 0 offset. We will always start IDF 0 at an offset of 8
227
+ * bytes (2 bytes for byte order, another 2 bytes for the TIFF
228
+ * header, and 4 bytes for the IFD 0 offset make 8 bytes
229
+ * together).
230
+ */
231
+ $bytes .= PelConvert::longToBytes(8, $order);
232
+
233
+ /*
234
+ * The argument specifies the offset of this IFD. The IFD will
235
+ * use this to calculate offsets from the entries to their data,
236
+ * all those offsets are absolute offsets counted from the
237
+ * beginning of the data.
238
+ */
239
+ $bytes .= $this->ifd->getBytes(8, $order);
240
+ } else {
241
+ $bytes .= PelConvert::longToBytes(0, $order);
242
+ }
243
+
244
+ return $bytes;
245
+ }
246
+
247
+ /**
248
+ * Save the TIFF object as a TIFF image in a file.
249
+ *
250
+ * @param string $filename
251
+ * the filename to save in. An existing file with the
252
+ * same name will be overwritten!
253
+ * @return integer|FALSE The number of bytes that were written to the
254
+ * file, or FALSE on failure.
255
+ */
256
+ public function saveFile($filename)
257
+ {
258
+ return file_put_contents($filename, $this->getBytes());
259
+ }
260
+
261
+ /**
262
+ * Return a string representation of this object.
263
+ *
264
+ * @return string a string describing this object. This is mostly useful
265
+ * for debugging.
266
+ */
267
+ public function __toString()
268
+ {
269
+ $str = Pel::fmt("Dumping TIFF data...\n");
270
+ if ($this->ifd !== null) {
271
+ $str .= $this->ifd->__toString();
272
+ }
273
+
274
+ return $str;
275
+ }
276
+
277
+ /**
278
+ * Check if data is valid TIFF data.
279
+ *
280
+ * This will read just enough data from the data window to determine
281
+ * if the data could be a valid TIFF data. This means that the
282
+ * check is more like a heuristic than a rigorous check.
283
+ *
284
+ * @param PelDataWindow $d
285
+ * the bytes that will be examined.
286
+ * @return boolean true if the data looks like valid TIFF data,
287
+ * false otherwise.
288
+ * @see PelJpeg::isValid()
289
+ */
290
+ public static function isValid(PelDataWindow $d)
291
+ {
292
+ /* First check that we have enough data. */
293
+ if ($d->getSize() < 8) {
294
+ return false;
295
+ }
296
+
297
+ /* Byte order */
298
+ if ($d->strcmp(0, 'II')) {
299
+ $d->setByteOrder(PelConvert::LITTLE_ENDIAN);
300
+ } elseif ($d->strcmp(0, 'MM')) {
301
+ Pel::debug('Found Motorola byte order');
302
+ $d->setByteOrder(PelConvert::BIG_ENDIAN);
303
+ } else {
304
+ return false;
305
+ }
306
+
307
+ /* Verify the TIFF header */
308
+ return $d->getShort(2) == self::TIFF_HEADER;
309
+ }
310
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelUnexpectedFormatException.php ADDED
@@ -0,0 +1,74 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Classes for dealing with Exif entries.
28
+ *
29
+ * This file defines two exception classes and the abstract class
30
+ * {@link PelEntry} which provides the basic methods that all Exif
31
+ * entries will have. All Exif entries will be represented by
32
+ * descendants of the {@link PelEntry} class --- the class itself is
33
+ * abstract and so it cannot be instantiated.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @license http://www.gnu.org/licenses/gpl.html GNU General Public
37
+ * License (GPL)
38
+ * @package PEL
39
+ */
40
+
41
+ /**
42
+ * Exception indicating that an unexpected format was found.
43
+ *
44
+ * The documentation for each tag in {@link PelTag} will detail any
45
+ * constrains.
46
+ *
47
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
48
+ * @package PEL
49
+ * @subpackage Exception
50
+ */
51
+ namespace lsolesen\pel;
52
+
53
+ class PelUnexpectedFormatException extends PelEntryException
54
+ {
55
+
56
+ /**
57
+ * Construct a new exception indicating an invalid format.
58
+ *
59
+ * @param int $type
60
+ * the type of IFD.
61
+ * @param int $tag
62
+ * the tag for which the violation was found as defined in {@link PelTag}
63
+ * @param int $found
64
+ * the format found as defined in {@link PelFormat}
65
+ * @param int $expected
66
+ * the expected as defined in {@link PelFormat}
67
+ */
68
+ public function __construct($type, $tag, $found, $expected)
69
+ {
70
+ parent::__construct('Unexpected format found for %s tag: PelFormat::%s. Expected PelFormat::%s instead.', PelTag::getName($type, $tag), strtoupper(PelFormat::getName($found)), strtoupper(PelFormat::getName($expected)));
71
+ $this->tag = $tag;
72
+ $this->type = $type;
73
+ }
74
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.10/src/PelWrongComponentCountException.php ADDED
@@ -0,0 +1,65 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ /**
4
+ * PEL: PHP Exif Library.
5
+ * A library with support for reading and
6
+ * writing all Exif headers in JPEG and TIFF images using PHP.
7
+ *
8
+ * Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
+ *
10
+ * This program is free software; you can redistribute it and/or modify
11
+ * it under the terms of the GNU General Public License as published by
12
+ * the Free Software Foundation; either version 2 of the License, or
13
+ * (at your option) any later version.
14
+ *
15
+ * This program is distributed in the hope that it will be useful,
16
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
17
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18
+ * GNU General Public License for more details.
19
+ *
20
+ * You should have received a copy of the GNU General Public License
21
+ * along with this program in the file COPYING; if not, write to the
22
+ * Free Software Foundation, Inc., 51 Franklin St, Fifth Floor,
23
+ * Boston, MA 02110-1301 USA
24
+ */
25
+
26
+ /**
27
+ * Exception indicating that an unexpected number of components was
28
+ * found.
29
+ *
30
+ * Some tags have strict limits as to the allowed number of
31
+ * components, and this exception is thrown if the data violates such
32
+ * a constraint. The documentation for each tag in {@link PelTag}
33
+ * explains the expected number of components.
34
+ *
35
+ * @author Martin Geisler <mgeisler@users.sourceforge.net>
36
+ * @package PEL
37
+ * @subpackage Exception
38
+ */
39
+ namespace lsolesen\pel;
40
+
41
+ use lsolesen\pel\PelTag;
42
+
43
+ class PelWrongComponentCountException extends \lsolesen\pel\PelEntryException
44
+ {
45
+
46
+ /**
47
+ * Construct a new exception indicating a wrong number of
48
+ * components.
49
+ *
50
+ * @param int $type
51
+ * the type of IFD.
52
+ * @param int $tag
53
+ * the tag for which the violation was found.
54
+ * @param int $found
55
+ * the number of components found.
56
+ * @param int $expected
57
+ * the expected number of components.
58
+ */
59
+ public function __construct($type, $tag, $found, $expected)
60
+ {
61
+ parent::__construct('Wrong number of components found for %s tag: %d. ' . 'Expected %d.', PelTag::getName($type, $tag), $found, $expected);
62
+ $this->tag = $tag;
63
+ $this->type = $type;
64
+ }
65
+ }
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/CHANGELOG.md DELETED
@@ -1,562 +0,0 @@
1
- # CHANGELOG
2
-
3
- ## 0.9.9 - 2020-11-07
4
-
5
- * Cast output from getBytes() to float (#155)
6
- * Fix non-numeric value issue in PelIfd (#156, #163)
7
- * Avoid division by zero. (#164)
8
-
9
- ## 0.9.8 - 2020-02-11
10
-
11
- * Improved PHP 7.4 compatibility
12
- * Improved TIFF handling
13
-
14
- ## 0.9.7 - 2019-12-03
15
-
16
- Fixes some errors, refactor code and make compatible to PHP 7.4.
17
-
18
- * Simplify phpunit dependency (#143)
19
- * Updates in the README (#139, #137, #108)
20
- * TravisCI tests up to PHP 7.4 and fix PHP 7.4 syntax (#142)
21
- * XP tags fixed (#115)
22
- * Improve IFD type names for Canon Maker Notes (#124)
23
- * Move non-camera specific tests from /test/imagetests to /test (#123)
24
- * Refactor ReadWriteTest and fix NumberTest (#122)
25
- * Clean up the code and all the tests to match coding standards (#121)
26
- * Convert to new array syntax (PHP 5.4) (#120)
27
- * Update tests to run under PHPUnit 6+ and backwards to PHP 5.5 and 5.4 (#118)
28
- * Catch DataWindow exceptions in PelIfd (#114)
29
- * Fix several types (#113)
30
- * Fix static makerNotes in PelIfd (#112)
31
- * Fixes for [pel-Bugs-2979466 ] endless loop in PelIfd->load (#110)
32
- * Fix build status badge (#111)
33
- * Fix skipped tests for PHP 7.1+ (#109)
34
- * Parsing canon maker notes (#99)
35
- * Exif section corrections (#101)
36
- * Enabled code rating (#106)
37
- * Changed access of the $sections property to allow section manipulations in subclasses. (#104)
38
- * Now available from PEL organization (#97)
39
- * Enable PHP 7.2 build on TravisCI (#102)
40
- * Rating percent tag (#100)
41
- * Add composer installation instructions (#96)
42
- * HHVM needs to run on Trusty (#95)
43
- * Added reverse lookup methods, fixed PHPDOC for PelTag enumerations (#93)
44
-
45
- ## 0.9.6 - 2017-02-03
46
-
47
- * Trim null characters from the end of ascii fields only when available. Fixes #77
48
-
49
- ## 0.9.5 - 2017-01-31
50
-
51
- This release improves the code quality and the test coverage.
52
- New features:
53
-
54
- * new method PelTiff::saveFile()
55
- * PHP 7.1 compatibility
56
-
57
- ## 0.9.4 - 2016-03-21
58
-
59
- Notes:
60
-
61
- This is mainly a cleanup version and better composer integration.
62
- We added Scrutinizer, which should make sure that the code improves
63
- in the future.
64
-
65
- Changes:
66
-
67
- * Improved performance of PelJpeg.
68
-
69
- * Fixed wrong usage of private variable in examples.
70
-
71
-
72
- ## 0.9.3 - 2015-08-08
73
-
74
- Notes:
75
-
76
- This is a major update, and should have been the first tag of the
77
- 0.10.0 series. If you want to use the latest stable version without
78
- namespaces, you should use 0.9.2.
79
-
80
- Changes:
81
-
82
- * Introduced namespaces.
83
-
84
- * Added composer support and made it available on
85
- [packagist.org](https://packagist.org/packages/lsolesen/pel) and
86
- introduced PSR-4 autoloader.
87
-
88
- * Major cleanup of the code and following PSR-2 standards.
89
-
90
-
91
- ## 0.9.2 - 2010-03-09
92
-
93
- Notes:
94
-
95
- This release is the last release before introducing namespaces.
96
-
97
- Added a static method, Pel::setJPEGQuality(), for controlling the
98
- quality for encoding JPEG images. Fixed bug in conversion between
99
- Julian Day count and UNIX timestamps and removed dependency on the
100
- calendar PHP extension. Fixed placement of Windows XP tags. Added GPS
101
- example.
102
-
103
- Changes:
104
-
105
- * Added an example of how GPS information can be added. Thanks Andac
106
- Aydin for contributing and testing this.
107
-
108
- * Fixed PelJpegComment::getBytes(): it didn't return anything! Thanks
109
- macondos.
110
-
111
- * Fixed SF bug #1699489: Incorrect UNIX/Julian conversion.
112
-
113
- * PEL 0.9.1 introduced a dependency on the calendar extension for PHP.
114
- The necessary functions have now been reimplemented in pure PHP. The
115
- patch was supplied by Francois Pirsch, thanks.
116
-
117
- * Fixed doc comment for PelEntryTime, the variables for date() was
118
- swapped. Thanks Francois Pirsch.
119
-
120
- * Added static Pel::setJPEGQuality() and Pel::getJPEGQuality() method
121
- for setting and getting the quality used when PelJpeg automatically
122
- converts an image resource to a JPEG image. Thanks Csaba Gabor for
123
- asking about this.
124
-
125
- * Moved the XP specific tags from the Exif IFD to the IFD0/1 IFD.
126
- Thanks Piotr Golebiowski for noticing this.
127
-
128
- * Added links from PelTag::XP_* tags to the PelEntryWindowsString
129
- class. Thanks Garrison Locke for indirectly pointing out the need
130
- for this.
131
-
132
-
133
- ## 0.9.1 - 2016-12-19
134
-
135
- Notes:
136
-
137
- Added setExif(), getExif(), and clearExif() methods as a convenient
138
- and recommended way of manipulating the Exif data in a PelJpeg object.
139
- Improved PelEntryTime to deal with timestamps in the full range from
140
- year 0 to year 9999. Removed PelTag::getDescription() because the
141
- descriptions were out of context. A new example demonstrates how to
142
- resize images while keeping the Exif data intact. Added a Japanese and
143
- updated the French and Danish translations.
144
-
145
- Changes:
146
-
147
- * The constructors of PelJpeg and PelTiff can now take an argument
148
- which is used for initialization. This can be a filename (equivalent
149
- to calling loadFromFile()), a PelDataWindow (equivalent to load()).
150
- The PelJpeg constructor will also accept an image resource.
151
-
152
- * Added PelJpeg::setExif(). This method should always be used in
153
- preference to PelJpeg::insertSection() and PelJpeg::appendSection().
154
- One should actually not be using appendSection() unless one is very
155
- sure that the image has not been ended by a EOI marker.
156
-
157
- * Added PelJpeg::getExif(). This method is the new preferred way of
158
- obtaining the PelExif object from a PelJpeg object. Updated the
159
- examples and code to make use of it.
160
-
161
- * An example of how to resize images while keeping the Exif data
162
- intact is given in resize.php.
163
-
164
- * The PelTag::getDescription() method is no more. The descriptions
165
- were taken directly from the Exif specification and they were often
166
- impossible to translate in a meaningful out of context because they
167
- had references to figures and tables from said specification.
168
-
169
- * Fixed bug in edit-description.php which still called the constructor
170
- of PelIfd in the old pre-0.9 way.
171
-
172
- * Updated documentation of PelIfd to make it clearer that it can be
173
- used as an array because it implements the ArrayAccess SPL (Standard
174
- PHP Library) interface.
175
-
176
- * Added Japanese translation by Tadashi Jokagi.
177
-
178
- * Update by David Lesieur of the French translation.
179
-
180
- * Rewrote entry for version 0.9 in NEWS to highlight the API
181
- incompatible changes made from version 0.8.
182
-
183
- * Renamed test.php to run-tests.php and implemented a simple search
184
- functionality for finding the SimpleTest installation.
185
-
186
- * Rewrote make-release.sh script to work with Subversion.
187
-
188
- ## 0.9.0 - 2006-01-08
189
-
190
- Notes:
191
-
192
- Added full support for GPS information (this breaks API compatibility
193
- with version 0.8), JPEG comments, the Gamma tag, and Windows XP
194
- specific title, comment, author, keywords, and subject tags.
195
- Implemented a non-strict mode for broken images where most errors wont
196
- result in visible exceptions. The edit-description.php example now
197
- correctly deals with images with no previous Exif data. A partial
198
- Polish translation was added. The API documentation was updated with
199
- details about the constrains on format and number of components for
200
- each tag.
201
-
202
- API incompatible changes:
203
-
204
- * Changed PelIfd::getSubIfd() to take an IFD type as argument instead
205
- of a PelTag. The IFD types are constants in PelIfd. So use
206
-
207
- $exif = $ifd0->getSubIfd(PelIfd::EXIF);
208
-
209
- instead of
210
-
211
- $exif = $ifd0->getSubIfd(PelTag::EXIF_IFD_POINTER);
212
-
213
- in your code.
214
-
215
- * Added support for the GPS IFD. This API break compatibility with
216
- version 0.8. The problem is that the GPS related tags have the same
217
- value as some other tags, and so the function PelTag::getName(),
218
- PelTag::getTitle(), and PelTag::getDescription() has been changed to
219
- take an extra argument specifying IFD type of the tag.
220
-
221
- This might change very well further in the future.
222
-
223
- Changes:
224
-
225
- * Added support for JPEG comments through the PelJpegComment class
226
- which works almost like PelEntry (use getValue() and setValue() to
227
- read and write the comment).
228
-
229
- * Enabled iterating a PelIfd object with foreach(). It will iterate
230
- over (PelTag, PelEntry) pairs.
231
-
232
- * Added PelIfd::getValidTags() which return an array of tags valid for
233
- the IFD in question. Using this, PEL now reject entries in wrong
234
- IFDs. For example, you cannot have a UserComment tag in a IFD for
235
- GPS information.
236
-
237
- * Added a new concept of strict/non-strict mode. The old behavior
238
- was strict mode where an errors would abort the loading of an image
239
- because of exceptions --- in non-strict mode most exceptions will be
240
- trapped and broken images can still be loaded. See the description
241
- in Pel.php and the answer in the FAQ for more information.
242
-
243
- * Added support for the 0xA500 Gamma tag.
244
-
245
- * Changed paths in example shell scripts to /usr/bin/php and explained
246
- in the README how to execute them.
247
-
248
- * Updated FAQ with information about making Gettext work and the new
249
- strict/non-strict mode.
250
-
251
- * Added support for Windows XP specific title, comment, author,
252
- keywords, and subject tags. These tags can be edited in Windows XP
253
- in the Properties dialog found by right-clicking on an image.
254
-
255
- * A number of translations in the German, French, and Spanish
256
- translations were inactive because of small differences between PHP
257
- and C (such as using %d and %i in format strings).
258
-
259
- * Added Polish translation by Jakub Bogusz from the libexif project.
260
-
261
- * Corrected tag documentation in PelTag.
262
-
263
- * Made edit-description.php correctly add an empty Exif structure in
264
- case the original image has none.
265
-
266
- * Removed PelJpegContent::getSize() method. Calling this method in
267
- the PelExif subclass resulted in an error, and overriding it
268
- correctly in PelExif would have required too much code to justify
269
- the effort.
270
-
271
- * Better doc comments and small code cleanups in PelJpeg.php,
272
- PelExif.php, and PelIfd.php.
273
-
274
- * PelEntry.php now unconditionally includes the class definitions of
275
- all the entry types. The conditionally loading only worked when one
276
- created a new PelJpeg object, but not when one had stored such an
277
- object in, say, a session.
278
-
279
- * Moved PelEntry::newFromData() to PelIfd::newEntryFromData() since it
280
- needs knowledge about PelIfd::$type. Updated the documentation it
281
- to indicate that one shouldn't use this method unless the data comes
282
- directly from an image. The method signature was corrected with a
283
- type hint, so that $data really is a PelDataWindow.
284
-
285
- * Updated the documentation in PelTag. All tags now details their
286
- expected format and the expected number of components. One can
287
- still freely choose to obey or disregard these constrains, but doing
288
- so will lead to non-compliant images, which might cause PEL to throw
289
- exceptions when reloading.
290
-
291
- * Updated the documentation in PelFormat with links to the PelEntry
292
- classes corresponding to each format.
293
-
294
- * Updated the make-release.sh script to use a run-phpdoc.sh script for
295
- generating the API documentation.
296
-
297
-
298
- ## 0.8.0 - 2005-02-18
299
-
300
- Notes:
301
-
302
- Erroneous entries will now be skipped while loading instead of causing
303
- a total abort. The documentation was expanded with a short tutorial
304
- and a FAQ. New test images were added from Leica D-LUX, Olympos C50Z
305
- and C765 cameras.
306
-
307
- Changes:
308
-
309
- * Added more documentation in the form of a short tutorial and a FAQ.
310
-
311
- * Instead of aborting on load errors, PelIfd::load() will now continue
312
- with the next entry. A warning will be issued if debugging is
313
- turned on in PEL.
314
-
315
- * Added a PelEntryException class. When an entry cannot be loaded in
316
- PelEntry::newFromData(), an appropriate subclass of this exception
317
- will be thrown.
318
-
319
- * Described the requirements in terms of formats and component counts
320
- in the documentation for individual tags in PelTag.
321
-
322
- * Fixed the edit-description.php example, it still used PelEntryString
323
- instead of PelEntryAscii. Thanks goes to Achim Gerber.
324
-
325
- * Fixed the throwing of a PelWrongComponentCountException in PelEntry,
326
- the class name was misspelled.
327
-
328
- * Added abstract getValue() and setValue() methods to PelEntry, to
329
- better describe that all objects representing Exif entries have
330
- those two methods.
331
-
332
- * Updated copyright statements throughout the source to year 2005.
333
-
334
- * Fixed (some) of the XHTML errors in the phpDocumentor template.
335
-
336
-
337
- ## 0.7.0 - 2004-10-10
338
-
339
- Notes:
340
-
341
- Running PEL under PHP version 5.0.2 would produce incorrect Exif data,
342
- this was fixed so that PEL works correctly on all versions of PHP 5.
343
- PEL now runs on installations without support for Gettext, but does so
344
- with English texts only. A new example script was added, showing how
345
- one can mass-rename images based on their timestamps using PEL. The
346
- Danish translation was updated slightly. The collection of test
347
- images has been split out as a separate download, cutting down on the
348
- size of a PEL download.
349
-
350
- Changes:
351
-
352
- * The image tests are now split into their own, separate download.
353
-
354
- * Added a test image from a Canon PowerShot S60.
355
-
356
- * Fixed a bug caused by a change in the way PHP 5.0.2 handles integers
357
- larger than 2^31-1. This change means that one can no longer use
358
- PelConvert::longToBytes() to convert both signed and unsigned bytes,
359
- one must now use sLongToBytes() for signed longs and longToBytes()
360
- for unsigned bytes.
361
-
362
- * Added a work-around, so the PEL will run (with English texts only)
363
- on installations without support for Gettext.
364
-
365
- * Added test/rename.php which shows how one can easily rename images
366
- based on their Exif timestamps.
367
-
368
- * Updated the Danish translation.
369
-
370
- * Removed trailing newlines at the end of Pel.php and PelConvert.php.
371
-
372
-
373
- ## 0.6 - 2004-07-21
374
-
375
- Notes:
376
-
377
- The interface for PelJpeg and PelTiff was changed so that one can now
378
- add new content from scratch to JPEG and TIFF images. Bugs in the
379
- loading of signed bytes and shorts were fixed, as well as a bug where
380
- timestamps were saved in UTC time, but loaded in local time. The code
381
- that turned PelJpeg objects into bytes was fixed, and new test cases
382
- were written to test the writing and reading of PelJpeg objects to and
383
- from files. New images from Nikon models E950, E5000, and Coolscan IV
384
- have been added to the test suite, bringing the total number of tests
385
- up to more than 1000.
386
-
387
- Changes:
388
-
389
- * The timestamps were saved as UTC time in PelEntryTime, but loaded as
390
- local time in PelEntry. This lead to differences when one tried to
391
- load a previously saved timestamp.
392
-
393
- * Changed the constructors in PelJpeg, PelExif, PelTiff, and PelIfd so
394
- that one can now make new objects without filling them with data
395
- immediately. This makes it possible to add, say, a new APP1 section
396
- with Exif to a JPEG image lacking such information.
397
-
398
- * Fixed loading of signed bytes and shorts in PelConvert.
399
-
400
- * Renamed the isValidMarker() method into just isValid() in
401
- PelJpegMarker, so that it matches the other isValid() methods found
402
- in PelJpeg and PelTiff.
403
-
404
- * Added test images from Nikon models E950, E5000 and the film scanner
405
- Coolscan IV ED, and added tests that would read their contents.
406
-
407
- * The shell scripts could only be run from the test directory because
408
- of the use of relative paths in the require_once() statements. The
409
- scripts can now be run from any directory.
410
-
411
- * A stupid bug that prevented PelJpeg objects from being turned into
412
- bytes was fixed.
413
-
414
- * Fixed the output of PelEntryRationals::getText().
415
-
416
-
417
- ## 0.5.0 - 2004-06-28
418
-
419
- Notes:
420
-
421
- This release has been tested with images from a number of different
422
- camera models (from Fujifilm, Nikon, Ricoh, Sony, and Canon), leading
423
- to the discovery and fixing of a number of bugs. The API for
424
- PelJpeg::getSection() was changed slightly, making it more convenient
425
- to use. All classes and methods are now documented.
426
-
427
- Changes:
428
-
429
- * Some images have content following the EOI marker --- this would
430
- make PEL thrown an exception. The content is now stored as a
431
- PelJpegContent object associated with the fictive marker 0x00.
432
-
433
- * Added code to handle images where the length of the thumbnail image
434
- is broken. PEL would previously throw an exception, but the length
435
- is now adjusted instead, and the parsing continues.
436
-
437
- * Fixed a number of bugs regarding the conversion back and forth
438
- between integers and bytes. These bugs affected the parsing of
439
- large integers that would overflow a signed 32 bit integer.
440
-
441
- * Fixed bug #976782. If an image contains two APP1 sections, PEL
442
- would crash trying to parse the second non-Exif section. PEL will
443
- now just store a non-Exif APP1 section as a generic PelJpegContent
444
- object.
445
-
446
- * Removed the PelJpegSection class. This lead to a rewrite of the
447
- PelJpeg::getSection() method, so that it now takes a PelJpegMarker
448
- as argument instead of the section number.
449
-
450
- * The byte order can now be specified when a PelTiff object is
451
- converted into bytes.
452
-
453
- * Updated documentation, PEL is now fully documented.
454
-
455
-
456
- ## 0.4.0 - 2004-06-09
457
-
458
- Notes:
459
-
460
- The infrastructure for internationalization has been put in place.
461
- Preliminary translations for Danish, German, French, and Spanish is
462
- included. Support for tags with GPS information were disabled due to
463
- conflicts with a number of normal tags.
464
-
465
- Changes:
466
-
467
- * Disabled the code that tries to look up the title and description of
468
- the GPS related tags, since those tags have the same hexadecimal
469
- value as a number of other normal tags. This means that there is no
470
- support for tags with GPS information.
471
-
472
- * Marked strings for translation throughout the source code.
473
-
474
- * Added German, French, and Spanish translations taken from libexif.
475
- The translations were made by Lutz M�ller, Arnaud Launay, and Fabian
476
- Mandelbaum, respectively.
477
-
478
- * Added Danish translation.
479
-
480
- * Added new static methods Pel::tra() and Pel::fmt() which are used
481
- for interaction with Gettext. The first function simply translates
482
- its argument, the second will in addition function like sprintf()
483
- when given several arguments.
484
-
485
- * Updated documentation, both the doc comments in the code and the
486
- README and INSTALL files.
487
-
488
-
489
- ## 0.3.0 - 2004-05-25
490
-
491
- Notes:
492
-
493
- Support was added for parsing TIFF images, leading to a mass renaming
494
- of files and classes to cleanup the class hierarchy. The decoding of
495
- Exif data is now tested against known values (over 400 individual
496
- tests), this lead to the discovery of a couple of subtle bugs. The
497
- documentation has been updated and expanded.
498
-
499
- Changes:
500
-
501
- * Renamed all files and classes so that only Exif specific code is
502
- labeled with Exif. So, for example, PelExifIfd is now PelIfd, since
503
- the IFD structure is not specific to Exif but rather to TIFF images.
504
- The same applies to the former PelExifEntry* classes.
505
-
506
- * Fixed offset bug in PelDataWindow::getBytes() which caused the
507
- method to return too much data.
508
-
509
- * Added support for the SCENE_TYPE tag.
510
-
511
- * Fixed display of integer version numbers. Version x.0 would be
512
- displayed as just version 'x' before.
513
-
514
- * Unit tests for Exif decoding. PEL is now tested with an image from
515
- a Sony DSC V1 and one from a Canon IXUS II.
516
-
517
- * Changed all occurrences of include_once() to require_once() since
518
- the files are required.
519
-
520
- * Updated documentation all over.
521
-
522
-
523
- ## 0.2.0 - 2004-05-16
524
-
525
- Notes:
526
-
527
- This release brings updated documentation and better support for the
528
- Exif user comment tag and tags containing version information. The
529
- code is now tested using SimpleTest.
530
-
531
- Changes:
532
-
533
- * All PelExifEntry descendant classes now use setValue() and
534
- getValue() methods consistently.
535
-
536
- * Signed and unsigned numbers (bytes, shorts, longs, and rationals)
537
- are now handled correctly.
538
-
539
- * The SimpleTest (http://sf.net/projects/simpletest) framework is used
540
- for regression testing.
541
-
542
- * Added new PelExifEntryUserComment class to better support the Exif
543
- user comment tag.
544
-
545
- * Added new PelExifEntryVersion class to support the Exif tags with
546
- version information, namely the EXIF_VERSION, FLASH_PIX_VERSION, and
547
- INTEROPERABILITY_VERSION tags.
548
-
549
- * Updated doc comments all over.
550
-
551
-
552
- ## 0.1.0 - 2004-05-08
553
-
554
- Notes:
555
-
556
- The initial release of PEL. Most of the functionality is in place:
557
- JPEG files are parsed, Exif entries are found and interpreted, the
558
- entries can be edited and new entries can be added, and finally, the
559
- whole thing can be turned into bytes and saved as a valid JPEG file.
560
-
561
- The API is still subject to change, and will remain so until version
562
- 1.0 is reached.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/INSTALL.md DELETED
@@ -1,95 +0,0 @@
1
- # INSTALL
2
-
3
-
4
- ## Requirements
5
-
6
- PEL requires PHP version 5.
7
-
8
-
9
- ## Installation
10
-
11
- ### Composer
12
-
13
- The preferred way of installing PEL is through composer. Simply add a
14
- dependency on ´lsolesen/pel´ to your projects composer.json.
15
-
16
- {
17
- "require": {
18
- "lsolesen/pel": "0.9.*"
19
- }
20
- }
21
-
22
- For a system-wide installation via Composer, you can run:
23
-
24
- composer global require "lsolesen/pel=0.9.*"
25
-
26
-
27
- ### Clone via git
28
-
29
- You can also use git to install it using:
30
-
31
- git clone git://github.com/pel/pel.git
32
- git checkout <tag name>
33
-
34
- Finally, you can install PEL by extracting it to a local directory. You can find
35
- the compressed files here: https://github.com/pel/pel/downloads.
36
-
37
- Make sure that you extract the files to a path included in your include path:
38
- You can set the include path using.
39
-
40
- set_include_path('/path/to/pel' . PATH_SEPARATOR . get_include_path());
41
-
42
-
43
- ## Upgrading
44
-
45
- If you have already been using a previous version of PEL, then be sure
46
- to read the CHANGELOG.md file before starting with a new version.
47
-
48
-
49
- ## Using PEL
50
-
51
- Your application should include PelJpeg.php or PelTiff.php for working
52
- with JPEG or TIFF files. The files will define the PelJpeg and
53
- PelTiff classes, which can hold a JPEG or TIFF image, respectively.
54
- Please see the API documentation in the doc directory or online at
55
-
56
- http://lsolesen.github.com/pel/doc/
57
-
58
- for the full story about those classes and all other available classes
59
- in PEL.
60
-
61
- Still, an example would be good. The following example will load a
62
- JPEG file given as a command line argument, parse the Exif data
63
- within, change the image description to 'Edited by PEL', and finally
64
- save the file again. All in just six lines of code:
65
-
66
- ```php5
67
- <?php
68
- require_once('PelJpeg.php');
69
-
70
- $jpeg = new PelJpeg($argv[1]);
71
- $ifd0 = $jpeg->getExif()->getTiff()->getIfd();
72
- $entry = $ifd0->getEntry(PelTag::IMAGE_DESCRIPTION);
73
- $entry->setValue('Edited by PEL');
74
- $jpeg->saveFile($argv[1]);
75
- ?>
76
- ```
77
-
78
- See the examples directory for this example (or rather a more
79
- elaborate version in the file edit-description.php) and others as PHP
80
- files. You may have to adjust the path to PHP, found in the very
81
- first line of the files before you can execute them.
82
-
83
-
84
- ## Changing PEL
85
-
86
- If you find a bug in PEL then please send a report back so that it can
87
- be fixed in the next version. You can submit your bugs and other
88
- requests here:
89
-
90
- http://github.com/pel/pel/issues
91
-
92
- If you change the code (to fix bugs or to implement enhancements), it
93
- is highly recommended that you test your changes against known good
94
- data. Please see the test/README.md file for more information about
95
- running the PEL test suite.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/README.markdown DELETED
@@ -1,109 +0,0 @@
1
- # PEL: PHP Exif Library
2
-
3
- [![Build Status](https://secure.travis-ci.org/pel/pel.png?branch=master)](http://travis-ci.org/pel/pel) [![Code Coverage](https://scrutinizer-ci.com/g/pel/pel/badges/coverage.png?b=master)](https://scrutinizer-ci.com/g/pel/pel/?branch=master) [![Scrutinizer Code Quality](https://scrutinizer-ci.com/g/pel/pel/badges/quality-score.png?b=master)](https://scrutinizer-ci.com/g/pel/pel/?branch=master) [![Latest Stable Version](https://poser.pugx.org/lsolesen/pel/v/stable)](https://packagist.org/packages/lsolesen/pel) [![Total Downloads](https://poser.pugx.org/lsolesen/pel/downloads)](https://packagist.org/packages/lsolesen/pel) [![License](https://poser.pugx.org/lsolesen/pel/license)](https://packagist.org/packages/lsolesen/pel)
4
-
5
- README file for PEL: PHP Exif Library. A library with support for
6
- reading and writing Exif headers in JPEG and TIFF images using PHP.
7
-
8
- Copyright (C) 2004, 2005, 2006 Martin Geisler.
9
- Licensed under the GNU GPL, see COPYING for details.
10
-
11
-
12
- ## Description
13
-
14
- The PHP Exif Library (PEL) makes it easy to develop programs that will
15
- read and write the Exif metadata headers found in JPEG and TIFF
16
- images. See the file INSTALL for an introduction to how PEL can be
17
- used by your application.
18
-
19
- PEL is a library written entirely in PHP 5, which means that it does
20
- not have any dependencies outside the core of PHP, it does not even
21
- use the Exif module available for PHP.
22
-
23
- Please note that the API for PEL is not yet frozen, and it will remain
24
- changeable until version 1.0 is reached. Read the NEWS file for
25
- important information about API changes.
26
-
27
- Also, please go to the PEL development mailing list (look below) and
28
- share your ideas about how the API should look like.
29
-
30
- ## Installation
31
-
32
- ```
33
- composer require lsolesen/pel
34
- ```
35
-
36
- ## Documentation Overview
37
-
38
- * README.markdown: gives you a short introduction to PEL (this file).
39
- * INSTALL.md: explain how to install and get going with PEL.
40
- * CHANGELOG.md: contains important information about changes in PEL.
41
- * examples/: small self-contained examples of how to use PEL.
42
- * AUTHORS: list of people who have helped.
43
- * run run-phpdoc.sh to generate API-documention or see it online at https://pel.github.io/pel/doc/
44
-
45
- ## Features of PEL
46
-
47
- * Reads and writes Exif metadata from both JPEG and TIFF images.
48
- * Supports reading and writing all Exif tags.
49
- * Supports internationalization.
50
- * Extensible object-oriented design.
51
- * PhpUnit tested
52
- * Documented with PhpDocumentor (http://phpdoc.org/).
53
-
54
-
55
- ## Helping out
56
-
57
- Help will be very much appreciated. You can report issues, run the test
58
- suite, add patches. The best way to help out is applying patches and
59
- helping out with the tests. See instructions in the test/ directory.
60
-
61
- All changes to code should be issued through a pull request, and other
62
- maintainers should review the code and merge it.
63
-
64
-
65
- ## Languages
66
-
67
- To work with the translations, you need the gettext package installed.
68
-
69
-
70
- ## Getting Support
71
-
72
- The first place you should consult for support is the documentation
73
- supplied with PEL, found in the doc/ directory. There you will find a
74
- complete API documentation with descriptions of all classes and files
75
- in PEL.
76
-
77
- The scripts found in the examples/ directory are also a good source of
78
- information, especially the edit-description.php file which has tons
79
- of comments.
80
-
81
- PEL is hosted on Github and uses the tools found there for
82
- support. This means that all questions, bug reports, etc. should be
83
- directed there (and not directly to the developers).
84
-
85
- Please try the latest version before reporting bugs -- it might have
86
- been fixed already. The latest code can be found in the git
87
- repository at
88
-
89
- http://github.com/pel/pel
90
-
91
- It is very helpful if you try out the latest code from the git
92
- repository before submitting a bug report. The code found there is
93
- generally very stable.
94
-
95
-
96
- ## Contributing Test Images
97
-
98
- To make PEL as stable as possible, it is tested with images from a
99
- number of different camera models.
100
-
101
- New test images are very much appreciated -- please download the
102
- existing test images and read the README file found there for
103
- instructions.
104
-
105
-
106
- ## Credits
107
-
108
- Please see the AUTHORS file for a list of people who have contributed
109
- to PEL. See the full list of [code contributors](https://github.com/pel/pel/graphs/contributors).
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/composer.json DELETED
@@ -1,39 +0,0 @@
1
- {
2
- "name": "lsolesen/pel",
3
- "type": "library",
4
- "description": "PHP Exif Library. A library for reading and writing Exif headers in JPEG and TIFF images using PHP.",
5
- "keywords": [
6
- "image", "exif"
7
- ],
8
- "homepage": "http://pel.github.com/pel/",
9
- "authors": [
10
- {
11
- "name": "Lars Olesen",
12
- "email": "lars@intraface.dk",
13
- "homepage": "http://intraface.dk",
14
- "role": "Developer"
15
- },
16
- {
17
- "name": "Martin Geisler",
18
- "email": "martin@geisler.net",
19
- "homepage": "http://geisler.net",
20
- "role": "Developer"
21
- }
22
- ],
23
- "license": "GPL-2.0",
24
- "require": {
25
- "php": ">=5.4.0"
26
- },
27
- "require-dev" : {
28
- "ext-gd": "*",
29
- "phpunit/phpunit": ">=4.8.36 <8",
30
- "squizlabs/php_codesniffer": "^3.0.0",
31
- "satooshi/php-coveralls": "1.0.*"
32
- },
33
- "autoload": {
34
- "psr-4": {"lsolesen\\pel\\": "src/"}
35
- },
36
- "autoload-dev": {
37
- "psr-4": { "Pel\\Test\\": "test/" }
38
- }
39
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/phpcs.xml DELETED
@@ -1,25 +0,0 @@
1
- <?xml version="1.0"?>
2
- <ruleset>
3
- <arg name="basepath" value="."/>
4
- <arg name="extensions" value="php"/>
5
- <arg name="parallel" value="80"/>
6
- <arg name="cache" value=".phpcs-cache"/>
7
- <arg name="colors" />
8
-
9
- <!-- Show progress of the run -->
10
- <arg value="p"/>
11
-
12
- <file>src</file>
13
- <file>test</file>
14
-
15
- <rule ref="PSR2"/>
16
-
17
- <!-- Allow long lines -->
18
- <rule ref="Generic.Files.LineLength">
19
- <severity>0</severity>
20
- </rule>
21
- <!-- Disallow short array syntax -->
22
- <rule ref="Generic.Arrays.DisallowLongArraySyntax.Found">
23
- <type>error</type>
24
- </rule>
25
- </ruleset>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_data/pel-0.9.9/phpunit.xml DELETED
@@ -1,21 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <phpunit backupGlobals="false"
3
- backupStaticAttributes="false"
4
- colors="true"
5
- convertErrorsToExceptions="true"
6
- convertNoticesToExceptions="true"
7
- convertWarningsToExceptions="true"
8
- stopOnFailure="false"
9
- bootstrap="autoload.php"
10
- >
11
- <testsuites>
12
- <testsuite name="Pel Testing Suite">
13
- <directory suffix=".php">./test/</directory>
14
- </testsuite>
15
- </testsuites>
16
- <filter>
17
- <whitelist>
18
- <directory suffix=".php">./src/</directory>
19
- </whitelist>
20
- </filter>
21
- </phpunit>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_gallery_display/package.module.nextgen_gallery_display.php CHANGED
@@ -335,12 +335,13 @@ class Mixin_Display_Type_Controller extends Mixin
335
  // Enqueue lightbox library
336
  $this->object->enqueue_lightbox_resources($displayed_gallery);
337
  }
338
- function enqueue_ngg_styles()
 
 
 
 
 
339
  {
340
- $settings = C_NextGen_Settings::get_instance();
341
- if ((!is_multisite() || is_multisite() && $settings->wpmuStyle) && $settings->activateCSS) {
342
- wp_enqueue_style('nggallery', C_NextGen_Style_Manager::get_instance()->get_selected_stylesheet_url(), array(), NGG_SCRIPT_VERSION);
343
- }
344
  }
345
  function get_render_mode()
346
  {
335
  // Enqueue lightbox library
336
  $this->object->enqueue_lightbox_resources($displayed_gallery);
337
  }
338
+ /**
339
+ * This function does nothing but remains for compatibility with NextGEN Pro which may invoke it.
340
+ *
341
+ * @TODO: Remove this method once Pro's minimum NGG version has been updated.
342
+ */
343
+ public function enqueue_ngg_styles()
344
  {
 
 
 
 
345
  }
346
  function get_render_mode()
347
  {
products/photocrati_nextgen/modules/nextgen_other_options/module.nextgen_other_options.php CHANGED
@@ -45,9 +45,6 @@ class M_NextGen_Other_Options extends C_Base_Module
45
  'watermarks' => 'A_Watermarks_Form'
46
  );
47
 
48
- if (!is_multisite() || (is_multisite() && C_NextGen_Settings::get_instance()->get('wpmuStyle')))
49
- $forms['styles'] = 'A_Styles_Form';
50
-
51
  if (is_super_admin() && (!is_multisite() || (is_multisite() && C_NextGen_Settings::get_instance()->get('wpmuRoles'))))
52
  $forms['roles_and_capabilities'] = 'A_Roles_Form';
53
 
@@ -82,7 +79,6 @@ class M_NextGen_Other_Options extends C_Base_Module
82
  function _register_adapters()
83
  {
84
  $this->get_registry()->add_adapter('I_Ajax_Controller', 'A_Watermarking_Ajax_Actions');
85
- $this->get_registry()->add_adapter('I_Ajax_Controller', 'A_Stylesheet_Ajax_Actions');
86
  $this->get_registry()->add_adapter('I_Ajax_Controller', 'A_Other_Options_Misc_Tab_Ajax');
87
 
88
  if (is_admin()) {
@@ -121,12 +117,6 @@ class M_NextGen_Other_Options extends C_Base_Module
121
  'watermarks'
122
  );
123
 
124
- $this->get_registry()->add_adapter(
125
- 'I_Form',
126
- 'A_Styles_Form',
127
- 'styles'
128
- );
129
-
130
  $this->get_registry()->add_adapter(
131
  'I_Form',
132
  'A_Roles_Form',
@@ -164,11 +154,9 @@ class M_NextGen_Other_Options extends C_Base_Module
164
  'A_Other_Options_Page' => 'adapter.other_options_page.php',
165
  'A_Reset_Form' => 'adapter.reset_form.php',
166
  'A_Roles_Form' => 'adapter.roles_form.php',
167
- 'A_Styles_Form' => 'adapter.styles_form.php',
168
  'A_Thumbnail_Options_Form' => 'adapter.thumbnail_options_form.php',
169
  'A_Watermarking_Ajax_Actions' => 'adapter.watermarking_ajax_actions.php',
170
  'A_Watermarks_Form' => 'adapter.watermarks_form.php',
171
- 'A_Stylesheet_Ajax_Actions' => 'adapter.stylesheet_ajax_actions.php',
172
  'A_Custom_Lightbox_Form' => 'adapter.custom_lightbox_form.php',
173
  'C_Settings_Model' => 'class.settings_model.php'
174
  );
45
  'watermarks' => 'A_Watermarks_Form'
46
  );
47
 
 
 
 
48
  if (is_super_admin() && (!is_multisite() || (is_multisite() && C_NextGen_Settings::get_instance()->get('wpmuRoles'))))
49
  $forms['roles_and_capabilities'] = 'A_Roles_Form';
50
 
79
  function _register_adapters()
80
  {
81
  $this->get_registry()->add_adapter('I_Ajax_Controller', 'A_Watermarking_Ajax_Actions');
 
82
  $this->get_registry()->add_adapter('I_Ajax_Controller', 'A_Other_Options_Misc_Tab_Ajax');
83
 
84
  if (is_admin()) {
117
  'watermarks'
118
  );
119
 
 
 
 
 
 
 
120
  $this->get_registry()->add_adapter(
121
  'I_Form',
122
  'A_Roles_Form',
154
  'A_Other_Options_Page' => 'adapter.other_options_page.php',
155
  'A_Reset_Form' => 'adapter.reset_form.php',
156
  'A_Roles_Form' => 'adapter.roles_form.php',
 
157
  'A_Thumbnail_Options_Form' => 'adapter.thumbnail_options_form.php',
158
  'A_Watermarking_Ajax_Actions' => 'adapter.watermarking_ajax_actions.php',
159
  'A_Watermarks_Form' => 'adapter.watermarks_form.php',
 
160
  'A_Custom_Lightbox_Form' => 'adapter.custom_lightbox_form.php',
161
  'C_Settings_Model' => 'class.settings_model.php'
162
  );
products/photocrati_nextgen/modules/nextgen_other_options/package.module.nextgen_other_options.php CHANGED
@@ -337,7 +337,7 @@ class A_Miscellaneous_Form extends Mixin
337
  }
338
  function render()
339
  {
340
- return $this->object->render_partial('photocrati-nextgen_other_options#misc_tab', array('mediarss_activated' => C_NextGen_Settings::get_instance()->useMediaRSS, 'mediarss_activated_label' => __('Add MediaRSS link?', 'nggallery'), 'mediarss_activated_help' => __('When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries', 'nggallery'), 'mediarss_activated_no' => __('No'), 'mediarss_activated_yes' => __('Yes'), 'galleries_in_feeds' => C_NextGen_Settings::get_instance()->galleries_in_feeds, 'galleries_in_feeds_label' => __('Display galleries in feeds', 'nggallery'), 'galleries_in_feeds_help' => __('NextGEN hides its gallery displays in feeds other than MediaRSS. This enables image galleries in feeds.', 'nggallery'), 'galleries_in_feeds_no' => __('No'), 'galleries_in_feeds_yes' => __('Yes'), 'cache_label' => __('Clear image cache', 'nggallery'), 'cache_confirmation' => __("Completely clear the NextGEN cache of all image modifications?\n\nChoose [Cancel] to Stop, [OK] to proceed.", 'nggallery'), 'update_legacy_featured_images_field' => $this->object->render_partial('photocrati-nextgen_other_options#update_legacy_featured_images_field', ['i18n' => ['label' => __('Update legacy page featured images', 'nggallery'), 'confirmation' => __('Continue? This will copy all NextGen 1.x page featured images into the media library.', 'nggallery'), 'tooltip' => __('WordPress 5.4 is incompatible with NextGen 1.x page featured images and they must be updated in a bulk process to correct them. This button will launch a background process (with a progress bar) that imports each NextGen image into the Media Library. This process can be resumed if you close the popup window or this browser window.', 'nggallery'), 'header' => __('Updating legacy page featured images', 'nggallery'), 'no_images_found' => __('No legacy page featured images were found.', 'nggallery'), 'operation_finished' => __('Operation complete. Legacy featured images have been corrected.', 'nggallery')]], TRUE), 'slug_field' => $this->_render_text_field((object) array('name' => 'misc_settings'), 'router_param_slug', __('Permalink slug', 'nggallery'), $this->object->get_model()->get('router_param_slug', 'nggallery')), 'maximum_entity_count_field' => $this->_render_number_field((object) array('name' => 'misc_settings'), 'maximum_entity_count', __('Maximum image count', 'nggallery'), $this->object->get_model()->maximum_entity_count, __('This is the maximum limit of images that NextGEN will restrict itself to querying', 'nggallery') . " \n " . __('Note: This limit will not apply to slideshow widgets or random galleries if/when those galleries specify their own image limits', 'nggallery'), FALSE, '', 1), 'random_widget_cache_ttl_field' => $this->_render_number_field((object) array('name' => 'misc_settings'), 'random_widget_cache_ttl', __('Random widget cache duration', 'nggallery'), $this->object->get_model()->random_widget_cache_ttl, __('The duration of time (in minutes) that "random" widget galleries should be cached. A setting of zero will disable caching.', 'nggallery'), FALSE, '', 0), 'alternate_random_method_field' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'use_alternate_random_method', __('Use alternative method of retrieving random image galleries', 'nggallery'), C_NextGen_Settings::get_instance()->use_alternate_random_method, __("Some web hosts' database servers disable or disrupt queries using 'ORDER BY RAND()' which can cause galleries to lose their randomness. NextGen provides an alternative (but not completely random) method to determine what images are fed into 'random' galleries.", 'nggallery')), 'disable_fontawesome_field' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'disable_fontawesome', __('Do not enqueue FontAwesome', 'nggallery'), C_NextGen_Settings::get_instance()->disable_fontawesome, __("Warning: your theme or another plugin must provide FontAwesome or your gallery displays may appear incorrectly", 'nggallery')), 'disable_ngg_tags_page_field' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'disable_ngg_tags_page', __('Disable the /ngg_tag/ page', 'nggallery'), C_NextGen_Settings::get_instance()->get('disable_ngg_tags_page', FALSE), __("Normally an SEO feature; some users may wish to disable this to prevent NextGEN from revealing image tags to site visitors", 'nggallery'))), TRUE);
341
  }
342
  function cache_action()
343
  {
@@ -512,97 +512,6 @@ class A_Roles_Form extends Mixin
512
  return $retval;
513
  }
514
  }
515
- /**
516
- * Class A_Styles_Form
517
- * @mixin C_Form
518
- * @adapts I_Form using "styles" context
519
- */
520
- class A_Styles_Form extends Mixin
521
- {
522
- function get_model()
523
- {
524
- return C_Settings_Model::get_instance();
525
- }
526
- function get_title()
527
- {
528
- return __('Styles', 'nggallery');
529
- }
530
- function render()
531
- {
532
- return $this->object->render_partial('photocrati-nextgen_other_options#styling_tab', array('activateCSS_label' => __('Enable custom CSS', 'nggallery'), 'activateCSS' => $this->object->get_model()->activateCSS, 'select_stylesheet_label' => __('What stylesheet would you like to use?', 'nggallery'), 'stylesheets' => C_NextGen_Style_Manager::get_instance()->find_all_stylesheets(), 'activated_stylesheet' => $this->object->get_model()->CSSfile, 'hidden_label' => __('(Show Customization Options)', 'nggallery'), 'active_label' => __('(Hide Customization Options)', 'nggallery'), 'cssfile_contents_label' => __('File Content:', 'nggallery'), 'writable_label' => __('Changes you make to the contents will be saved to', 'nggallery'), 'readonly_label' => __('You could edit this file if it were writable', 'nggallery')), TRUE);
533
- }
534
- function save_action()
535
- {
536
- // Ensure that we have
537
- if ($settings = $this->object->param('style_settings')) {
538
- $settings['activateCSS'] = intval($settings['activateCSS']);
539
- $valid = TRUE;
540
- // the desired file, but users shouldn't use this to write files that don't end in .css anyway
541
- $file_info = pathinfo($settings['CSSfile']);
542
- // Prevent something.php.css from being executed on poorly configured servers
543
- if (preg_match('/\\.php(.*)$/i', $settings['CSSfile'], $matches)) {
544
- $valid = FALSE;
545
- }
546
- // Ensure a .css extension
547
- if (strpos($file_info['extension'], 'css') === FALSE) {
548
- $valid = FALSE;
549
- }
550
- // TODO: C_Page's add_error() doesn't seem to work here so we should report that we aren't saving
551
- if ($valid) {
552
- $this->object->get_model()->set($settings)->save();
553
- }
554
- // Are we to modify the CSS file?
555
- if ($valid && ($contents = $this->object->param('cssfile_contents'))) {
556
- // Find filename
557
- $css_file = $settings['CSSfile'];
558
- $styles = C_NextGen_Style_Manager::get_instance();
559
- $styles->save($contents, $css_file);
560
- }
561
- }
562
- }
563
- }
564
- /**
565
- * Registers new AJAX functions for retrieving/updating
566
- * the contents of CSS stylesheets
567
- *
568
- * @mixin C_Ajax_Controller
569
- * @adapts I_Ajax_Controller
570
- */
571
- class A_Stylesheet_Ajax_Actions extends Mixin
572
- {
573
- /**
574
- * Retrieves the contents of the CSS stylesheet specified
575
- */
576
- function get_stylesheet_contents_action()
577
- {
578
- $retval = array();
579
- if ($this->object->_authorized_for_stylesheet_action()) {
580
- $styles = C_NextGen_Style_Manager::get_instance();
581
- $cssfile = str_replace('..', '', $this->object->param('cssfile'));
582
- $abspath = $styles->find_selected_stylesheet_abspath($cssfile);
583
- $writepath = $styles->get_selected_stylesheet_saved_abspath($this->object->param('cssfile'));
584
- if (is_readable($abspath)) {
585
- $retval['contents'] = file_get_contents($abspath);
586
- $retval['writable'] = is_writable($abspath);
587
- $retval['abspath'] = $abspath;
588
- $retval['writepath'] = $writepath;
589
- } else {
590
- $retval['error'] = "Could not find stylesheet";
591
- }
592
- } else {
593
- $retval['error'] = 'Unauthorized';
594
- }
595
- return $retval;
596
- }
597
- /**
598
- * Determines if the request is authorized
599
- * @return boolean
600
- */
601
- function _authorized_for_stylesheet_action()
602
- {
603
- return M_Security::is_allowed('nextgen_edit_style');
604
- }
605
- }
606
  /**
607
  * Class A_Thumbnail_Options_Form
608
  * @mixin C_Form
337
  }
338
  function render()
339
  {
340
+ return $this->object->render_partial('photocrati-nextgen_other_options#misc_tab', array('mediarss_activated' => C_NextGen_Settings::get_instance()->useMediaRSS, 'mediarss_activated_label' => __('Add MediaRSS link?', 'nggallery'), 'mediarss_activated_help' => __('When enabled, adds a MediaRSS link to your header. Third-party web services can use this to publish your galleries', 'nggallery'), 'mediarss_activated_no' => __('No'), 'mediarss_activated_yes' => __('Yes'), 'galleries_in_feeds' => C_NextGen_Settings::get_instance()->galleries_in_feeds, 'galleries_in_feeds_label' => __('Display galleries in feeds', 'nggallery'), 'galleries_in_feeds_help' => __('NextGEN hides its gallery displays in feeds other than MediaRSS. This enables image galleries in feeds.', 'nggallery'), 'galleries_in_feeds_no' => __('No'), 'galleries_in_feeds_yes' => __('Yes'), 'cache_label' => __('Clear image cache', 'nggallery'), 'cache_confirmation' => __("Completely clear the NextGEN cache of all image modifications?\n\nChoose [Cancel] to Stop, [OK] to proceed.", 'nggallery'), 'update_legacy_featured_images_field' => $this->object->render_partial('photocrati-nextgen_other_options#update_legacy_featured_images_field', ['i18n' => ['label' => __('Update legacy page featured images', 'nggallery'), 'confirmation' => __('Continue? This will copy all NextGen 1.x page featured images into the media library.', 'nggallery'), 'tooltip' => __('WordPress 5.4 is incompatible with NextGen 1.x page featured images and they must be updated in a bulk process to correct them. This button will launch a background process (with a progress bar) that imports each NextGen image into the Media Library. This process can be resumed if you close the popup window or this browser window.', 'nggallery'), 'header' => __('Updating legacy page featured images', 'nggallery'), 'no_images_found' => __('No legacy page featured images were found.', 'nggallery'), 'operation_finished' => __('Operation complete. Legacy featured images have been corrected.', 'nggallery')]], TRUE), 'slug_field' => $this->_render_text_field((object) array('name' => 'misc_settings'), 'router_param_slug', __('Permalink slug', 'nggallery'), $this->object->get_model()->get('router_param_slug', 'nggallery')), 'maximum_entity_count_field' => $this->_render_number_field((object) array('name' => 'misc_settings'), 'maximum_entity_count', __('Maximum image count', 'nggallery'), $this->object->get_model()->maximum_entity_count, __('This is the maximum limit of images that NextGEN will restrict itself to querying', 'nggallery') . " \n " . __('Note: This limit will not apply to slideshow widgets or random galleries if/when those galleries specify their own image limits', 'nggallery'), FALSE, '', 1), 'random_widget_cache_ttl_field' => $this->_render_number_field((object) array('name' => 'misc_settings'), 'random_widget_cache_ttl', __('Random widget cache duration', 'nggallery'), $this->object->get_model()->random_widget_cache_ttl, __('The duration of time (in minutes) that "random" widget galleries should be cached. A setting of zero will disable caching.', 'nggallery'), FALSE, '', 0), 'alternate_random_method_field' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'use_alternate_random_method', __('Use alternative method of retrieving random image galleries', 'nggallery'), C_NextGen_Settings::get_instance()->use_alternate_random_method, __("Some web hosts' database servers disable or disrupt queries using 'ORDER BY RAND()' which can cause galleries to lose their randomness. NextGen provides an alternative (but not completely random) method to determine what images are fed into 'random' galleries.", 'nggallery')), 'disable_fontawesome_field' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'disable_fontawesome', __('Do not enqueue FontAwesome', 'nggallery'), C_NextGen_Settings::get_instance()->disable_fontawesome, __("Warning: your theme or another plugin must provide FontAwesome or your gallery displays may appear incorrectly", 'nggallery')), 'disable_ngg_tags_page_field' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'disable_ngg_tags_page', __('Disable the /ngg_tag/ page', 'nggallery'), C_NextGen_Settings::get_instance()->get('disable_ngg_tags_page', FALSE), __("Normally an SEO feature; some users may wish to disable this to prevent NextGEN from revealing image tags to site visitors", 'nggallery')), 'dynamic_image_filename_separator_use_dash' => $this->_render_radio_field((object) array('name' => 'misc_settings'), 'dynamic_image_filename_separator_use_dash', __('Use dashes instead of underscores when generating new image files', 'nggallery'), C_NextGen_Settings::get_instance()->get('dynamic_image_filename_separator_use_dash', FALSE), __("Google does not treat underscores as word separators when it indexes images and so treats 'portrait-of-a-man_800x600' as 'portrait-of-a-man800x600' which is not good for SEO. Until NextGEN 3.19 the default character was an underscore; enabling this option changes it to the SEO friendly dash character. This will cause new dynamic images to be generated, and using the above 'Clear image cache' button is recommended after changing.", 'nggallery'))), TRUE);
341
  }
342
  function cache_action()
343
  {
512
  return $retval;
513
  }
514
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
515
  /**
516
  * Class A_Thumbnail_Options_Form
517
  * @mixin C_Form
products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.css CHANGED
@@ -98,15 +98,6 @@ td.align-to-top {
98
  width: 100% !important;
99
  }
100
 
101
- #cssfile_contents {
102
- background: #F9F9F9;
103
- font-family: Consolas,Monaco,monospace;
104
- font-size: 12px;
105
- width: 100%;
106
- height: 300px;
107
- outline: 0;
108
- }
109
-
110
  #writable_identicator {
111
  display: inline;
112
  }
98
  width: 100% !important;
99
  }
100
 
 
 
 
 
 
 
 
 
 
101
  #writable_identicator {
102
  display: inline;
103
  }
products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.js CHANGED
@@ -79,35 +79,5 @@ jQuery(function($){
79
 
80
  return false;
81
  });
82
- /**** STYLES TAB ****/
83
 
84
- $('input[name="style_settings[activateCSS]"]')
85
- .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_styles_activated_stylesheet'))
86
- .nextgen_radio_toggle_tr('1', $('#tr_photocrati-nextgen_styles_show_more'))
87
- .on('change', function() {
88
- var $this = $(this);
89
- if ($this.val() == '0') {
90
- $('#cssfile_contents').prop('disabled', true);
91
- $('#advanced_stylesheet_form').hide('slow');
92
- } else {
93
- $('#cssfile_contents').prop('disabled', false);
94
- }
95
- });
96
-
97
-
98
- // When the selected stylesheet changes, fetch it's contents
99
- $('#activated_stylesheet').on('change', function() {
100
- var selected = $(this).find(':selected');
101
- var data = {
102
- action: 'get_stylesheet_contents',
103
- cssfile: selected.val()
104
- };
105
- $.post(photocrati_ajax.url, data, function(res) {
106
- if (typeof res !== 'object') res = JSON.parse(res);
107
- $('#cssfile_contents').val(res.error ? res.error : res.contents);
108
- var status = $('#writable_identicator');
109
- if (res.writable) status.text(status.attr('writable_label')+' '+res.writepath);
110
- else status.text(status.attr('readonly_label'));
111
- });
112
- }).trigger('change');
113
- });
79
 
80
  return false;
81
  });
 
82
 
83
+ });
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.css CHANGED
@@ -1 +1 @@
1
- #lightbox_library_advanced_settings td,.right-aligned{text-align:right}.gallery_page_ngg_other_options table{width:80%;height:100%}#ngg_page_content.ngg_settings_page .ngg_page_content_main table tr td{vertical-align:middle;line-height:1.8;padding:20px}.gallery_page_ngg_other_options #ngg_page_content .ngg_page_content_main table tr td:first-of-type,.gallery_page_ngg_other_options #ngg_page_content .ngg_page_content_main table tr th:first-of-type{width:325px!important;max-width:100%!important}.gallery_page_ngg_other_options table.image_options{width:100%}.gallery_page_ngg_other_options table td.column1{width:240px}.gallery_page_ngg_other_options table td.column2{width:200px}.gallery_page_ngg_other_options textarea{height:100px;width:100%}.gallery_page_ngg_other_options .image_options td{padding-bottom:8px}.gallery_page_ngg_other_options .select2-results__option--highlighted[aria-selected]{background-color:#9fbb1a}#image_quality,#image_sorting_direction{width:120px!important}#ngg_page_content.ngg_settings_page .ngg_page_content_main table.nextgen_settings_position{display:table!important}.column_wrapper{width:100%;padding-right:7px}#max_related_images{width:auto}#ngg_page_content .ngg_page_content_main #image_height,#ngg_page_content .ngg_page_content_main #image_width{width:53px}#ngg_page_content #thumbnail_dimensions_height,#ngg_page_content #thumbnail_dimensions_width{width:75px;vertical-align:middle}.nextgen-thumb-size-custom br{display:none}.gallery_page_ngg_other_options select.thumbnail_dimensions{width:300px;max-width:100%}.full-width{width:100%}label.align-to-top,td.align-to-top{vertical-align:top}#advanced_stylesheet_form td{width:100%!important}#cssfile_contents{background:#F9F9F9;font-family:Consolas,Monaco,monospace;font-size:12px;width:100%;height:300px;outline:0}#writable_identicator{display:inline}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#nextgen_settings_preview_refresh{display:block}@media (max-width:782px){#ngg_page_content.ngg_settings_page .ngg_page_content_main table tr td{width:100%;padding:5px 20px}#image_quality,#image_sorting_direction,.gallery_page_ngg_other_options .select2-container,.gallery_page_ngg_other_options input[type=text],.gallery_page_ngg_other_options select{width:100%!important}}.deprecated{color:#ff8c00;font-size:smaller}
1
+ #lightbox_library_advanced_settings td,.right-aligned{text-align:right}.gallery_page_ngg_other_options table{width:80%;height:100%}#ngg_page_content.ngg_settings_page .ngg_page_content_main table tr td{vertical-align:middle;line-height:1.8;padding:20px}.gallery_page_ngg_other_options #ngg_page_content .ngg_page_content_main table tr td:first-of-type,.gallery_page_ngg_other_options #ngg_page_content .ngg_page_content_main table tr th:first-of-type{width:325px!important;max-width:100%!important}.gallery_page_ngg_other_options table.image_options{width:100%}.gallery_page_ngg_other_options table td.column1{width:240px}.gallery_page_ngg_other_options table td.column2{width:200px}.gallery_page_ngg_other_options textarea{height:100px;width:100%}.gallery_page_ngg_other_options .image_options td{padding-bottom:8px}.gallery_page_ngg_other_options .select2-results__option--highlighted[aria-selected]{background-color:#9fbb1a}#image_quality,#image_sorting_direction{width:120px!important}#ngg_page_content.ngg_settings_page .ngg_page_content_main table.nextgen_settings_position{display:table!important}.column_wrapper{width:100%;padding-right:7px}#max_related_images{width:auto}#ngg_page_content .ngg_page_content_main #image_height,#ngg_page_content .ngg_page_content_main #image_width{width:53px}#ngg_page_content #thumbnail_dimensions_height,#ngg_page_content #thumbnail_dimensions_width{width:75px;vertical-align:middle}.nextgen-thumb-size-custom br{display:none}.gallery_page_ngg_other_options select.thumbnail_dimensions{width:300px;max-width:100%}.full-width{width:100%}label.align-to-top,td.align-to-top{vertical-align:top}#advanced_stylesheet_form td{width:100%!important}#writable_identicator{display:inline}.entity_errors{color:red}.entity_errors ul{margin-left:30px}.entity_errors ul li{list-style-type:disc}#nextgen_settings_preview_refresh{display:block}@media (max-width:782px){#ngg_page_content.ngg_settings_page .ngg_page_content_main table tr td{width:100%;padding:5px 20px}#image_quality,#image_sorting_direction,.gallery_page_ngg_other_options .select2-container,.gallery_page_ngg_other_options input[type=text],.gallery_page_ngg_other_options select{width:100%!important}}.deprecated{color:#ff8c00;font-size:smaller}
products/photocrati_nextgen/modules/nextgen_other_options/static/nextgen_settings_page.min.js CHANGED
@@ -1 +1 @@
1
- "use strict";function _typeof(t){"@babel/helpers - typeof";return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}jQuery(function(t){t("select.select2").select2(),t("label.tooltip, span.tooltip").tooltip(),t("#lightbox_library").on("change",function(){var e=t(this).find(":selected").val(),r="lightbox_library_"+e;t(".lightbox_library_settings").each(function(){t(this).attr("id")!=r&&t(this).fadeOut("fast")}),t("#"+r).fadeIn()}).trigger("change"),t("#watermark_customization").attr("rel","watermark_"+t("#watermark_source").val()+"_source"),t("#watermark_source").on("change",function(){t("#"+t("#watermark_customization").attr("rel")).css("display","").addClass("hidden"),t("#"+t(this).val()).hasClass("hidden")||t("#"+t(this).val()).removeClass("hidden"),t("#watermark_customization").attr("rel","watermark_"+t("#watermark_source").val()+"_source").trigger("click")}),t("#watermark_source").on("change",function(){var e=t(this).val();t(".watermark_field").each(function(){0==e?t(this).fadeOut().addClass("hidden"):t(this).fadeIn().removeClass("hidden")})}).trigger("change"),t("#nextgen_settings_preview_refresh").on("click",function(e){e.preventDefault();var r=t(this).parents("form:first"),a=t(this),s=t(a).html();return t(a).attr("disabled","disabled").html("Processing..."),t("body").css("cursor","wait"),t.ajax({type:r.attr("method"),url:t(this).data("refresh-url"),data:r.serialize()+"&action=get_watermark_preview_url",dataType:"json",success:function(e){var r=a.prev(),o=e.thumbnail_url;queryPos=o.indexOf("?"),-1!=queryPos&&(o=o.substring(0,queryPos)),r.attr("src",o+"?"+(new Date).getTime()),t(a).prop("disabled",!1).html(s),t("body").css("cursor","default")},error:function(e,r,o){t(a).prop("disabled",!1).html(s),t("body").css("cursor","default")}}),!1}),t('input[name="style_settings[activateCSS]"]').nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_styles_activated_stylesheet")).nextgen_radio_toggle_tr("1",t("#tr_photocrati-nextgen_styles_show_more")).on("change",function(){"0"==t(this).val()?(t("#cssfile_contents").prop("disabled",!0),t("#advanced_stylesheet_form").hide("slow")):t("#cssfile_contents").prop("disabled",!1)}),t("#activated_stylesheet").on("change",function(){var e=t(this).find(":selected"),r={action:"get_stylesheet_contents",cssfile:e.val()};t.post(photocrati_ajax.url,r,function(e){"object"!==_typeof(e)&&(e=JSON.parse(e)),t("#cssfile_contents").val(e.error?e.error:e.contents);var r=t("#writable_identicator");e.writable?r.text(r.attr("writable_label")+" "+e.writepath):r.text(r.attr("readonly_label"))})}).trigger("change")});
1
+ "use strict";jQuery(function(t){t("select.select2").select2(),t("label.tooltip, span.tooltip").tooltip(),t("#lightbox_library").on("change",function(){var e=t(this).find(":selected").val(),r="lightbox_library_"+e;t(".lightbox_library_settings").each(function(){t(this).attr("id")!=r&&t(this).fadeOut("fast")}),t("#"+r).fadeIn()}).trigger("change"),t("#watermark_customization").attr("rel","watermark_"+t("#watermark_source").val()+"_source"),t("#watermark_source").on("change",function(){t("#"+t("#watermark_customization").attr("rel")).css("display","").addClass("hidden"),t("#"+t(this).val()).hasClass("hidden")||t("#"+t(this).val()).removeClass("hidden"),t("#watermark_customization").attr("rel","watermark_"+t("#watermark_source").val()+"_source").trigger("click")}),t("#watermark_source").on("change",function(){var e=t(this).val();t(".watermark_field").each(function(){0==e?t(this).fadeOut().addClass("hidden"):t(this).fadeIn().removeClass("hidden")})}).trigger("change"),t("#nextgen_settings_preview_refresh").on("click",function(e){e.preventDefault();var r=t(this).parents("form:first"),a=t(this),s=t(a).html();return t(a).attr("disabled","disabled").html("Processing..."),t("body").css("cursor","wait"),t.ajax({type:r.attr("method"),url:t(this).data("refresh-url"),data:r.serialize()+"&action=get_watermark_preview_url",dataType:"json",success:function(e){var r=a.prev(),i=e.thumbnail_url;queryPos=i.indexOf("?"),-1!=queryPos&&(i=i.substring(0,queryPos)),r.attr("src",i+"?"+(new Date).getTime()),t(a).prop("disabled",!1).html(s),t("body").css("cursor","default")},error:function(e,r,i){t(a).prop("disabled",!1).html(s),t("body").css("cursor","default")}}),!1})});
products/photocrati_nextgen/modules/nextgen_other_options/templates/misc_tab.php CHANGED
@@ -19,6 +19,7 @@
19
  * @var string $random_widget_cache_ttl_field
20
  * @var string $slug_field
21
  * @var string $update_legacy_featured_images_field
 
22
  */
23
  ?>
24
  <table>
@@ -117,4 +118,6 @@
117
  <?php print $disable_fontawesome_field; ?>
118
 
119
  <?php print $disable_ngg_tags_page_field; ?>
 
 
120
  </table>
19
  * @var string $random_widget_cache_ttl_field
20
  * @var string $slug_field
21
  * @var string $update_legacy_featured_images_field
22
+ * @var string $dynamic_image_filename_separator_use_dash
23
  */
24
  ?>
25
  <table>
118
  <?php print $disable_fontawesome_field; ?>
119
 
120
  <?php print $disable_ngg_tags_page_field; ?>
121
+
122
+ <?php print $dynamic_image_filename_separator_use_dash; ?>
123
  </table>
products/photocrati_nextgen/modules/nextgen_other_options/templates/styling_tab.php DELETED
@@ -1,76 +0,0 @@
1
- <blockquote class="deprecated">
2
- <i class="fa fa-exclamation-circle" aria-hidden="true"></i>
3
- <strong>Deprecated:</strong> For more information, please see our <a target='_blank' href='https://www.imagely.com/docs/styles-tab-deprecation'>documentation</a>
4
- </blockquote>
5
- <table class="full-width">
6
- <tr>
7
- <td class="column1">
8
- <label for="activateCSS">
9
- <?php esc_html_e($activateCSS_label); ?>
10
- </label>
11
- </td>
12
- <td colspan="2">
13
- <input id="activateCSS" type="radio" name="style_settings[activateCSS]" value="1" <?php checked(1, $activateCSS); ?>/>
14
- <label for="activateCSS"><?php _e('Yes', 'nggallery'); ?></label>
15
- &nbsp;
16
- <input id="activateCSS_no" type="radio" name="style_settings[activateCSS]" value="0" <?php checked(0, $activateCSS); ?>/>
17
- <label for="activateCSS_no"><?php _e('No', 'nggallery'); ?></label>
18
- </td>
19
- </tr>
20
- <tr id="tr_photocrati-nextgen_styles_activated_stylesheet" class="<?php echo ($activateCSS == 0 ? 'hidden' : ''); ?>">
21
- <td class="column1">
22
- <label for="activated_stylesheet">
23
- <?php esc_html_e($select_stylesheet_label) ?>
24
- </label>
25
- </td>
26
- <td>
27
- <select id="activated_stylesheet" name="style_settings[CSSfile]">
28
- <?php foreach ($stylesheets as $value => $p): ?>
29
- <option
30
- value="<?php echo esc_attr($value)?>"
31
- description="<?php echo esc_attr($p['description'])?>"
32
- author="<?php echo esc_attr($p['author'])?>"
33
- version="<?php echo esc_attr($p['version'])?>"
34
- <?php selected($value, $activated_stylesheet)?>
35
- ><?php esc_html_e($p['name'])?></option>
36
- <?php endforeach ?>
37
- </select>
38
- <p class="description">
39
- <?php _e('Place any custom stylesheets in <strong>wp-content/ngg_styles</strong>', 'nggallery'); ?><br/>
40
- <?php
41
- printf(
42
- __("All stylesheets must contain a <a href='#' onclick='%s'>file header</a>", 'nggallery'),
43
- 'javascript:alert("/*\nCSS Name: Example\nDescription: This is an example stylesheet\nAuthor: John Smith\nVersion: 1.0\n*/");'
44
- );
45
- ?>
46
- </p>
47
- </td>
48
- </tr>
49
- <tr id="tr_photocrati-nextgen_styles_show_more" class="<?php echo ($activateCSS == 0 ? 'hidden' : ''); ?>">
50
- <td colspan="2">
51
- <a
52
- href="#"
53
- id="advanced_stylesheet_options"
54
- class="nextgen_advanced_toggle_link"
55
- rel="advanced_stylesheet_form"
56
- hidden_label="<?php echo esc_attr($hidden_label)?>"
57
- active_label="<?php echo esc_attr($active_label)?>">
58
- <?php esc_html_e($hidden_label) ?>
59
- </a>
60
- </td>
61
- </tr>
62
- <tr class="hidden" id="advanced_stylesheet_form">
63
- <td colspan="2">
64
- <label for="cssfile_contents" class="align-to-top">
65
- <?php esc_html_e($cssfile_contents_label)?>
66
- </label>
67
- <p
68
- class="description"
69
- writable_label="<?php echo esc_attr($writable_label)?>"
70
- readonly_label="<?php echo esc_attr($readonly_label)?>"
71
- id="writable_identicator">
72
- </p>
73
- <textarea id="cssfile_contents" name="cssfile_contents" <?php echo ($activateCSS == 0 ? 'disabled' : ''); ?>></textarea>
74
- </td>
75
- </tr>
76
- </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
products/photocrati_nextgen/modules/nextgen_settings/module.nextgen_settings.php CHANGED
@@ -18,7 +18,7 @@ class M_NextGen_Settings extends C_Base_Module
18
  'photocrati-nextgen_settings',
19
  'NextGEN Gallery Settings',
20
  'Provides central management for NextGEN Gallery settings',
21
- '3.10',
22
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
23
  'Imagely',
24
  'https://www.imagely.com'
@@ -45,13 +45,13 @@ class C_NextGen_Settings_Installer
45
 
46
  function __construct()
47
  {
 
 
48
  $this->blog_settings = C_NextGen_Settings::get_instance();
49
  $this->site_settings = C_NextGen_Global_Settings::get_instance();
50
 
51
  $this->_global_settings = apply_filters('ngg_default_global_settings', [
52
  'gallerypath' => implode(DIRECTORY_SEPARATOR, array('wp-content', 'uploads', 'sites', '%BLOG_ID%', 'nggallery')) . DIRECTORY_SEPARATOR,
53
- 'wpmuCSSfile' => 'nggallery.css',
54
- 'wpmuStyle' => FALSE,
55
  'wpmuRoles' => FALSE,
56
  'wpmuImportFolder' => FALSE,
57
  'wpmuZipUpload' => FALSE,
@@ -128,12 +128,8 @@ class C_NextGen_Settings_Installer
128
  'irHeight' => 500,
129
  'irRotatetime' => 5,
130
 
131
- // CSS Style
132
- 'activateCSS' => 1, // activate the CSS file
133
- 'CSSfile' => 'nggallery.css', // set default css filename
134
- 'always_enable_frontend_logic' => FALSE,
135
-
136
- // Misc //
137
 
138
  // It is known that WPEngine disables 'order by rand()' by default, but exposes it as an option to users
139
  'use_alternate_random_method' => (function_exists('is_wpe') && is_wpe()) ? TRUE : FALSE,
18
  'photocrati-nextgen_settings',
19
  'NextGEN Gallery Settings',
20
  'Provides central management for NextGEN Gallery settings',
21
+ '3.19',
22
  'https://www.imagely.com/wordpress-gallery-plugin/nextgen-gallery/',
23
  'Imagely',
24
  'https://www.imagely.com'
45
 
46
  function __construct()
47
  {
48
+ $existing_options = get_option('ngg_options', []);
49
+
50
  $this->blog_settings = C_NextGen_Settings::get_instance();
51
  $this->site_settings = C_NextGen_Global_Settings::get_instance();
52
 
53
  $this->_global_settings = apply_filters('ngg_default_global_settings', [
54
  'gallerypath' => implode(DIRECTORY_SEPARATOR, array('wp-content', 'uploads', 'sites', '%BLOG_ID%', 'nggallery')) . DIRECTORY_SEPARATOR,
 
 
55
  'wpmuRoles' => FALSE,
56
  'wpmuImportFolder' => FALSE,
57
  'wpmuZipUpload' => FALSE,
128
  'irHeight' => 500,
129
  'irRotatetime' => 5,
130
 
131
+ // Misc
132
+ 'dynamic_image_filename_separator_use_dash' => !$existing_options['gallerypath'],
 
 
 
 
133
 
134
  // It is known that WPEngine disables 'order by rand()' by default, but exposes it as an option to users
135
  'use_alternate_random_method' => (function_exists('is_wpe') && is_wpe()) ? TRUE : FALSE,
products/photocrati_nextgen/modules/ngglegacy/admin/album.php CHANGED
@@ -29,7 +29,7 @@ class nggManageAlbum {
29
  * @access privat
30
  * @var array
31
  */
32
- var $albums = false;
33
 
34
  /**
35
  * The amount of all galleries
@@ -172,9 +172,12 @@ class nggManageAlbum {
172
 
173
  $album = new stdClass();
174
  $album->name = $_POST['newalbum'];
175
- if (C_Album_Mapper::get_instance()->save($album)) {
 
176
  $this->currentID = $_REQUEST['act_album'] = $album->{$album->id_field};
 
177
  $this->albums[$this->currentID] = $album;
 
178
  do_action('ngg_add_album', $this->currentID);
179
  wp_redirect(admin_url('admin.php?page=nggallery-manage-album&act_album=' . $album->{$album->id_field}));
180
  }
29
  * @access privat
30
  * @var array
31
  */
32
+ var $albums = [];
33
 
34
  /**
35
  * The amount of all galleries
172
 
173
  $album = new stdClass();
174
  $album->name = $_POST['newalbum'];
175
+ if (C_Album_Mapper::get_instance()->save($album))
176
+ {
177
  $this->currentID = $_REQUEST['act_album'] = $album->{$album->id_field};
178
+
179
  $this->albums[$this->currentID] = $album;
180
+
181
  do_action('ngg_add_album', $this->currentID);
182
  wp_redirect(admin_url('admin.php?page=nggallery-manage-album&act_album=' . $album->{$album->id_field}));
183
  }
products/photocrati_nextgen/modules/ngglegacy/lib/gd.thumbnail.inc.php CHANGED
@@ -231,7 +231,7 @@ class ngg_Thumbnail {
231
  $CHANNEL = 3;
232
  break;
233
  case 'WEBP':
234
- $channel = $imageInfo['bits'];
235
  break;
236
  }
237
  $MB = 1048576; // number of bytes in 1M
@@ -854,7 +854,11 @@ class ngg_Thumbnail {
854
  * @param int $wmSize
855
  * @param int $wmOpaque
856
  */
857
- function watermarkCreateText($color = '000000',$wmFont, $wmSize = 10, $wmOpaque = 90 ){
 
 
 
 
858
  // set font path
859
  $wmFontPath = NGGALLERY_ABSPATH."fonts/".$wmFont;
860
  if ( !is_readable($wmFontPath))
231
  $CHANNEL = 3;
232
  break;
233
  case 'WEBP':
234
+ $CHANNEL = $imageInfo['bits'];
235
  break;
236
  }
237
  $MB = 1048576; // number of bytes in 1M
854
  * @param int $wmSize
855
  * @param int $wmOpaque
856
  */
857
+ function watermarkCreateText($color, $wmFont, $wmSize = 10, $wmOpaque = 90)
858
+ {
859
+ if (!$color)
860
+ $color = '000000';
861
+
862
  // set font path
863
  $wmFontPath = NGGALLERY_ABSPATH."fonts/".$wmFont;
864
  if ( !is_readable($wmFontPath))
products/photocrati_nextgen/modules/ngglegacy/lib/meta.php CHANGED
@@ -507,21 +507,22 @@ class nggMeta{
507
  * Return the Timestamp from the image , if possible it's read from exif data
508
  * @return string
509
  */
510
- function get_date_time() {
511
-
512
- $date = time();
513
-
514
  $date = $this->exif_date2ts($this->get_META('created_timestamp'));
515
- if (!$date) {
 
516
  $image_path = C_Gallery_Storage::get_instance()->get_backup_abspath($this->image);
517
- $date = @filectime($image_path);
 
518
  }
519
 
520
- // Failback
521
- if (!$date) $date = time();
 
522
 
523
  // Return the MySQL format
524
- $date_time = date( 'Y-m-d H:i:s', $date);
525
 
526
  return $date_time;
527
  }
507
  * Return the Timestamp from the image , if possible it's read from exif data
508
  * @return string
509
  */
510
+ function get_date_time()
511
+ {
 
 
512
  $date = $this->exif_date2ts($this->get_META('created_timestamp'));
513
+ if (!$date)
514
+ {
515
  $image_path = C_Gallery_Storage::get_instance()->get_backup_abspath($this->image);
516
+ if (file_exists($image_path))
517
+ $date = filectime($image_path);
518
  }
519
 
520
+ // Fallback
521
+ if (!$date)
522
+ $date = time();
523
 
524
  // Return the MySQL format
525
+ $date_time = date('Y-m-d H:i:s', $date);
526
 
527
  return $date_time;
528
  }
products/photocrati_nextgen/modules/ngglegacy/lib/tags.php CHANGED
@@ -387,13 +387,14 @@ class nggTags {
387
  * @param string $element
388
  * @return null|string
389
  */
390
- if (!function_exists('nggtags_delete_empty_element')) {
391
- function nggtags_delete_empty_element( &$element ) {
 
 
392
  $element = stripslashes($element);
393
  $element = trim($element);
394
- if ( !empty($element) ) {
395
  return $element;
396
- }
397
  return NULL;
398
  }
399
  }
387
  * @param string $element
388
  * @return null|string
389
  */
390
+ if (!function_exists('nggtags_delete_empty_element'))
391
+ {
392
+ function nggtags_delete_empty_element($element)
393
+ {
394
  $element = stripslashes($element);
395
  $element = trim($element);
396
+ if (!empty($element))
397
  return $element;
 
398
  return NULL;
399
  }
400
  }
products/photocrati_nextgen/modules/router/package.module.router.php CHANGED
@@ -748,10 +748,12 @@ class Mixin_Routing_App extends Mixin
748
  $retval = $this->object->recursive_stripslashes($_REQUEST[$key]);
749
  }
750
  if (!$found && isset($_SERVER['REQUEST_URI'])) {
751
- $params = array();
752
- parse_str(@parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY), $params);
 
 
 
753
  if (isset($params[$key])) {
754
- $found = TRUE;
755
  $retval = $this->object->recursive_stripslashes($params[$key]);
756
  }
757
  }
748
  $retval = $this->object->recursive_stripslashes($_REQUEST[$key]);
749
  }
750
  if (!$found && isset($_SERVER['REQUEST_URI'])) {
751
+ $params = [];
752
+ $parsed = parse_url($_SERVER['REQUEST_URI'], PHP_URL_QUERY);
753
+ if (is_string($parsed)) {
754
+ parse_str($parsed, $params);
755
+ }
756
  if (isset($params[$key])) {
 
757
  $retval = $this->object->recursive_stripslashes($params[$key]);
758
  }
759
  }
products/photocrati_nextgen/modules/widget/package.module.widget.php CHANGED
@@ -289,7 +289,7 @@ class C_Widget_MediaRSS extends WP_Widget
289
  $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title'], $instance, $this->id_base);
290
  $parent->render_partial('photocrati-widget#display_mediarss', array('self' => $this, 'instance' => $instance, 'title' => $title, 'settings' => $settings, 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id));
291
  }
292
- function get_mrss_link($mrss_url, $show_icon = TRUE, $title, $text)
293
  {
294
  $out = '';
295
  if ($show_icon) {
289
  $title = apply_filters('widget_title', empty($instance['title']) ? '&nbsp;' : $instance['title'], $instance, $this->id_base);
290
  $parent->render_partial('photocrati-widget#display_mediarss', array('self' => $this, 'instance' => $instance, 'title' => $title, 'settings' => $settings, 'before_widget' => $before_widget, 'before_title' => $before_title, 'after_widget' => $after_widget, 'after_title' => $after_title, 'widget_id' => $widget_id));
291
  }
292
+ function get_mrss_link($mrss_url, $show_icon, $title, $text)
293
  {
294
  $out = '';
295
  if ($show_icon) {
readme.txt CHANGED
@@ -2,8 +2,8 @@
2
  Contributors: photocrati, imagely
3
  Tags: wordpress gallery plugin, gallery, nextgen, nextgen gallery, photo gallery, image gallery, photography, slideshow, images, photo, photo album, watermark
4
  Requires at least: 5.5.4
5
- Stable tag: 3.18
6
- Tested up to: 5.8
7
  License: GPLv3
8
  Requires PHP: 5.6
9
 
@@ -179,6 +179,12 @@ For more information, feel free to visit the official website for the NextGEN Ga
179
 
180
  == Changelog ==
181
 
 
 
 
 
 
 
182
  = V3.18 - 12.08.2021
183
  * NEW: Added a constant "NGG_DISABLE_SHORTCODE_MANAGER" to disable content protection workarounds that can be a source of incompatibility itself.
184
  * NEW: Added notice to users that ctypes methods are required by NextGEN Gallery.
2
  Contributors: photocrati, imagely
3
  Tags: wordpress gallery plugin, gallery, nextgen, nextgen gallery, photo gallery, image gallery, photography, slideshow, images, photo, photo album, watermark
4
  Requires at least: 5.5.4
5
+ Stable tag: 3.21
6
+ Tested up to: 5.9
7
  License: GPLv3
8
  Requires PHP: 5.6
9
 
179
 
180
  == Changelog ==
181
 
182
+ = V3.21 - 01.19.2022
183
+ * NEW: Introducing constant NGG_DISABLE_PHOTOCRATI_CACHE_TRACKER which tracks all NGG transients when using an external object cache.
184
+ * NEW: Adding an option to separate generated images with dashes instead of underscores for better SEO.
185
+ * Changed: Removed the "Custom styles" feature which was deprecated in December of 2020.
186
+ * Fixed: PHP 8.1 warnings of deprecations.
187
+
188
  = V3.18 - 12.08.2021
189
  * NEW: Added a constant "NGG_DISABLE_SHORTCODE_MANAGER" to disable content protection workarounds that can be a source of incompatibility itself.
190
  * NEW: Added notice to users that ctypes methods are required by NextGEN Gallery.
vendor/autoload.php CHANGED
@@ -4,4 +4,4 @@
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
- return ComposerAutoloaderInit212c2ca75876deef39604c1b85445473::getLoader();
4
 
5
  require_once __DIR__ . '/composer/autoload_real.php';
6
 
7
+ return ComposerAutoloaderInit0deaf5c74c7fce86e30da1f486096a6b::getLoader();
vendor/composer/ClassLoader.php CHANGED
@@ -149,7 +149,7 @@ class ClassLoader
149
 
150
  /**
151
  * @return string[] Array of classname => path
152
- * @psalm-var array<string, string>
153
  */
154
  public function getClassMap()
155
  {
149
 
150
  /**
151
  * @return string[] Array of classname => path
152
+ * @psalm-return array<string, string>
153
  */
154
  public function getClassMap()
155
  {
vendor/composer/autoload_files.php CHANGED
@@ -6,6 +6,6 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
- '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
10
  'a5dbe7df96665c0b6c16ae8d91231502' => $vendorDir . '/imagely/pope-framework/lib/autoload.php',
 
11
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  'a5dbe7df96665c0b6c16ae8d91231502' => $vendorDir . '/imagely/pope-framework/lib/autoload.php',
10
+ '2cffec82183ee1cea088009cef9a6fc3' => $vendorDir . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
11
  );
vendor/composer/autoload_real.php CHANGED
@@ -2,7 +2,7 @@
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
- class ComposerAutoloaderInit212c2ca75876deef39604c1b85445473
6
  {
7
  private static $loader;
8
 
@@ -24,15 +24,15 @@ class ComposerAutoloaderInit212c2ca75876deef39604c1b85445473
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
- spl_autoload_register(array('ComposerAutoloaderInit212c2ca75876deef39604c1b85445473', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
- spl_autoload_unregister(array('ComposerAutoloaderInit212c2ca75876deef39604c1b85445473', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
- call_user_func(\Composer\Autoload\ComposerStaticInit212c2ca75876deef39604c1b85445473::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
@@ -53,23 +53,28 @@ class ComposerAutoloaderInit212c2ca75876deef39604c1b85445473
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
- $includeFiles = Composer\Autoload\ComposerStaticInit212c2ca75876deef39604c1b85445473::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
- composerRequire212c2ca75876deef39604c1b85445473($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
- function composerRequire212c2ca75876deef39604c1b85445473($fileIdentifier, $file)
 
 
 
 
 
69
  {
70
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
71
- require $file;
72
-
73
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
 
 
74
  }
75
  }
2
 
3
  // autoload_real.php @generated by Composer
4
 
5
+ class ComposerAutoloaderInit0deaf5c74c7fce86e30da1f486096a6b
6
  {
7
  private static $loader;
8
 
24
 
25
  require __DIR__ . '/platform_check.php';
26
 
27
+ spl_autoload_register(array('ComposerAutoloaderInit0deaf5c74c7fce86e30da1f486096a6b', 'loadClassLoader'), true, true);
28
  self::$loader = $loader = new \Composer\Autoload\ClassLoader(\dirname(\dirname(__FILE__)));
29
+ spl_autoload_unregister(array('ComposerAutoloaderInit0deaf5c74c7fce86e30da1f486096a6b', 'loadClassLoader'));
30
 
31
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
32
  if ($useStaticLoader) {
33
  require __DIR__ . '/autoload_static.php';
34
 
35
+ call_user_func(\Composer\Autoload\ComposerStaticInit0deaf5c74c7fce86e30da1f486096a6b::getInitializer($loader));
36
  } else {
37
  $map = require __DIR__ . '/autoload_namespaces.php';
38
  foreach ($map as $namespace => $path) {
53
  $loader->register(true);
54
 
55
  if ($useStaticLoader) {
56
+ $includeFiles = Composer\Autoload\ComposerStaticInit0deaf5c74c7fce86e30da1f486096a6b::$files;
57
  } else {
58
  $includeFiles = require __DIR__ . '/autoload_files.php';
59
  }
60
  foreach ($includeFiles as $fileIdentifier => $file) {
61
+ composerRequire0deaf5c74c7fce86e30da1f486096a6b($fileIdentifier, $file);
62
  }
63
 
64
  return $loader;
65
  }
66
  }
67
 
68
+ /**
69
+ * @param string $fileIdentifier
70
+ * @param string $file
71
+ * @return void
72
+ */
73
+ function composerRequire0deaf5c74c7fce86e30da1f486096a6b($fileIdentifier, $file)
74
  {
75
  if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
 
 
76
  $GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
77
+
78
+ require $file;
79
  }
80
  }
vendor/composer/autoload_static.php CHANGED
@@ -4,11 +4,11 @@
4
 
5
  namespace Composer\Autoload;
6
 
7
- class ComposerStaticInit212c2ca75876deef39604c1b85445473
8
  {
9
  public static $files = array (
10
- '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
11
  'a5dbe7df96665c0b6c16ae8d91231502' => __DIR__ . '/..' . '/imagely/pope-framework/lib/autoload.php',
 
12
  );
13
 
14
  public static $prefixesPsr0 = array (
@@ -28,8 +28,8 @@ class ComposerStaticInit212c2ca75876deef39604c1b85445473
28
  public static function getInitializer(ClassLoader $loader)
29
  {
30
  return \Closure::bind(function () use ($loader) {
31
- $loader->prefixesPsr0 = ComposerStaticInit212c2ca75876deef39604c1b85445473::$prefixesPsr0;
32
- $loader->classMap = ComposerStaticInit212c2ca75876deef39604c1b85445473::$classMap;
33
 
34
  }, null, ClassLoader::class);
35
  }
4
 
5
  namespace Composer\Autoload;
6
 
7
+ class ComposerStaticInit0deaf5c74c7fce86e30da1f486096a6b
8
  {
9
  public static $files = array (
 
10
  'a5dbe7df96665c0b6c16ae8d91231502' => __DIR__ . '/..' . '/imagely/pope-framework/lib/autoload.php',
11
+ '2cffec82183ee1cea088009cef9a6fc3' => __DIR__ . '/..' . '/ezyang/htmlpurifier/library/HTMLPurifier.composer.php',
12
  );
13
 
14
  public static $prefixesPsr0 = array (
28
  public static function getInitializer(ClassLoader $loader)
29
  {
30
  return \Closure::bind(function () use ($loader) {
31
+ $loader->prefixesPsr0 = ComposerStaticInit0deaf5c74c7fce86e30da1f486096a6b::$prefixesPsr0;
32
+ $loader->classMap = ComposerStaticInit0deaf5c74c7fce86e30da1f486096a6b::$classMap;
33
 
34
  }, null, ClassLoader::class);
35
  }
vendor/composer/installed.json CHANGED
@@ -2,17 +2,17 @@
2
  "packages": [
3
  {
4
  "name": "ezyang/htmlpurifier",
5
- "version": "v4.13.0",
6
- "version_normalized": "4.13.0.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/ezyang/htmlpurifier.git",
10
- "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75"
11
  },
12
  "dist": {
13
  "type": "zip",
14
- "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
15
- "reference": "08e27c97e4c6ed02f37c5b2b20488046c8d90d75",
16
  "shasum": "",
17
  "mirrors": [
18
  {
@@ -24,10 +24,7 @@
24
  "require": {
25
  "php": ">=5.2"
26
  },
27
- "require-dev": {
28
- "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
29
- },
30
- "time": "2020-06-29T00:56:53+00:00",
31
  "type": "library",
32
  "installation-source": "dist",
33
  "autoload": {
@@ -57,6 +54,10 @@
57
  "keywords": [
58
  "html"
59
  ],
 
 
 
 
60
  "install-path": "../ezyang/htmlpurifier"
61
  },
62
  {
2
  "packages": [
3
  {
4
  "name": "ezyang/htmlpurifier",
5
+ "version": "v4.14.0",
6
+ "version_normalized": "4.14.0.0",
7
  "source": {
8
  "type": "git",
9
  "url": "https://github.com/ezyang/htmlpurifier.git",
10
+ "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75"
11
  },
12
  "dist": {
13
  "type": "zip",
14
+ "url": "https://api.github.com/repos/ezyang/htmlpurifier/zipball/12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
15
+ "reference": "12ab42bd6e742c70c0a52f7b82477fcd44e64b75",
16
  "shasum": "",
17
  "mirrors": [
18
  {
24
  "require": {
25
  "php": ">=5.2"
26
  },
27
+ "time": "2021-12-25T01:21:49+00:00",
 
 
 
28
  "type": "library",
29
  "installation-source": "dist",
30
  "autoload": {
54
  "keywords": [
55
  "html"
56
  ],
57
+ "support": {
58
+ "issues": "https://github.com/ezyang/htmlpurifier/issues",
59
+ "source": "https://github.com/ezyang/htmlpurifier/tree/v4.14.0"
60
+ },
61
  "install-path": "../ezyang/htmlpurifier"
62
  },
63
  {
vendor/composer/installed.php CHANGED
@@ -11,12 +11,12 @@
11
  ),
12
  'versions' => array(
13
  'ezyang/htmlpurifier' => array(
14
- 'pretty_version' => 'v4.13.0',
15
- 'version' => '4.13.0.0',
16
  'type' => 'library',
17
  'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
18
  'aliases' => array(),
19
- 'reference' => '08e27c97e4c6ed02f37c5b2b20488046c8d90d75',
20
  'dev_requirement' => false,
21
  ),
22
  'imagely/nextgen-gallery' => array(
11
  ),
12
  'versions' => array(
13
  'ezyang/htmlpurifier' => array(
14
+ 'pretty_version' => 'v4.14.0',
15
+ 'version' => '4.14.0.0',
16
  'type' => 'library',
17
  'install_path' => __DIR__ . '/../ezyang/htmlpurifier',
18
  'aliases' => array(),
19
+ 'reference' => '12ab42bd6e742c70c0a52f7b82477fcd44e64b75',
20
  'dev_requirement' => false,
21
  ),
22
  'imagely/nextgen-gallery' => array(
vendor/ezyang/htmlpurifier/README.md CHANGED
@@ -1,4 +1,4 @@
1
- HTML Purifier [![Build Status](https://secure.travis-ci.org/ezyang/htmlpurifier.svg?branch=master)](http://travis-ci.org/ezyang/htmlpurifier)
2
  =============
3
 
4
  HTML Purifier is an HTML filtering solution that uses a unique combination
1
+ HTML Purifier [![Build Status](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/ezyang/htmlpurifier/actions/workflows/ci.yml)
2
  =============
3
 
4
  HTML Purifier is an HTML filtering solution that uses a unique combination
vendor/ezyang/htmlpurifier/VERSION CHANGED
@@ -1 +1 @@
1
- 4.13.0
1
+ 4.14.0
vendor/ezyang/htmlpurifier/composer.json CHANGED
@@ -15,9 +15,6 @@
15
  "require": {
16
  "php": ">=5.2"
17
  },
18
- "require-dev": {
19
- "simpletest/simpletest": "dev-master#72de02a7b80c6bb8864ef9bf66d41d2f58f826bd"
20
- },
21
  "autoload": {
22
  "psr-0": { "HTMLPurifier": "library/" },
23
  "files": ["library/HTMLPurifier.composer.php"],
15
  "require": {
16
  "php": ">=5.2"
17
  },
 
 
 
18
  "autoload": {
19
  "psr-0": { "HTMLPurifier": "library/" },
20
  "files": ["library/HTMLPurifier.composer.php"],
vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload-legacy.php CHANGED
@@ -4,12 +4,11 @@
4
  * @file
5
  * Legacy autoloader for systems lacking spl_autoload_register
6
  *
7
- * Must be separate to prevent deprecation warning on PHP 7.2
8
  */
9
 
10
- function __autoload($class)
11
  {
12
- return HTMLPurifier_Bootstrap::autoload($class);
13
- }
14
 
15
  // vim: et sw=4 sts=4
4
  * @file
5
  * Legacy autoloader for systems lacking spl_autoload_register
6
  *
 
7
  */
8
 
9
+ spl_autoload_register(function($class)
10
  {
11
+ return HTMLPurifier_Bootstrap::autoload($class);
12
+ });
13
 
14
  // vim: et sw=4 sts=4
vendor/ezyang/htmlpurifier/library/HTMLPurifier.autoload.php CHANGED
@@ -17,6 +17,7 @@ if (function_exists('spl_autoload_register') && function_exists('spl_autoload_un
17
  require dirname(__FILE__) . '/HTMLPurifier.autoload-legacy.php';
18
  }
19
 
 
20
  if (ini_get('zend.ze1_compatibility_mode')) {
21
  trigger_error("HTML Purifier is not compatible with zend.ze1_compatibility_mode; please turn it off", E_USER_ERROR);
22
  }
17
  require dirname(__FILE__) . '/HTMLPurifier.autoload-legacy.php';
18
  }
19
 
20
+ // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.zend_ze1_compatibility_modeRemoved
21
  if (ini_get('zend.ze1_compatibility_mode')) {
22
  trigger_error("HTML Purifier is not compatible with zend.ze1_compatibility_mode; please turn it off", E_USER_ERROR);
23
  }
vendor/ezyang/htmlpurifier/library/HTMLPurifier.includes.php CHANGED
@@ -7,7 +7,7 @@
7
  * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
8
  * FILE, changes will be overwritten the next time the script is run.
9
  *
10
- * @version 4.13.0
11
  *
12
  * @warning
13
  * You must *not* include any other HTML Purifier files before this file,
7
  * primary concern and you are using an opcode cache. PLEASE DO NOT EDIT THIS
8
  * FILE, changes will be overwritten the next time the script is run.
9
  *
10
+ * @version 4.14.0
11
  *
12
  * @warning
13
  * You must *not* include any other HTML Purifier files before this file,
vendor/ezyang/htmlpurifier/library/HTMLPurifier.php CHANGED
@@ -19,7 +19,7 @@
19
  */
20
 
21
  /*
22
- HTML Purifier 4.13.0 - Standards Compliant HTML Filtering
23
  Copyright (C) 2006-2008 Edward Z. Yang
24
 
25
  This library is free software; you can redistribute it and/or
@@ -58,12 +58,12 @@ class HTMLPurifier
58
  * Version of HTML Purifier.
59
  * @type string
60
  */
61
- public $version = '4.13.0';
62
 
63
  /**
64
  * Constant with version of HTML Purifier.
65
  */
66
- const VERSION = '4.13.0';
67
 
68
  /**
69
  * Global configuration object.
19
  */
20
 
21
  /*
22
+ HTML Purifier 4.14.0 - Standards Compliant HTML Filtering
23
  Copyright (C) 2006-2008 Edward Z. Yang
24
 
25
  This library is free software; you can redistribute it and/or
58
  * Version of HTML Purifier.
59
  * @type string
60
  */
61
+ public $version = '4.14.0';
62
 
63
  /**
64
  * Constant with version of HTML Purifier.
65
  */
66
+ const VERSION = '4.14.0';
67
 
68
  /**
69
  * Global configuration object.
vendor/ezyang/htmlpurifier/library/HTMLPurifier/AttrDef/CSS/Background.php CHANGED
@@ -25,6 +25,7 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
25
  $this->info['background-repeat'] = $def->info['background-repeat'];
26
  $this->info['background-attachment'] = $def->info['background-attachment'];
27
  $this->info['background-position'] = $def->info['background-position'];
 
28
  }
29
 
30
  /**
@@ -53,6 +54,7 @@ class HTMLPurifier_AttrDef_CSS_Background extends HTMLPurifier_AttrDef
53
  $caught['repeat'] = false;
54
  $caught['attachment'] = false;
55
  $caught['position'] = false;
 
56
 
57
  $i = 0; // number of catches
58
 
25
  $this->info['background-repeat'] = $def->info['background-repeat'];
26
  $this->info['background-attachment'] = $def->info['background-attachment'];
27
  $this->info['background-position'] = $def->info['background-position'];
28
+ $this->info['background-size'] = $def->info['background-size'];
29
  }
30
 
31
  /**
54
  $caught['repeat'] = false;
55
  $caught['attachment'] = false;
56
  $caught['position'] = false;
57
+ $caught['size'] = false;
58
 
59
  $i = 0; // number of catches
60
 
vendor/ezyang/htmlpurifier/library/HTMLPurifier/CSSDefinition.php CHANGED
@@ -109,6 +109,22 @@ class HTMLPurifier_CSSDefinition extends HTMLPurifier_Definition
109
  );
110
  $this->info['background-position'] = new HTMLPurifier_AttrDef_CSS_BackgroundPosition();
111
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  $border_color =
113
  $this->info['border-top-color'] =
114
  $this->info['border-bottom-color'] =
109
  );
110
  $this->info['background-position'] = new HTMLPurifier_AttrDef_CSS_BackgroundPosition();
111
 
112
+ $this->info['background-size'] = new HTMLPurifier_AttrDef_CSS_Composite(
113
+ array(
114
+ new HTMLPurifier_AttrDef_Enum(
115
+ array(
116
+ 'auto',
117
+ 'cover',
118
+ 'contain',
119
+ 'initial',
120
+ 'inherit',
121
+ )
122
+ ),
123
+ new HTMLPurifier_AttrDef_CSS_Percentage(),
124
+ new HTMLPurifier_AttrDef_CSS_Length()
125
+ )
126
+ );
127
+
128
  $border_color =
129
  $this->info['border-top-color'] =
130
  $this->info['border-bottom-color'] =
vendor/ezyang/htmlpurifier/library/HTMLPurifier/ChildDef/Table.php CHANGED
@@ -164,7 +164,7 @@ class HTMLPurifier_ChildDef_Table extends HTMLPurifier_ChildDef
164
  }
165
  }
166
 
167
- if (empty($content)) {
168
  return false;
169
  }
170
 
164
  }
165
  }
166
 
167
+ if (empty($content) && $thead === false && $tfoot === false) {
168
  return false;
169
  }
170
 
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Config.php CHANGED
@@ -21,7 +21,7 @@ class HTMLPurifier_Config
21
  * HTML Purifier's version
22
  * @type string
23
  */
24
- public $version = '4.13.0';
25
 
26
  /**
27
  * Whether or not to automatically finalize
@@ -803,7 +803,7 @@ class HTMLPurifier_Config
803
  if ($index !== false) {
804
  $array = (isset($array[$index]) && is_array($array[$index])) ? $array[$index] : array();
805
  }
806
- $mq = $mq_fix && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc();
807
 
808
  $allowed = HTMLPurifier_Config::getAllowedDirectivesForForm($allowed, $schema);
809
  $ret = array();
21
  * HTML Purifier's version
22
  * @type string
23
  */
24
+ public $version = '4.14.0';
25
 
26
  /**
27
  * Whether or not to automatically finalize
803
  if ($index !== false) {
804
  $array = (isset($array[$index]) && is_array($array[$index])) ? $array[$index] : array();
805
  }
806
+ $mq = $mq_fix && version_compare(PHP_VERSION, '7.4.0', '<') && function_exists('get_magic_quotes_gpc') && get_magic_quotes_gpc();
807
 
808
  $allowed = HTMLPurifier_Config::getAllowedDirectivesForForm($allowed, $schema);
809
  $ret = array();
vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule.php CHANGED
@@ -257,8 +257,9 @@ class HTMLPurifier_HTMLModule
257
  */
258
  public function makeLookup($list)
259
  {
 
260
  if (is_string($list)) {
261
- $list = func_get_args();
262
  }
263
  $ret = array();
264
  foreach ($list as $value) {
257
  */
258
  public function makeLookup($list)
259
  {
260
+ $args = func_get_args();
261
  if (is_string($list)) {
262
+ $list = $args;
263
  }
264
  $ret = array();
265
  foreach ($list as $value) {
vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy.php CHANGED
@@ -146,10 +146,7 @@ class HTMLPurifier_HTMLModule_Tidy extends HTMLPurifier_HTMLModule
146
  $type = "info_$type";
147
  $e = $this;
148
  }
149
- // PHP does some weird parsing when I do
150
- // $e->$type[$attr], so I have to assign a ref.
151
- $f =& $e->$type;
152
- $f[$attr] = $fix;
153
  break;
154
  case 'tag_transform':
155
  $this->info_tag_transform[$params['element']] = $fix;
146
  $type = "info_$type";
147
  $e = $this;
148
  }
149
+ $e->{$type}[$attr] = $fix;
 
 
 
150
  break;
151
  case 'tag_transform':
152
  $this->info_tag_transform[$params['element']] = $fix;
vendor/ezyang/htmlpurifier/library/HTMLPurifier/HTMLModule/Tidy/XHTMLAndHTML4.php CHANGED
@@ -168,9 +168,11 @@ class HTMLPurifier_HTMLModule_Tidy_XHTMLAndHTML4 extends HTMLPurifier_HTMLModule
168
  // @vspace for img ------------------------------------------------
169
  $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace');
170
 
171
- // @width for hr, td, th ------------------------------------------
 
172
  $r['td@width'] =
173
  $r['th@width'] =
 
174
  $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width');
175
 
176
  return $r;
168
  // @vspace for img ------------------------------------------------
169
  $r['img@vspace'] = new HTMLPurifier_AttrTransform_ImgSpace('vspace');
170
 
171
+ // @width for table, hr, td, th, col ------------------------------------------
172
+ $r['table@width'] =
173
  $r['td@width'] =
174
  $r['th@width'] =
175
+ $r['col@width'] =
176
  $r['hr@width'] = new HTMLPurifier_AttrTransform_Length('width');
177
 
178
  return $r;
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Injector/Linkify.php CHANGED
@@ -40,6 +40,9 @@ class HTMLPurifier_Injector_Linkify extends HTMLPurifier_Injector
40
  '/\\b((?:[a-z][\\w\\-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\))+(?:\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'".,<>?\x{00ab}\x{00bb}\x{201c}\x{201d}\x{2018}\x{2019}]))/iu',
41
  $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
42
 
 
 
 
43
 
44
  $token = array();
45
 
40
  '/\\b((?:[a-z][\\w\\-]+:(?:\\/{1,3}|[a-z0-9%])|www\\d{0,3}[.]|[a-z0-9.\\-]+[.][a-z]{2,4}\\/)(?:[^\\s()<>]|\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\))+(?:\\((?:[^\\s()<>]|(?:\\([^\\s()<>]+\\)))*\\)|[^\\s`!()\\[\\]{};:\'".,<>?\x{00ab}\x{00bb}\x{201c}\x{201d}\x{2018}\x{2019}]))/iu',
41
  $token->data, -1, PREG_SPLIT_DELIM_CAPTURE);
42
 
43
+ if ($bits === false) {
44
+ return;
45
+ }
46
 
47
  $token = array();
48
 
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.min.css DELETED
@@ -1 +0,0 @@
1
- .hp-config tbody th{text-align:right;padding-right:.5em}.hp-config .controls,.hp-config .namespace th{text-align:center}.hp-config .namespace,.hp-config thead{background:#3C578C;color:#FFF}.hp-config .verbose{display:none}
 
vendor/ezyang/htmlpurifier/library/HTMLPurifier/Printer/ConfigForm.min.js DELETED
@@ -1 +0,0 @@
1
- "use strict";function toggleWriteability(t,e){document.getElementById(t).disabled=e}