Sample code for 30+ languages & platforms
PHP

XMP Array Property - Bag, Seq, or Alt

See more XMP Examples

How to insert or update an XMP array property (bag, seq, or alt).

Chilkat PHP Downloads

Chilkat2 PHP
<?php

use Chilkat2\StringArray;
use Chilkat2\Xmp;

$success = false;

// This requires the Chilkat API to have been previously unlocked.
// See Global Unlock Sample for sample code.

$xmp = new Xmp();

// Load a JPG or TIF image file.
// Sample JPG's with XMP metadata may be found at:
// http://www.chilkatsoft.com/testData/xmp/sample1.jpg
// http://www.chilkatsoft.com/testData/xmp/sample2.jpg
// http://www.chilkatsoft.com/testData/xmp/sample3.jpg
try {
    $xmp->LoadAppFile('sample1.jpg');
} catch (\Chilkat2\Exception $e) {
    echo $e->getMessage(), "\n";
    exit;
}

echo 'Num embedded XMP docs: ', $xmp->NumEmbedded, "\n";

// Assuming there is at least one, get the 1st.
// (There is typically never more than one, but theoretically it's possible.)
try {
    $xml = $xmp->GetEmbedded(0);
} catch (\Chilkat2\Exception $e) {
    $xml = null;
}
if ($xml !== null) {
    // Create an object to hold one or more string values.
    $sa = new StringArray();
    $sa->Append('value_1');
    $sa->Append('value_2');
    // ...

    try {
        $xmp->AddArray($xml, 'bag', 'Iptc4xmpCore:Chilkat', $sa);
        $success = true;
    } catch (\Chilkat2\Exception $e) {
        $success = false;
    }
    if (!$success) {
        echo $xmp->LastErrorText, "\n";
    } else {
        // Save the JPG.
        try {
            $xmp->SaveAppFile('modified.jpg');
        } catch (\Chilkat2\Exception $e) {
            echo $e->getMessage(), "\n";
        }
    }
} else {
    echo $xmp->LastErrorText, "\n";
}