exiftool-vendored.exe 12.78.0 → 12.82.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (53) hide show
  1. package/bin/exiftool_files/Changes +80 -3
  2. package/bin/exiftool_files/README +3 -2
  3. package/bin/exiftool_files/config_files/acdsee.config +37 -57
  4. package/bin/exiftool_files/config_files/example.config +6 -0
  5. package/bin/exiftool_files/exiftool.pl +70 -26
  6. package/bin/exiftool_files/lib/Image/ExifTool/BuildTagLookup.pm +44 -31
  7. package/bin/exiftool_files/lib/Image/ExifTool/CanonVRD.pm +2 -2
  8. package/bin/exiftool_files/lib/Image/ExifTool/FujiFilm.pm +21 -5
  9. package/bin/exiftool_files/lib/Image/ExifTool/GM.pm +543 -0
  10. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/cs.pm +978 -0
  11. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/de.pm +1975 -0
  12. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_ca.pm +44 -0
  13. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/en_gb.pm +124 -0
  14. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/es.pm +2921 -0
  15. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fi.pm +1116 -0
  16. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/fr.pm +3171 -0
  17. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/it.pm +2750 -0
  18. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ja.pm +10256 -0
  19. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ko.pm +4499 -0
  20. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/nl.pm +1270 -0
  21. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/pl.pm +3019 -0
  22. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/ru.pm +18220 -0
  23. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sk.pm +441 -0
  24. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/sv.pm +714 -0
  25. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/tr.pm +452 -0
  26. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_cn.pm +2225 -0
  27. package/bin/exiftool_files/lib/Image/ExifTool/GeoLang/zh_tw.pm +72 -0
  28. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.dat +0 -0
  29. package/bin/exiftool_files/lib/Image/ExifTool/Geolocation.pm +867 -146
  30. package/bin/exiftool_files/lib/Image/ExifTool/Geotag.pm +13 -1
  31. package/bin/exiftool_files/lib/Image/ExifTool/JSON.pm +7 -2
  32. package/bin/exiftool_files/lib/Image/ExifTool/M2TS.pm +32 -4
  33. package/bin/exiftool_files/lib/Image/ExifTool/MakerNotes.pm +2 -2
  34. package/bin/exiftool_files/lib/Image/ExifTool/Microsoft.pm +1 -1
  35. package/bin/exiftool_files/lib/Image/ExifTool/Nikon.pm +331 -22
  36. package/bin/exiftool_files/lib/Image/ExifTool/NikonCustom.pm +55 -1
  37. package/bin/exiftool_files/lib/Image/ExifTool/Olympus.pm +1 -0
  38. package/bin/exiftool_files/lib/Image/ExifTool/OpenEXR.pm +37 -19
  39. package/bin/exiftool_files/lib/Image/ExifTool/PNG.pm +3 -3
  40. package/bin/exiftool_files/lib/Image/ExifTool/QuickTime.pm +40 -24
  41. package/bin/exiftool_files/lib/Image/ExifTool/QuickTimeStream.pl +61 -30
  42. package/bin/exiftool_files/lib/Image/ExifTool/README +8 -5
  43. package/bin/exiftool_files/lib/Image/ExifTool/Sony.pm +1 -1
  44. package/bin/exiftool_files/lib/Image/ExifTool/TagLookup.pm +4820 -4750
  45. package/bin/exiftool_files/lib/Image/ExifTool/TagNames.pod +1000 -615
  46. package/bin/exiftool_files/lib/Image/ExifTool/WriteQuickTime.pl +31 -8
  47. package/bin/exiftool_files/lib/Image/ExifTool/WriteXMP.pl +1 -1
  48. package/bin/exiftool_files/lib/Image/ExifTool/Writer.pl +58 -2
  49. package/bin/exiftool_files/lib/Image/ExifTool/XMP.pm +20 -3
  50. package/bin/exiftool_files/lib/Image/ExifTool/XMP2.pl +64 -0
  51. package/bin/exiftool_files/lib/Image/ExifTool.pm +210 -97
  52. package/bin/exiftool_files/lib/Image/ExifTool.pod +44 -18
  53. package/package.json +3 -3
@@ -148,6 +148,7 @@ sub PrintInvGPSCoordinates($)
148
148
  $v[2] = Image::ExifTool::ToFloat($v[2]) * ($below ? -1 : 1) if @v == 3;
