You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

174 lines
6.7 KiB

#------------------------------------------------------------------------------
# File: rotate_regions.config
#
# Description: User-defined Composite tag definitions to rotate MWG region tags
# (Metadata Working Group region, used by Picasa) and MP region tags
# (used by Microsoft Photo Library).
#
# Tag definitions and examples:
#
# RotateMWGRegionCW90
# RotateMWGRegionCW180
# RotateMWGRegionCW270
# These tags will rotate a MWG Region clockwise 90, 180, or 270 degrees.
# Example:
# exiftool -config rotate_regions.config "-RegionInfo<RotateMWGRegionCW90" FILE
#
# RotateMPRegionCW90
# RotateMPRegionCW180
# RotateMPRegionCW270
# These tags will rotate an MP Region clockwise 90, 180, or 270 degrees.
# Example:
# exiftool -config rotate_regions.config "-RegionInfoMP<RotateMPRegionCW90" FILE
#
# Revisions: 2015/05/08 - Bryan K. Williams AKA StarGeek Created
#------------------------------------------------------------------------------
%Image::ExifTool::UserDefined = (
'Image::ExifTool::Composite' => {
RotateMWGRegionCW90 =>{
Require => 'RegionInfo',
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{RegionList}}) {
my @rect = @{$$rgn{Area}}{'X','Y','W','H'};
my %newRgn = (
Area => {
X => 1-$rect[1],
Y => $rect[0],
W => $rect[3],
H => $rect[2],
Unit => 'normalized',
},
Name => $$rgn{Name},
Type => 'Face',
);
push @newRgns, \%newRgn;
}
return {
AppliedToDimensions => {
W => $val[0]{AppliedToDimensions}{W},
H => $val[0]{AppliedToDimensions}{H},
Unit => $val[0]{AppliedToDimensions}{Unit},
},
RegionList => \@newRgns,
};
},
}, #End RotateMWGRegionCW90
RotateMWGRegionCW180 =>{
Require => 'RegionInfo',
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{RegionList}}) {
my @rect = @{$$rgn{Area}}{'X','Y','W','H'};
my %newRgn = (
Area => {
X => 1-$rect[0],
Y => 1-$rect[1],
W => $rect[2],
H => $rect[3],
Unit => 'normalized',
},
Name => $$rgn{Name},
Type => 'Face',
);
push @newRgns, \%newRgn;
}
return {
AppliedToDimensions => {
W => $val[0]{AppliedToDimensions}{W},
H => $val[0]{AppliedToDimensions}{H},
Unit => $val[0]{AppliedToDimensions}{Unit},
},
RegionList => \@newRgns,
};
},
}, #End RotateMWGRegionCW180
RotateMWGRegionCW270 =>{
Require => 'RegionInfo',
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{RegionList}}) {
my @rect = @{$$rgn{Area}}{'X','Y','W','H'};
my %newRgn = (
Area => {
X => $rect[1],
Y => 1-$rect[0],
W => $rect[3],
H => $rect[2],
Unit => 'normalized',
},
Name => $$rgn{Name},
Type => 'Face',
);
push @newRgns, \%newRgn;
}
return {
AppliedToDimensions => {
W => $val[0]{AppliedToDimensions}{W},
H => $val[0]{AppliedToDimensions}{H},
Unit => $val[0]{AppliedToDimensions}{Unit},
},
RegionList => \@newRgns,
};
},
}, #End RotateMWGRegionCW270
RotateMPRegionCW90=>{
Require => 'RegionInfoMP',
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{Regions}}) {
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
my $temp = $rect[0];
$rect[0] = 1-$rect[1]-$rect[3];
$rect[1] = $temp;
($rect[2], $rect[3]) = ($rect[3],$rect[2]); #Swap W and H
push @newRgns, {
PersonDisplayName => $$rgn{PersonDisplayName},
Rectangle => join(', ', @rect),
};
}
return { Regions => \@newRgns };
}
}, #end RotateMPRegionCW90
RotateMPRegionCW180=>{
Require => 'RegionInfoMP',
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{Regions}}) {
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
my $tempX = $rect[0];
my $tempY = $rect[1];
$rect[0] = 1-$tempX-$rect[2];
$rect[1] = 1-$tempY-$rect[3];
push @newRgns, {
PersonDisplayName => $$rgn{PersonDisplayName},
Rectangle => join(', ', @rect),
};
}
return { Regions => \@newRgns };
}
}, #end RotateMPRegionCW180
RotateMPRegionCW270=>{
Require => 'RegionInfoMP',
ValueConv => q{
my ($rgn, @newRgns);
foreach $rgn (@{$val[0]{Regions}}) {
my @rect = split /\s*,\s*/, $$rgn{Rectangle};
my $temp = $rect[1];
$rect[1] = 1-$rect[0]-$rect[2];
$rect[0] = $temp;
($rect[2], $rect[3]) = ($rect[3],$rect[2]); #Swap W and H
push @newRgns, {
PersonDisplayName => $$rgn{PersonDisplayName},
Rectangle => join(', ', @rect),
};
}
return { Regions => \@newRgns };
}
}, #end RotateMPRegionCW270
},
);
1; #end