Skip to content

Commit cf0f4e7

Browse files
author
exiftool
committed
Update to 12.24
1 parent 53e5dd0 commit cf0f4e7

39 files changed

+829
-280
lines changed

Diff for: Changes

+11
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,17 @@ RSS feed: https://exiftool.org/rss.xml
77
Note: The most recent production release is Version 12.16. (Other versions are
88
considered development releases, and are not uploaded to MetaCPAN.)
99

10+
Apr. 13, 2021 - Version 12.24
11+
12+
- Added a new PhaseOne RawFormat value (thanks LibRaw)
13+
- Decode a new Sony tag (thanks Jos Roost)
14+
- Decode a few new Panasonic and FujiFilm tags (thanks LibRaw and Greybeard)
15+
- Patched security vulnerability in DjVu reader
16+
- Updated acdsee.config in distribution (thanks StarGeek)
17+
- Recognize AutoCAD DXF files
18+
- More work on experimental JUMBF read support
19+
- More work on experimental JXL read/write support
20+
1021
Apr. 1, 2021 - Version 12.23
1122

1223
- Added support for Olympus ORI files

Diff for: META.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,6 @@
4747
}
4848
},
4949
"release_status" : "stable",
50-
"version" : "12.23",
50+
"version" : "12.24",
5151
"x_serialization_backend" : "JSON::PP version 4.02"
5252
}

Diff for: META.yml

+1-1
Original file line numberDiff line numberDiff line change
@@ -28,5 +28,5 @@ recommends:
2828
Time::HiRes: 0
2929
requires:
3030
perl: 5.004
31-
version: 12.23
31+
version: 12.24
3232
x_serialization_backend: 'JSON::PP version 4.02'

Diff for: README

+2-2
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
106106
terminal window to extract and run ExifTool:
107107

108108
cd ~/Desktop
109-
gzip -dc Image-ExifTool-12.23.tar.gz | tar -xf -
110-
cd Image-ExifTool-12.23
109+
gzip -dc Image-ExifTool-12.24.tar.gz | tar -xf -
110+
cd Image-ExifTool-12.24
111111
./exiftool t/images/ExifTool.jpg
112112

113113
Note: These commands extract meta information from one of the test images.

Diff for: config_files/acdsee.config