149
149
  return "@v";
150
150
  }
151
+ return $val if $val =~ /^([-+]?\d+(\.\d*)?)\s+([-+]?\d+(\.\d*)?)$/; # already 2 floats?
151
152
  return $val if $val =~ /^([-+]\d+(\.\d*)?){2,3}(CRS.*)?\/?$/; # already in ISO6709 format?
152
153
  return undef;
153
154
  }
@@ -784,6 +785,7 @@ sub WriteQuickTime($$$)
784
785
  $et or return 1; # allow dummy access to autoload this package
785
786
  my ($mdat, @mdat, @mdatEdit, $edit, $track, $outBuff, $co, $term, $delCount);
786
787
  my (%langTags, $canCreate, $delGrp, %boxPos, %didDir, $writeLast, $err, $atomCount);
788
+ my ($tag, $lastTag, $errStr);
787
789
  my $outfile = $$dirInfo{OutFile} || return 0;
788
790
  my $raf = $$dirInfo{RAF}; # (will be null for lower-level atoms)
789
791
  my $dataPt = $$dirInfo{DataPt}; # (will be null for top-level atoms)
@@ -856,7 +858,10 @@ sub WriteQuickTime($$$)
856
858
  }
857
859
  $atomCount = $$tagTablePtr{VARS}{ATOM_COUNT} if $$tagTablePtr{VARS};
858
860
 
861
+ $tag = $lastTag = '';
862
+
859
863
  for (;;) { # loop through all atoms at this level
864
+ $lastTag = $tag if $$tagTablePtr{$tag}; # keep track of last known tag
860
865
  if (defined $atomCount and --$atomCount < 0 and $dataPt) {
861
866
  # stop processing now and just copy the rest of the atom
862
867
  Write($outfile, substr($$dataPt, $raf->Tell())) or $rtnVal=$rtnErr, $err=1;
@@ -875,15 +880,15 @@ sub WriteQuickTime($$$)
875
880
  last;
876
881
  }
877
882
  my $size = Get32u(\$hdr, 0) - 8; # (atom size without 8-byte header)
878
- my $tag = substr($hdr, 4, 4);
883
+ $tag = substr($hdr, 4, 4);
879
884
  if ($size == -7) {
880
885
  # read the extended size
881
- $raf->Read($buff, 8) == 8 or $et->Error('Truncated extended atom'), last;
886
+ $raf->Read($buff, 8) == 8 or $errStr = 'Truncated extended atom', last;
882
887
  $hdr .= $buff;
883
888
  my ($hi, $lo) = unpack('NN', $buff);
884
889
  if ($hi or $lo > 0x7fffffff) {
885
890
  if ($hi > 0x7fffffff) {
886
- $et->Error('Invalid atom size');
891
+ $errStr = 'Invalid atom size';
887
892
  last;
888
893
  } elsif (not $et->Options('LargeFileSupport')) {
889
894
  $et->Error('End of processing at large atom (LargeFileSupport not enabled)');
@@ -891,7 +896,7 @@ sub WriteQuickTime($$$)
891
896
  }
892
897
  }
893
898
  $size = $hi * 4294967296 + $lo - 16;
894
- $size < 0 and $et->Error('Invalid extended atom size'), last;
899
+ $size < 0 and $errStr = 'Invalid extended atom size', last;
895
900
  } elsif ($size == -8) {
896
901
  if ($dataPt) {
897
902
  last if $$dirInfo{DirName} eq 'CanonCNTH'; # (this is normal for Canon CNTH atom)
@@ -907,7 +912,7 @@ sub WriteQuickTime($$$)
907
912
  }
908
913
  last;
909
914
  } elsif ($size < 0) {
910
- $et->Error('Invalid atom size');
915
+ $errStr = 'Invalid atom size';
911
916
  last;
912
917
  }
913
918
 
@@ -951,11 +956,11 @@ sub WriteQuickTime($$$)
951
956
  $tag = PrintableTagID($tag,3);
952
957
  if ($size > $maxReadLen and $got == 0x10000) {
953
958
  my $mb = int($size / 0x100000 + 0.5);
954
- $et->Error("'${tag}' atom is too large for rewriting ($mb MB)");
959
+ $errStr = "'${tag}' atom is too large for rewriting ($mb MB)";
955
960
  } else {
956
- $et->Error("Truncated '${tag}' atom");
961
+ $errStr = "Truncated '${tag}' atom";
957
962
  }
958
- return $rtnVal;
963
+ last;
959
964
  }
