2025-05-22: Production version ExifTool 13.30 is now available
#!/usr/bin/perl
use strict;
use warnings;
use Image::ExifTool;
my $exifTool = Image::ExifTool->new;
my @oldRegionName = qw(test1 test2);
my @regionName = ('new');
# clear all current fields in region
for my $i (0 .. $#oldRegionName)
{
my ($success, $errStr) = $exifTool->SetNewValue('XMP-mwg-rs:RegionList' => {
'Name' => $oldRegionName[$i],
},
DelValue => 1);
}
# now repopulate region fields
for my $i (0 .. $#regionName)
{
my ($success, $errStr) = $exifTool->SetNewValue('XMP-mwg-rs:RegionList' => {
'Name' => $regionName[$i],
'Type' => 'Face',
'Area' => {
'H' => 1,
'Unit' => "normalized",
'W' => 2,
'X' => 3,
'Y' => 4,
}
},
AddValue => 1);
}
$exifTool->Options(Verbose => 3);
$exifTool->WriteInfo('a.xmp');
> rm a.xmp
> exiftool a.xmp -regionlist='{name=test1,type=pet}' -regionlist='{name=test2,type=pet}' -regionlist="{name=test3,type=pet}"
1 image files created
> exiftool a.xmp -struct -xmp:all
XMP Toolkit : Image::ExifTool 13.30
Region Info : {RegionList=[{Name=test1,Type=Pet},{Name=test2,Type=Pet},{Name=test3,Type=Pet}]}
> ./ttt
Rewriting a.xmp...
FileType = XMP
FileTypeExtension = XMP
MIMEType = application/rdf+xml
- XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Name = 'test1'
- XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Type = 'Pet'
- XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 11/mwg-rs:Name = 'test2'
- XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 11/mwg-rs:Type = 'Pet'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Area/stArea:h = '1'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Area/stArea:unit = 'normalized'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Area/stArea:w = '2'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Area/stArea:x = '3'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Area/stArea:y = '4'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Name = 'new'
+ XMP-mwg-rs:Regions/mwg-rs:RegionList/rdf:Bag/rdf:li 10/mwg-rs:Type = 'Face'
> exiftool a.xmp -struct -xmp:all
XMP Toolkit : Image::ExifTool 13.30
Region Info : {RegionList=[{Area={H=1,Unit=normalized,W=2,X=3,Y=4},Name=new,Type=Face},{Name=test3,Type=Pet}]}
# clear all current fields in region
for my $i (0 .. $#oldRegionName)
{
($success, $errStr) = $exifTool->SetNewValue('XMP-mwg-rs:RegionList' => {
'Name' => $oldRegionName[$i],
},
DelValue => 1) || errExit($file, __LINE__, $errStr);
}
# now repopulate region fields
for my $i (0 .. $#regionName)
{
($success, $errStr) = $exifTool->SetNewValue('XMP-mwg-rs:RegionList' => {
'Name' => $regionName[$i],
'Type' => $regionType[$i],
'Area' => {
'H' => $regionAreaH[$i],
'Unit' => "normalized",
'W' => $regionAreaW[$i],
'X' => $regionAreaX[$i],
'Y' => $regionAreaY[$i]
}
},
AddValue => 1) ||
errExit($file, __LINE__, $errStr);
}
}