+193-6
Original file line numberDiff line numberDiff line change
@@ -2,20 +2,76 @@
22
# File: acdsee.config
33
#
44
# Description: This config file defines ACDSee XMP region tags for writing.
5+
# The following tags are created in the XMP-acdsee-rs group
56
#
6-
# Usage: exiftool -config acdsee.config -ACDSEETAG=VALUE FILE ...
7+
# RegionInfoACDSee : The structured tag for the ACDSee regions
8+
# (similar to XMP-mwg-rs:RegionInfo)
9+
#
10+
# The following tags are the width, height, and unit of the
11+
# image at the time of processing when storing image region
12+
# metadata. They are similar to the AppliedToDimensions tags
13+
# of the MWG regions.
14+
# ACDSeeRegionAppliedToDimensionsH : Height of the image
15+
# ACDSeeRegionAppliedToDimensionsUnit : Unit of the image
16+
# ACDSeeRegionAppliedToDimensionsW : Width of the image
17+
#
18+
# Actual region data, stored in an array. These flattened tags
19+
# are treated as List Type tags. There are two region types,
20+
# the ALYArea and the DLYArea. The ALYArea tags tags assigned
21+
# by ACDSee and are usually square in dimensions. The DLYArea
22+
# tags are both the tags assigned by ACDSee (but possibly
23+
# rectangular instead of square) as well as any manual
24+
# assigned tags. They are similar to the area tags of the MWG
25+
# regions.
26+
# ACDSeeRegionDLYAreaH : Height of DLY region
27+
# ACDSeeRegionDLYAreaW : Width of DLY region
28+
# ACDSeeRegionDLYAreaX : X centerpoint of DLY region
29+
# ACDSeeRegionDLYAreaY : Y centerpoint of DLY region
30+
# ACDSeeRegionALYAreaH : Height of ALY region
31+
# ACDSeeRegionALYAreaW : Width of ALY region
32+
# ACDSeeRegionALYAreaX : X centerpoint of ALY region
33+
# ACDSeeRegionALYAreaY : Y centerpoint of ALY region
34+
# ACDSeeRegionName : Name of region
35+
# ACDSeeRegionType : Type of region
36+
# ACDSeeRegionNameAssignType : How the type was assigned.
37+
# "Manual" is the only known
38+
# entry at this time
39+
#
40+
# Conversion tags. These tags can be used to convert other region
41+
# type tags to ACDSee regions.
42+
# MPRegion2ACDSeeRegion : Converts a Microsoft RegionInfoMP
43+
# IPTCRegion2ACDSeeRegion : Converts an IPTC ImageRegion
44+
# MWGRegion2ACDSeeRegion : Converts a MWG RegionInfo
45+
#
46+
# Usage: To set individual tags
47+
# exiftool -config acdsee.config -ACDSEETAG=VALUE FILE ...
48+
#
49+
# To convert Microsoft Regions to ACDSee regions
50+
# exiftool -config acdsee.config "-RegionInfoACDSee<MPRegion2ACDSeeRegion" File ...
51+
# To convert IPTC regions to ACDSee regions
52+
# exiftool -config acdsee.config "-RegionInfoACDSee<IPTCRegion2ACDSeeRegion" File ...
53+
# To convert MWG Regions to ACDSee regions
54+
# exiftool -config acdsee.config "-RegionInfoACDSee<MWGRegion2ACDSeeRegion" File ...
755
#
856
# Requires: ExifTool version 10.28 or later
957
#
1058
# Revisions: 2020/01/28 - Bryan K. Williams (aka StarGeek) Created
59+
# 2021/04/08 - BKW Added tags to convert from Microsoft, IPTC,
60+
# and MWG regions to ACDSee regions based upon
61+
# convert_regions.config. Expanded docs.
62+
# Shortened ADCSee tag names and added shortcuts
63+
# from original names to new names, for example
64+
# "RegionInfoACDSeeAppliedToDimensions*" -> "ACDSeeRegionAppliedToDimensions*"
65+
# "RegionInfoACDSeeRegionList* -> "ACDSeeRegion*"
1166
#------------------------------------------------------------------------------
67+
use Data::Dumper;
1268

1369
my %sACDSeeDimensions = (
1470
STRUCT_NAME => 'ACDSee Dimensions',
1571
NAMESPACE => {'acdsee-stDim' => 'http://ns.acdsee.com/sType/Dimensions#'},
16-
'w' => { Writable => 'real' },
17-
'h' => { Writable => 'real' },
18-
'unit' => { },
72+
'w' => { Writable => 'real' },
73+
'h' => { Writable => 'real' },
74+
'unit' => { },
1975
);
2076

