Skip to content

Commit

Permalink
Update to 12.24
Browse files Browse the repository at this point in the history
  • Loading branch information
exiftool committed Apr 13, 2021
1 parent 53e5dd0 commit cf0f4e7
Show file tree
Hide file tree
Showing 39 changed files with 829 additions and 280 deletions.
11 changes: 11 additions & 0 deletions Changes
Expand Up @@ -7,6 +7,17 @@ RSS feed: https://exiftool.org/rss.xml
Note: The most recent production release is Version 12.16. (Other versions are
considered development releases, and are not uploaded to MetaCPAN.)

Apr. 13, 2021 - Version 12.24

- Added a new PhaseOne RawFormat value (thanks LibRaw)
- Decode a new Sony tag (thanks Jos Roost)
- Decode a few new Panasonic and FujiFilm tags (thanks LibRaw and Greybeard)
- Patched security vulnerability in DjVu reader
- Updated acdsee.config in distribution (thanks StarGeek)
- Recognize AutoCAD DXF files
- More work on experimental JUMBF read support
- More work on experimental JXL read/write support

Apr. 1, 2021 - Version 12.23

- Added support for Olympus ORI files
Expand Down
2 changes: 1 addition & 1 deletion META.json
Expand Up @@ -47,6 +47,6 @@
}
},
"release_status" : "stable",
"version" : "12.23",
"version" : "12.24",
"x_serialization_backend" : "JSON::PP version 4.02"
}
2 changes: 1 addition & 1 deletion META.yml
Expand Up @@ -28,5 +28,5 @@ recommends:
Time::HiRes: 0
requires:
perl: 5.004
version: 12.23
version: 12.24
x_serialization_backend: 'JSON::PP version 4.02'
4 changes: 2 additions & 2 deletions README
Expand Up @@ -106,8 +106,8 @@ your home directory, then you would type the following commands in a
terminal window to extract and run ExifTool:

cd ~/Desktop
gzip -dc Image-ExifTool-12.23.tar.gz | tar -xf -
cd Image-ExifTool-12.23
gzip -dc Image-ExifTool-12.24.tar.gz | tar -xf -
cd Image-ExifTool-12.24
./exiftool t/images/ExifTool.jpg