960
965
  }
961
966
  # save the handler type for this track
@@ -1445,6 +1450,24 @@ sub WriteQuickTime($$$)
1445
1450
  Write($outfile, $hdr, $buff) or $rtnVal=$rtnErr, $err=1, last;
1446
1451
  }
1447
1452
  }
1453
+ # ($errStr is set if there was an error that could possibly be due to an unknown trailer)
1454
+ if ($errStr) {
1455
+ if (($lastTag eq 'mdat' or $lastTag eq 'moov') and not $dataPt and (not $$tagTablePtr{$tag} or
1456
+ ref $$tagTablePtr{$tag} eq 'HASH' and $$tagTablePtr{$tag}{Unknown}))
1457
+ {
1458
+ my $nvTrail = $et->GetNewValueHash($Image::ExifTool::Extra{Trailer});
1459
+ if ($$et{DEL_GROUP}{Trailer} or ($nvTrail and not ($$nvTrail{Value} and $$nvTrail{Value}[0]))) {
1460
+ $errStr =~ s/ is too large.*//;
1461
+ $et->Warn('Deleted unknown trailer with ' . lcfirst($errStr));
1462
+ } else {
1463
+ $et->Warn('Unknown trailer with ' . lcfirst($errStr));
1464
+ $et->Error('Use "-trailer=" to delete unknown trailer');
1465
+ }
1466
+ } else {
1467
+ $et->Error($errStr);
1468
+ return $dataPt ? undef : 1;
1469
+ }
1470
+ }
1448
1471
  $et->VPrint(0, " [deleting $delCount $dirName tag".($delCount==1 ? '' : 's')."]\n") if $delCount;
1449
1472
 
1450
1473
  $createKeys &= ~0x01 unless $$addDirs{Keys}; # (Keys may have been written)
@@ -236,7 +236,7 @@ sub CheckXMP($$$;$)
236
236
  return 'Not a floating point number';
237
237
  }
238
238
  if ($format eq 'rational') {
239
- $$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr));
239
+ $$valPtr = join('/', Image::ExifTool::Rationalize($$valPtr,0xffffffff));
240
240
  }
241
241
  } elsif ($format eq 'integer') {
242
242
  # make sure the value is integer
@@ -1297,6 +1297,10 @@ sub SetNewValuesFromFile($$;@)
1297
1297
  Filter => $$options{Filter},
1298
1298
  FixBase => $$options{FixBase},
1299
1299
  Geolocation => $$options{Geolocation},
1300
+ GeolocAltNames => $$options{GeolocAltNames},
1301
+ GeolocFeature => $$options{GeolocFeature},
1302
+ GeolocMinPop => $$options{GeolocMinPop},
1303
+ GeolocMaxDist => $$options{GeolocMaxDist},
1300
1304
  GlobalTimeShift => $$options{GlobalTimeShift},
1301
1305
  HexTagIDs => $$options{HexTagIDs},
1302
1306
  IgnoreMinorErrors=>$$options{IgnoreMinorErrors},
@@ -1333,6 +1337,11 @@ sub SetNewValuesFromFile($$;@)
1333
1337
  XAttrTags => $$options{XAttrTags},
1334
1338
  XMPAutoConv => $$options{XMPAutoConv},
1335
1339
  );
1340
+ # reset Geolocation option if we aren't copying any geolocation tags
1341
+ if ($$options{Geolocation} and not grep /\bGeolocation/i, @setTags) {
1342
+ $self->VPrint(0, '(resetting unnecessary Geolocation option)');
1343
+ $$srcExifTool{OPTIONS}{Geolocation} = undef;
1344
+ }
1336
1345
  $$srcExifTool{GLOBAL_TIME_OFFSET} = $$self{GLOBAL_TIME_OFFSET};
1337
1346
  $$srcExifTool{ALT_EXIFTOOL} = $$self{ALT_EXIFTOOL};