2177
my %sACDSeeArea = (
@@ -38,14 +94,120 @@ my %sACDSeeRegionStruct = (
3894
);
3995

4096
%Image::ExifTool::UserDefined = (
41-
# new XMP namespaces (eg. xxx) must be added to the Main XMP table:
97+
# new XMP namespaces for ACDSee regions
4298
'Image::ExifTool::XMP::Main' => {
4399
'acdsee-rs' => { # <-- must be the same as the NAMESPACE prefix
44100
SubDirectory => {
45101
TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
46102
},
47103
},
48104
},
105+
'Image::ExifTool::Composite' => {
106+
# create an ACDSee RegionInfo structure from a Microsoft RegionInfoMP structure
107+
MPRegion2ACDSeeRegion => {
108+
Require => {
109+
0 => 'RegionInfoMP',
110+
1 => 'ImageWidth',
111+
2 => 'ImageHeight',
112+
},
113+
ValueConv => q{
114+
my ($rgn, @newRgns);
115+
foreach $rgn (@{$val[0]{Regions}}) {
116+
my $name = $$rgn{PersonDisplayName};
117+
next unless $$rgn{Rectangle} or defined $name;
118+
my %newRgn = ( Type => 'Face' );
119+
if (defined $name) {
120+
# don't add ignored faces
121+
next if $name eq 'ffffffffffffffff';
122+
$newRgn{Name} = $name;
123+
}
124+
if ($$rgn{Rectangle}) {
125+
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
126+
$newRgn{DLYArea} = {
127+
X => $rect[0] + $rect[2]/2,
128+
Y => $rect[1] + $rect[3]/2,
129+
W => $rect[2],
130+
H => $rect[3],
131+
} if @rect == 4;
132+
}
133+
push @newRgns, \%newRgn;
134+
}
135+
return {
136+
AppliedToDimensions => { W => $val[1], H => $val[2], Unit => 'pixel' },
137+
RegionList => \@newRgns,
138+
};
139+
},
140+
},
141+
# create an ACDSee RegionInfo structure from an IPTC ImageRegion list
142+
IPTCRegion2ACDSeeRegion => {
143+
Require => {
144+
0 => 'ImageRegion',
145+
1 => 'ImageWidth',
146+
2 => 'ImageHeight',
147+
},
148+
ValueConv => q{
149+
my ($rgn, @newRgns);
150+
my $rgns = ref $val[0] eq 'ARRAY' ? $val[0] : [ $val[0] ];
151+
foreach $rgn (@$rgns) {
152+
my %newRgn = ( Type => 'Face' );
153+
if ($$rgn{RegionBoundary} and $$rgn{RegionBoundary}{RbShape} eq 'rectangle') {
154+
my @rect = @{$$rgn{RegionBoundary}}{'RbX','RbY','RbW','RbH'};
155+
if ($$rgn{RegionBoundary}{RbUnit} eq 'pixel') {
156+
$rect[0] /= $val[1], $rect[2] /= $val[1];
157+
$rect[1] /= $val[2]; $rect[3] /= $val[2];
158+
}
159+
$newRgn{'DLYArea'} = {
160+
X => $rect[0] + $rect[2]/2,
161+
Y => $rect[1] + $rect[3]/2,
162+
W => $rect[2],
163+
H => $rect[3],
164+
};
165+
} else {
166+
next unless defined $$rgn{Name};
167+
}
168+
$newRgn{Name} = $$rgn{Name} if defined $$rgn{Name};
169+
push @newRgns, \%newRgn;
170+
}
171+
return {
172+
AppliedToDimensions => { 'W' => $val[1], 'H' => $val[2], 'Unit' => 'pixel' },
173+
RegionList => \@newRgns,
174+
};
175+
},
176+
},
177+
178+
# create an MWG RegionInfo structure from an IPTC ImageRegion list
179+
MWGRegion2ACDSeeRegion => {
180+
Require => {
181+
0 => 'RegionInfo',
182+
1 => 'ImageWidth',
183+
2 => 'ImageHeight',
184+
},
185+
ValueConv => q{
186+
my ($rgn, @newRgns);
187+
my %newRgn;
188+
foreach $rgn (@{$val[0]{RegionList}}) {
189+
next unless $$rgn{Area} or defined $$rgn{Name};
190+
my %newRgn;
191+
if ($$rgn{Area}) {
192+
$newRgn{'DLYArea'} = {
193+
'X' => $$rgn{Area}{'X'},
194+
'Y' => $$rgn{Area}{'Y'},
195+
'W' => $$rgn{Area}{'W'},
196+
'H' => $$rgn{Area}{'H'},
197+
};
198+
};
199+
$newRgn{Name} = $$rgn{Name} if defined $$rgn{Name};
200+
$newRgn{'Type'} = $$rgn{'Type'} if defined $$rgn{'Type'};
201+
push @newRgns, \%newRgn;
202+
}
203+
return {
204+
'AppliedToDimensions' => $val[0]{'AppliedToDimensions'},
205+
RegionList => \@newRgns,
206+
}
207+
},
208+
},
209+
####
210+
},
49211
);
50212

51213
%Image::ExifTool::UserDefined::ACDSeeRegions = (
@@ -54,18 +216,43 @@ my %sACDSeeRegionStruct = (
54216
WRITABLE => 'string', # (default to string-type tags)
55217
Regions => {
56218
Name => 'RegionInfoACDSee',
219+
FlatName => 'ACDSee',
57220
# the "Struct" entry defines the structure fields
58221
Struct => {
59222
# optional structure name (used for warning messages only)
60223
STRUCT_NAME => 'ACDSee RegionInfo',
61224
RegionList => {
225+
FlatName => 'Region',
62226
Struct => \%sACDSeeRegionStruct,
63227
List => 'Bag',
64228
},
65-
AppliedToDimensions => { Struct => \%sACDSeeDimensions },
229+
AppliedToDimensions => {
230+
FlatName => 'RegionAppliedToDimensions',Struct => \%sACDSeeDimensions },
66231
},
67232
},
68233
);
69234

235+
# Shortcuts to old names added so as not to break previously used commands
236+
%Image::ExifTool::UserDefined::Shortcuts = (
237+
RegionInfoACDSeeAppliedToDimensionsH => 'ACDSeeRegionAppliedToDimensionsH',
238+
RegionInfoACDSeeAppliedToDimensionsUnit => 'ACDSeeRegionAppliedToDimensionsUnit',
239+
RegionInfoACDSeeAppliedToDimensionsW => 'ACDSeeRegionAppliedToDimensionsW',
240+
RegionInfoACDSeeRegionListDLYAreaH => 'ACDSeeRegionDLYAreaH',
241+
RegionInfoACDSeeRegionListDLYAreaW => 'ACDSeeRegionDLYAreaW',
242+
RegionInfoACDSeeRegionListDLYAreaX => 'ACDSeeRegionDLYAreaX',
243+
RegionInfoACDSeeRegionListDLYAreaY => 'ACDSeeRegionDLYAreaY',
244+
RegionInfoACDSeeRegionListALGAreaH => 'ACDSeeRegionALGAreaH',
245+
RegionInfoACDSeeRegionListALGAreaW => 'ACDSeeRegionALGAreaW',
246+
RegionInfoACDSeeRegionListALGAreaX => 'ACDSeeRegionALGAreaX',
247+
RegionInfoACDSeeRegionListALGAreaY => 'ACDSeeRegionALGAreaY',
248+
RegionInfoACDSeeRegionListName => 'ACDSeeRegionName',
249+
RegionInfoACDSeeRegionListType => 'ACDSeeRegionType',
250+
RegionInfoACDSeeRegionListNameAssignType => 'ACDSeeRegionNameAssignType',
251+
);
252+
253+
# Forced -struct option during debugging
254+
#%Image::ExifTool::UserDefined::Options = (
255+
# Struct => 1,
256+
#);
70257
#------------------------------------------------------------------------------
71258
1; #end

Diff for: exiftool

+2-2
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
use strict;
1111
require 5.004;
1212

13-
my $version = '12.23';
13+
my $version = '12.24';
1414

1515
# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
1616
my $exeDir;
@@ -5393,7 +5393,7 @@ with this command:
53935393
53945394
produces output like this:
53955395
5396-
-- Generated by ExifTool 12.23 --
5396+
-- Generated by ExifTool 12.24 --
53975397
File: a.jpg - 2003:10:31 15:44:19
53985398
(f/5.6, 1/60s, ISO 100)
53995399
File: b.jpg - 2006:05:23 11:57:38

Diff for: html/ExifTool.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -429,7 +429,7 @@ <h2>Description</h2>
429429
specifically requested by name.</td>
430430
<td align=center>0 or 1</td><td align=center>undef</td></tr>
431431
<tr id="BlockExtract"><td>BlockExtract</td><td>Flag to extract some directories
432-
(mentioned in the Tag Name documentation) as a block.</td>
432+
(mentioned in the <a href="TagNames/index.html">Tag Name documentation</a>) as a block.</td>
433433
<td align=center><table class=clear>
434434
<tr><td valign=top align=right><b>0</b>&nbsp;=</td><td>Extract as block only if tag specified by name</td></tr>
435435
<tr><td valign=top align=right><b>1</b>&nbsp;=</td><td>Extract as block, and extract contained tags</td></tr>
@@ -787,7 +787,7 @@ <h2>Description</h2>
787787
This causes some tags to be generated which normally would not be unless specifically
788788
requested (by passing the tag name to <a href="#ImageInfo">ImageInfo</a> or
789789
<a href="#ExtractInfo">ExtractInfo</a>). May be set to 2 or 3 to enable generation
790-
of some additional tags as mentioned in the tag name documentation.</td>
790+
of some additional tags as mentioned in the <a href="TagNames/index.html">Tag Name documentation</a>.</td>
791791
<td align=center>0, 1, 2 or 3</td><td align=center>undef</td></tr>
792792
<tr id="RequestTags"><td>RequestTags</td><td>List of additional tag and/or group names
793793
to request in the next call to <a href="#ExtractInfo">ExtractInfo</a>. This option is

Diff for: html/ExifTool.pdf

-4 Bytes
Binary file not shown.

Diff for: html/Shift.pdf

0 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)