Note: These commands extract meta information from one of the test images.
Expand Down
199 changes: 193 additions & 6 deletions config_files/acdsee.config
Expand Up @@ -2,20 +2,76 @@
# File: acdsee.config
#
# Description: This config file defines ACDSee XMP region tags for writing.
# The following tags are created in the XMP-acdsee-rs group
#
# Usage: exiftool -config acdsee.config -ACDSEETAG=VALUE FILE ...
# RegionInfoACDSee : The structured tag for the ACDSee regions
# (similar to XMP-mwg-rs:RegionInfo)
#
# The following tags are the width, height, and unit of the
# image at the time of processing when storing image region
# metadata. They are similar to the AppliedToDimensions tags
# of the MWG regions.
# ACDSeeRegionAppliedToDimensionsH : Height of the image
# ACDSeeRegionAppliedToDimensionsUnit : Unit of the image
# ACDSeeRegionAppliedToDimensionsW : Width of the image
#
# Actual region data, stored in an array. These flattened tags
# are treated as List Type tags. There are two region types,
# the ALYArea and the DLYArea. The ALYArea tags tags assigned
# by ACDSee and are usually square in dimensions. The DLYArea
# tags are both the tags assigned by ACDSee (but possibly
# rectangular instead of square) as well as any manual
# assigned tags. They are similar to the area tags of the MWG
# regions.
# ACDSeeRegionDLYAreaH : Height of DLY region
# ACDSeeRegionDLYAreaW : Width of DLY region
# ACDSeeRegionDLYAreaX : X centerpoint of DLY region
# ACDSeeRegionDLYAreaY : Y centerpoint of DLY region
# ACDSeeRegionALYAreaH : Height of ALY region
# ACDSeeRegionALYAreaW : Width of ALY region
# ACDSeeRegionALYAreaX : X centerpoint of ALY region
# ACDSeeRegionALYAreaY : Y centerpoint of ALY region
# ACDSeeRegionName : Name of region
# ACDSeeRegionType : Type of region
# ACDSeeRegionNameAssignType : How the type was assigned.
# "Manual" is the only known
# entry at this time
#
# Conversion tags. These tags can be used to convert other region
# type tags to ACDSee regions.
# MPRegion2ACDSeeRegion : Converts a Microsoft RegionInfoMP
# IPTCRegion2ACDSeeRegion : Converts an IPTC ImageRegion
# MWGRegion2ACDSeeRegion : Converts a MWG RegionInfo
#
# Usage: To set individual tags
# exiftool -config acdsee.config -ACDSEETAG=VALUE FILE ...
#
# To convert Microsoft Regions to ACDSee regions
# exiftool -config acdsee.config "-RegionInfoACDSee<MPRegion2ACDSeeRegion" File ...
# To convert IPTC regions to ACDSee regions
# exiftool -config acdsee.config "-RegionInfoACDSee<IPTCRegion2ACDSeeRegion" File ...
# To convert MWG Regions to ACDSee regions
# exiftool -config acdsee.config "-RegionInfoACDSee<MWGRegion2ACDSeeRegion" File ...
#
# Requires: ExifTool version 10.28 or later
#
# Revisions: 2020/01/28 - Bryan K. Williams (aka StarGeek) Created
# 2021/04/08 - BKW Added tags to convert from Microsoft, IPTC,
# and MWG regions to ACDSee regions based upon
# convert_regions.config. Expanded docs.
# Shortened ADCSee tag names and added shortcuts
# from original names to new names, for example
# "RegionInfoACDSeeAppliedToDimensions*" -> "ACDSeeRegionAppliedToDimensions*"
# "RegionInfoACDSeeRegionList* -> "ACDSeeRegion*"
#------------------------------------------------------------------------------
use Data::Dumper;

my %sACDSeeDimensions = (
STRUCT_NAME => 'ACDSee Dimensions',
NAMESPACE => {'acdsee-stDim' => 'http://ns.acdsee.com/sType/Dimensions#'},
'w' => { Writable => 'real' },
'h' => { Writable => 'real' },
'unit' => { },
'w' => { Writable => 'real' },
'h' => { Writable => 'real' },
'unit' => { },
);

