Image-ExifTool

 view release on metacpan or  search on metacpan

lib/Image/ExifTool/PLUS.pm  view on Meta::CPAN

        },
    },
    CopyrightRegistrationNumber => { },
    FirstPublicationDate        => { %Image::ExifTool::XMP::dateTimeInfo, Groups => { 2 => 'Time'} },
    CopyrightOwner => {
        FlatName => '',
        Struct => \%plusCopyrightOwner,
        List => 'Seq',
    },
    CopyrightOwnerImageID   => { },
    ImageCreator => {
        FlatName => '',
        Struct => \%plusImageCreator,
        List => 'Seq',
    },
    ImageCreatorImageID     => { },
    ImageSupplier => {
        FlatName => '',
        Struct => \%plusImageSupplier,
        List => 'Seq',
    },
    ImageSupplierImageID    => { },
    LicenseeImageID         => { },
    LicenseeImageNotes      => { Writable => 'lang-alt' },
    OtherImageInfo          => { Writable => 'lang-alt' },
    LicenseID               => { },
    LicensorTransactionID   => { List => 'Bag' },
    LicenseeTransactionID   => { List => 'Bag' },
    LicenseeProjectReference=> { List => 'Bag' },
    LicenseTransactionDate  => { %Image::ExifTool::XMP::dateTimeInfo, Groups => { 2 => 'Time'} },
    Reuse => {
        %plusVocab,
        PrintConv => {
            'RE-REU' => 'Repeat Use',
            'RE-NAP' => 'Not Applicable',
        },
    },
    OtherLicenseDocuments   => { List => 'Bag' },
    OtherLicenseInfo        => { Writable => 'lang-alt' },
    # Note: these are Bag's of lang-alt lists -- a nested list tag!
    Custom1     => { List => 'Bag', Writable => 'lang-alt' },
    Custom2     => { List => 'Bag', Writable => 'lang-alt' },
    Custom3     => { List => 'Bag', Writable => 'lang-alt' },
    Custom4     => { List => 'Bag', Writable => 'lang-alt' },
    Custom5     => { List => 'Bag', Writable => 'lang-alt' },
    Custom6     => { List => 'Bag', Writable => 'lang-alt' },
    Custom7     => { List => 'Bag', Writable => 'lang-alt' },
    Custom8     => { List => 'Bag', Writable => 'lang-alt' },
    Custom9     => { List => 'Bag', Writable => 'lang-alt' },
    Custom10    => { List => 'Bag', Writable => 'lang-alt' },
    DataMining => {
        %plusVocab,
        PrintConv => {
            'DMI-UNSPECIFIED' => 'Unspecified - no prohibition defined',
            'DMI-ALLOWED'     => 'Allowed',
            'DMI-PROHIBITED-AIMLTRAINING' => 'Prohibited for AI/ML training',
            'DMI-PROHIBITED-GENAIMLTRAINING' => 'Prohibited for Generative AI/ML training',
            'DMI-PROHIBITED-EXCEPTSEARCHENGINEINDEXING' => 'Prohibited except for search engine indexing',
            'DMI-PROHIBITED' => 'Prohibited',
            'DMI-PROHIBITED-SEECONSTRAINT' => 'Prohibited, see plus:OtherConstraints',
            'DMI-PROHIBITED-SEEEMBEDDEDRIGHTSEXPR' => 'Prohibited, see iptcExt:EmbdEncRightsExpr',
            'DMI-PROHIBITED-SEELINKEDRIGHTSEXPR' => 'Prohibited, see iptcExt:LinkedEncRightsExpr',
        },
    },
);

#------------------------------------------------------------------------------
# Validate Media Summary Code
# Inputs: 0) Media Usage Code
# Returns: true if OK, false on severe error
# - issues warning for detected format problems
# - repairs some repairable problems
sub ValidateMediaSummary($)
{
    my $val = shift;

    my @a = split /\|/, $val;
    @a >= 4 and $a[0] eq '' or warn("Not a valid Media Summary Code\n"), return 0;
    $a[1] eq 'PLUS' or warn("Unrecognized Media Usage standard\n"), return 0;
    $a[2] =~ /^V(\d+)/ or warn("Unrecognized Media Usage version\n");
    $a[3] =~ /^U(\d+)/ or warn("Invalid Media Usage count\n"), return 0;
    my $numUsages = $1;
    my ($i, $j);
    unless ($numUsages == @a - 4) {
        warn("Fixed incorrect number of Media Usages\n");
        $numUsages = @a - 4;
        $a[3] = sprintf('U%.3d', $numUsages);
    }
    for ($i=1; $i<=$numUsages; ++$i) {
        my $usage = $a[$i + 3];
        $usage =~ /^1I([A-Z])([A-Z])/ or warn("Missing Media Usage $i item count\n"), return 0;
        length($usage) % 4 and warn("Incorrect Media Usage $i length\n"), return 0;
        my $numItems = (ord($1)-65) * 26 + ord($2)-65 + 1;
        unless (length($usage) == 4 * ($numItems + 1)) {
            $numItems = length($usage) / 4 - 1;
            warn("Fixed incorrect Media Usage $i item count\n");
            $a[$i+3] = '1I' . chr(65 + int($numItems / 26)) . chr($numItems % 26) . substr($usage, 4);
        }
        for ($j=1; $j<=$numItems; ++$j) {
            my $item = substr($usage, $j*4, 4);
            $item =~ /^\d[A-Z]{3}$/ or warn(qq(Invalid item "$item" for Media Usage $i\n)), return 0;
        }
    }
    $_[0] = join('|', @a) . '|' if $Image::ExifTool::evalWarning;
    return 1;
}

1;  # end

__END__

=head1 NAME

Image::ExifTool::PLUS - PLUS (Picture Licensing Universal System) tags

=head1 DESCRIPTION

Definitions for PLUS (Picture Licensing Universal System) tags.

=head1 AUTHOR



( run in 0.769 second using v1.01-cache-2.11-cpan-71847e10f99 )