1338
1347
  foreach $tag (@setTags) {
@@ -3158,8 +3167,8 @@ sub PushValue($$$;$)
3158
3167
  # Inputs: 0) ExifTool object ref, 1) string with embedded tag names,
3159
3168
  # 2) reference to list of found tags or undef to use FOUND_TAGS, 3) Options:
3160
3169
  # undef - set missing tags to ''
3161
- # 'Error' - issue minor error on missing tag (and return undef)
3162
- # 'Warn' - issue minor warning on missing tag (and return undef)
3170
+ # 'Error' - issue minor error on missing tag (and return undef if error sent)
3171
+ # 'Warn' - issue minor warning on missing tag (and return undef if warning sent)
3163
3172
  # 'Silent' - just return undef on missing tag (no errors/warnings)
3164
3173
  # Hash ref - defined to interpolate as variables in string instead of values
3165
3174
  # --> receives tag/value pairs for interpolation of the variables
@@ -3784,6 +3793,53 @@ sub GetWriteGroup1($$)
3784
3793
  return $self->GetGroup($tagInfo, 1);
3785
3794
  }
3786
3795
 
3796
+ #------------------------------------------------------------------------------
3797
+ # Get list of tags to write for Geolocate feature
3798
+ # Inputs: 0) ExifTool ref, 1) group name(s),
3799
+ # 2) 0=prefer writing City, 1=prefer writing GPS, undef=deleting tags
3800
+ # Returns: list of tags to write/delete
3801
+ sub GetGeolocateTags($$;$)
3802
+ {
3803
+ my ($self, $wantGroup, $writeGPS) = @_;
3804
+ my @grps = $wantGroup ? map lc, split(/:/, $wantGroup) : ();
3805
+ my %grps = map { $_ => $_ } @grps; # lookup for specified groups
3806
+ $grps{exif} and not $grps{gps} and $grps{gps} = 'gps', push(@grps, 'gps');
3807
+ my %tagGroups = (
3808
+ 'xmp-iptcext' => [ qw(LocationShownCity LocationShownProvinceState LocationShownCountryCode
3809
+ LocationShownCountryName LocationShownGPSLatitude LocationShownGPSLongitude) ],
3810
+ 'xmp-photoshop' => [ qw(City State Country) ],
3811
+ 'xmp-iptccore' => [ 'CountryCode' ],
3812
+ 'iptc' => [ qw(City Province-State Country-PrimaryLocationCode Country-PrimaryLocationName) ],
3813
+ 'gps' => [ qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) ],
3814
+ 'xmp-exif' => [ qw(GPSLatitude GPSLongitude) ],
3815
+ 'keys' => [ 'GPSCoordinates', 'LocationName' ],
3816
+ 'itemlist' => [ 'GPSCoordinates' ],
3817
+ 'userdata' => [ 'GPSCoordinates' ],
3818
+ # more general groups not in this lookup: XMP and QuickTime
3819
+ );
3820
+ my (@tags, $grp);
3821
+ # set specific City and GPS tags
3822
+ foreach $grp (@grps) {
3823
+ $tagGroups{$grp} and push @tags, map("$grp:$_", @{$tagGroups{$grp}});
3824
+ }
3825
+ # set default XMP City tags if necessary
3826
+ if (not $writeGPS and ($grps{xmp} or (not @tags and not $grps{quicktime}))) {
3827
+ push @tags, qw(XMP:City XMP:State XMP:CountryCode XMP:Country Keys:LocationName);
3828
+ }
3829
+ $writeGPS = 1 unless defined $writeGPS; # (delete both City and GPS)
3830
+ # set default QuickTime tag if necessary
3831
+ my $didQT = grep /Coordinates$/, @tags;
3832
+ if (($grps{quicktime} and not $didQT) or ($writeGPS and not @tags and not $grps{xmp})) {
3833
+ push @tags, 'QuickTime:GPSCoordinates';
3834
+ }
3835
+ # set default GPS tags if necessary
3836
+ if ($writeGPS) {
3837
+ push @tags, qw(XMP:GPSLatitude XMP:GPSLongitude) if $grps{xmp} and not $grps{'xmp-exif'};
3838
+ push @tags, qw(GPSLatitude GPSLongitude GPSLatitudeRef GPSLongitudeRef) if not $wantGroup;
3839
+ }
3840
+ return @tags;
3841
+ }
3842
+
3787
3843
  #------------------------------------------------------------------------------