my %sACDSeeArea = (
Expand All @@ -38,14 +94,120 @@ my %sACDSeeRegionStruct = (
);

%Image::ExifTool::UserDefined = (
# new XMP namespaces (eg. xxx) must be added to the Main XMP table:
# new XMP namespaces for ACDSee regions
'Image::ExifTool::XMP::Main' => {
'acdsee-rs' => { # <-- must be the same as the NAMESPACE prefix
SubDirectory => {
TagTable => 'Image::ExifTool::UserDefined::ACDSeeRegions'
},
},
},
'Image::ExifTool::Composite' => {
# create an ACDSee RegionInfo structure from a Microsoft RegionInfoMP structure
MPRegion2ACDSeeRegion => {
Require => {
0 => 'RegionInfoMP',
1 => 'ImageWidth',
2 => 'ImageHeight',
},
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{Regions}}) {
my $name = $$rgn{PersonDisplayName};
next unless $$rgn{Rectangle} or defined $name;
my %newRgn = ( Type => 'Face' );
if (defined $name) {
# don't add ignored faces
next if $name eq 'ffffffffffffffff';
$newRgn{Name} = $name;
}
if ($$rgn{Rectangle}) {
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
$newRgn{DLYArea} = {
X => $rect[0] + $rect[2]/2,
Y => $rect[1] + $rect[3]/2,
W => $rect[2],
H => $rect[3],
} if @rect == 4;
}
push @newRgns, \%newRgn;
}
return {
AppliedToDimensions => { W => $val[1], H => $val[2], Unit => 'pixel' },
RegionList => \@newRgns,
};
},
},
# create an ACDSee RegionInfo structure from an IPTC ImageRegion list
IPTCRegion2ACDSeeRegion => {
Require => {
0 => 'ImageRegion',
1 => 'ImageWidth',
2 => 'ImageHeight',
},
ValueConv => q{
my ($rgn, @newRgns);
my $rgns = ref $val[0] eq 'ARRAY' ? $val[0] : [ $val[0] ];
foreach $rgn (@$rgns) {
my %newRgn = ( Type => 'Face' );
if ($$rgn{RegionBoundary} and $$rgn{RegionBoundary}{RbShape} eq 'rectangle') {
my @rect = @{$$rgn{RegionBoundary}}{'RbX','RbY','RbW','RbH'};
if ($$rgn{RegionBoundary}{RbUnit} eq 'pixel') {
$rect[0] /= $val[1], $rect[2] /= $val[1];
$rect[1] /= $val[2]; $rect[3] /= $val[2];
}
$newRgn{'DLYArea'} = {
X => $rect[0] + $rect[2]/2,
Y => $rect[1] + $rect[3]/2,
W => $rect[2],
H => $rect[3],
};
} else {
next unless defined $$rgn{Name};
}
$newRgn{Name} = $$rgn{Name} if defined $$rgn{Name};
push @newRgns, \%newRgn;
}
return {
AppliedToDimensions => { 'W' => $val[1], 'H' => $val[2], 'Unit' => 'pixel' },
RegionList => \@newRgns,
};
},
},

# create an MWG RegionInfo structure from an IPTC ImageRegion list
MWGRegion2ACDSeeRegion => {
Require => {
0 => 'RegionInfo',
1 => 'ImageWidth',
2 => 'ImageHeight',
},
ValueConv => q{
my ($rgn, @newRgns);
my %newRgn;
foreach $rgn (@{$val[0]{RegionList}}) {
next unless $$rgn{Area} or defined $$rgn{Name};
my %newRgn;
if ($$rgn{Area}) {
$newRgn{'DLYArea'} = {
'X' => $$rgn{Area}{'X'},
'Y' => $$rgn{Area}{'Y'},
'W' => $$rgn{Area}{'W'},
'H' => $$rgn{Area}{'H'},
};
};
$newRgn{Name} = $$rgn{Name} if defined $$rgn{Name};
$newRgn{'Type'} = $$rgn{'Type'} if defined $$rgn{'Type'};
push @newRgns, \%newRgn;
}
return {
'AppliedToDimensions' => $val[0]{'AppliedToDimensions'},
RegionList => \@newRgns,
}
},
},
####
},
);

%Image::ExifTool::UserDefined::ACDSeeRegions = (
Expand All @@ -54,18 +216,43 @@ my %sACDSeeRegionStruct = (
WRITABLE => 'string', # (default to string-type tags)
Regions => {
Name => 'RegionInfoACDSee',
FlatName => 'ACDSee',
# the "Struct" entry defines the structure fields
Struct => {
# optional structure name (used for warning messages only)
STRUCT_NAME => 'ACDSee RegionInfo',
RegionList => {
FlatName => 'Region',
Struct => \%sACDSeeRegionStruct,
List => 'Bag',
},
AppliedToDimensions => { Struct => \%sACDSeeDimensions },
AppliedToDimensions => {
FlatName => 'RegionAppliedToDimensions',Struct => \%sACDSeeDimensions },
},
},
);

# Shortcuts to old names added so as not to break previously used commands
%Image::ExifTool::UserDefined::Shortcuts = (
RegionInfoACDSeeAppliedToDimensionsH => 'ACDSeeRegionAppliedToDimensionsH',
RegionInfoACDSeeAppliedToDimensionsUnit => 'ACDSeeRegionAppliedToDimensionsUnit',
RegionInfoACDSeeAppliedToDimensionsW => 'ACDSeeRegionAppliedToDimensionsW',
RegionInfoACDSeeRegionListDLYAreaH => 'ACDSeeRegionDLYAreaH',
RegionInfoACDSeeRegionListDLYAreaW => 'ACDSeeRegionDLYAreaW',
RegionInfoACDSeeRegionListDLYAreaX => 'ACDSeeRegionDLYAreaX',
RegionInfoACDSeeRegionListDLYAreaY => 'ACDSeeRegionDLYAreaY',
RegionInfoACDSeeRegionListALGAreaH => 'ACDSeeRegionALGAreaH',
RegionInfoACDSeeRegionListALGAreaW => 'ACDSeeRegionALGAreaW',
RegionInfoACDSeeRegionListALGAreaX => 'ACDSeeRegionALGAreaX',
RegionInfoACDSeeRegionListALGAreaY => 'ACDSeeRegionALGAreaY',
RegionInfoACDSeeRegionListName => 'ACDSeeRegionName',
RegionInfoACDSeeRegionListType => 'ACDSeeRegionType',
RegionInfoACDSeeRegionListNameAssignType => 'ACDSeeRegionNameAssignType',
);

# Forced -struct option during debugging
#%Image::ExifTool::UserDefined::Options = (
# Struct => 1,
#);
#------------------------------------------------------------------------------
1; #end
4 changes: 2 additions & 2 deletions exiftool
Expand Up @@ -10,7 +10,7 @@
use strict;
require 5.004;

my $version = '12.23';
my $version = '12.24';

# add our 'lib' directory to the include list BEFORE 'use Image::ExifTool'
my $exeDir;
Expand Down Expand Up @@ -5393,7 +5393,7 @@ with this command:
produces output like this:
-- Generated by ExifTool 12.23 --
-- Generated by ExifTool 12.24 --
File: a.jpg - 2003:10:31 15:44:19
(f/5.6, 1/60s, ISO 100)
File: b.jpg - 2006:05:23 11:57:38
Expand Down
4 changes: 2 additions & 2 deletions html/ExifTool.html
Expand Up @@ -429,7 +429,7 @@ <h2>Description</h2>
specifically requested by name.</td>
<td align=center>0 or 1</td><td align=center>undef</td></tr>
<tr id="BlockExtract"><td>BlockExtract</td><td>Flag to extract some directories
(mentioned in the Tag Name documentation) as a block.</td>
(mentioned in the <a href="TagNames/index.html">Tag Name documentation</a>) as a block.</td>
<td align=center><table class=clear>
<tr><td valign=top align=right><b>0</b>&nbsp;=</td><td>Extract as block only if tag specified by name</td></tr>
<tr><td valign=top align=right><b>1</b>&nbsp;=</td><td>Extract as block, and extract contained tags</td></tr>
Expand Down Expand Up @@ -787,7 +787,7 @@ <h2>Description</h2>
This causes some tags to be generated which normally would not be unless specifically
requested (by passing the tag name to <a href="#ImageInfo">ImageInfo</a> or
<a href="#ExtractInfo">ExtractInfo</a>). May be set to 2 or 3 to enable generation
of some additional tags as mentioned in the tag name documentation.</td>
of some additional tags as mentioned in the <a href="TagNames/index.html">Tag Name documentation</a>.</td>
<td align=center>0, 1, 2 or 3</td><td align=center>undef</td></tr>
<tr id="RequestTags"><td>RequestTags</td><td>List of additional tag and/or group names
to request in the next call to <a href="#ExtractInfo">ExtractInfo</a>. This option is
Expand Down
Binary file modified html/ExifTool.pdf
Binary file not shown.
Binary file modified html/Shift.pdf
Binary file not shown.

0 comments on commit cf0f4e7

Please sign in to comment.