3788
3844
  # Get new value hash for specified tagInfo/writeGroup
3789
3845
  # Inputs: 0) ExifTool object reference, 1) reference to tag info hash
@@ -50,7 +50,7 @@ use Image::ExifTool::Exif;
50
50
  use Image::ExifTool::GPS;
51
51
  require Exporter;
52
52
 
53
- $VERSION = '3.63';
53
+ $VERSION = '3.65';
54
54
  @ISA = qw(Exporter);
55
55
  @EXPORT_OK = qw(EscapeXML UnescapeXML);
56
56
 
@@ -171,6 +171,7 @@ my %xmpNS = (
171
171
  pmi => 'http://prismstandard.org/namespaces/pmi/2.2/',
172
172
  prm => 'http://prismstandard.org/namespaces/prm/3.0/',
173
173
  acdsee => 'http://ns.acdsee.com/iptc/1.0/',
174
+ 'acdsee-rs'=> 'http://ns.acdsee.com/regions/',
174
175
  digiKam => 'http://www.digikam.org/ns/1.0/',
175
176
  swf => 'http://ns.adobe.com/swf/1.0/',
176
177
  cell => 'http://developer.sonyericsson.com/cell/1.0/',
@@ -282,11 +283,12 @@ my %recognizedAttrs = (
282
283
  # NOTE: this lookup is duplicated in TagLookup.pm!!
283
284
  %specialStruct = (
284
285
  STRUCT_NAME => 1, # [optional] name of structure
285
- NAMESPACE => 1, # [mandatory] namespace prefix used for fields of this structure
286
+ NAMESPACE => 1, # [mandatory for XMP] namespace prefix used for fields of this structure
286
287
  NOTES => 1, # [optional] notes for documentation about this structure
287
288
  TYPE => 1, # [optional] rdf:type resource for struct (if used, the StructType flag
288
289
  # will be set automatically for all derived flattened tags when writing)
289
290
  GROUPS => 1, # [optional] specifies family group 2 name for the structure
291
+ SORT_ORDER => 1, # [optional] order for sorting fields in documentation
290
292
  );
291
293
  # XMP structures (each structure is similar to a tag table so we can
292
294
  # recurse through them in SetPropertyPath() as if they were tag tables)
@@ -802,6 +804,10 @@ my %sRangeMask = (
802
804
  Name => 'acdsee',
803
805
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::acdsee' },
804
806
  },
807
+ 'acdsee-rs' => {
808
+ Name => 'acdsee-rs',
809
+ SubDirectory => { TagTable => 'Image::ExifTool::XMP::ACDSeeRegions' },
810
+ },
805
811
  digiKam => {
806
812
  Name => 'digiKam',
807
813
  SubDirectory => { TagTable => 'Image::ExifTool::XMP::digiKam' },
@@ -2554,7 +2560,17 @@ my %sPantryItem = (
2554
2560
  return $val;
2555
2561
  },
2556
2562
  },
2557
- ApproximateFocusDistance => { Writable => 'rational' }, #PH (LR3)
2563
+ ApproximateFocusDistance => {
2564
+ Writable => 'rational',
2565
+ PrintConv => {
2566
+ 4294967295 => 'infinity',
2567
+ OTHER => sub {
2568
+ my ($val, $inv) = @_;
2569
+ return $val eq 'infinity' ? 4294967295 : $val if $inv;
2570
+ return $val eq 4294967295 ? 'infinity' : $val;
2571
+ },
2572
+ },
2573
+ }, #PH (LR3)
2558
2574
  # the following new in LR6 (ref forum6497)
2559
2575
  IsMergedPanorama => { Writable => 'boolean' },
2560
2576
  IsMergedHDR => { Writable => 'boolean' },
@@ -2572,6 +2588,7 @@ my %sPantryItem = (
2572
2588
  EnhanceDenoiseAlreadyApplied => { Writable => 'boolean' }, #forum14760
2573
2589
  EnhanceDenoiseVersion => { }, #forum14760 integer?
2574
2590
  EnhanceDenoiseLumaAmount => { }, #forum14760 integer?
2591
+ # FujiRatingAlreadyApplied - boolean written by LR classic 13.2 (forum15815)
2575
2592
  );
2576
2593
 
2577
2594
  # IPTC Core namespace properties (Iptc4xmpCore) (ref 4)
@@ -224,6 +224,7 @@ my %sAppInfo = (
224
224
  fileDataRate => { Writable => 'rational' },
225
225
  genre => { },
226
226
  good => { Writable => 'boolean' },
227
+ pick => { Writable => 'integer' }, #forum15815
227
228
  instrument => { },
228
229
  introTime => { Struct => \%sTime },
229
230
  key => {
@@ -403,6 +404,18 @@ my %sLocationDetails = (
403
404
  PrintConv => '$val =~ /^(inf|undef)$/ ? $val : "$val m"',
404
405
  PrintConvInv => '$val=~s/\s*m$//;$val',
405
406
  },
407
+ GPSAltitudeRef => {
408
+ Writable => 'integer',
409
+ PrintConv => {
410
+ OTHER => sub {
411
+ my ($val, $inv) = @_;
412
+ return undef unless $inv and $val =~ /^([-+0-9])/;
413
+ return($1 eq '-' ? 1 : 0);
414
+ },
415
+ 0 => 'Above Sea Level',
416
+ 1 => 'Below Sea Level',
417
+ },
418
+ },
406
419
  );
407
420
  my %sCVTermDetails = (
408
421
  STRUCT_NAME => 'CVTermDetails',
@@ -1373,6 +1386,57 @@ my %sSubVersion = (
1373
1386
  Snapshots => { List => 'Bag', Binary => 1 },
1374
1387
  );
1375
1388
 
1389
+ # ACDSee region tags (ref BKW)
1390
+ my %sACDSeeDimensions = (
1391
+ STRUCT_NAME => 'ACDSeeDimensions',
1392
+ NAMESPACE => {'acdsee-stDim' => 'http://ns.acdsee.com/sType/Dimensions#'},
1393
+ 'w' => { Writable => 'real' },
1394
+ 'h' => { Writable => 'real' },
1395
+ 'unit' => { },
1396
+ );
1397
+ my %sACDSeeArea = (
1398
+ STRUCT_NAME => 'ACDSeeArea',
1399
+ NAMESPACE => { 'acdsee-stArea' => 'http://ns.acdsee.com/sType/Area#' },
1400
+ 'x' => { Writable => 'real' },
1401
+ 'y' => { Writable => 'real' },
1402
+ w => { Writable => 'real' },
1403
+ h => { Writable => 'real' },
1404
+ );
1405
+ my %sACDSeeRegionStruct = (
1406
+ STRUCT_NAME => 'ACDSeeRegion',
1407
+ NAMESPACE => 'acdsee-rs',
1408
+ ALGArea => { Struct => \%sACDSeeArea },
1409
+ DLYArea => { Struct => \%sACDSeeArea },
1410
+ Name => { },
1411
+ NameAssignType => { },
1412
+ Type => { },
1413
+ );
1414
+ %Image::ExifTool::XMP::ACDSeeRegions = (
1415
+ GROUPS => { 0 => 'XMP', 1 => 'XMP-acdsee-rs', 2 => 'Image' },
1416
+ NAMESPACE => 'acdsee-rs',
1417
+ WRITABLE => 'string',
1418
+ AVOID => 1,
1419
+ Regions => {
1420
+ Name => 'RegionInfoACDSee',
1421
+ FlatName => 'ACDSee',
1422
+ # the "Struct" entry defines the structure fields
1423
+ Struct => {
1424
+ # optional structure name (used for warning messages only)
1425
+ STRUCT_NAME => 'ACDSeeRegionInfo',
1426
+ NAMESPACE => 'acdsee-rs',
1427
+ RegionList => {
1428
+ FlatName => 'Region',
1429
+ Struct => \%sACDSeeRegionStruct,
1430
+ List => 'Bag',
1431
+ },
1432
+ AppliedToDimensions => {
1433
+ FlatName => 'RegionAppliedToDimensions',
1434
+ Struct => \%sACDSeeDimensions,
1435
+ },
1436
+ },
1437
+ },
1438
+ );
1439
+
1376
1440
  # Picture Licensing Universal System namespace properties (xmpPLUS)
1377
1441
  %Image::ExifTool::XMP::xmpPLUS = (
1378
1442
  %xmpTableDefaults,