Sample code for 30+ languages & platforms
Zig

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 Zig Downloads

Zig
const std = @import("std");
const chilkat = @import("chilkat");

pub fn main(init: std.process.Init) !void {
    const alloc = init.arena.allocator();

    var success: bool = false;

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

    const xmp = try chilkat.Xmp.init();
    defer xmp.deinit();

    // 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
    success = if (xmp.loadAppFile("sample1.jpg")) true else |_| false;
    if (!success) {
        std.debug.print("{s}\n", .{try xmp.getLastErrorText(alloc)});
        return;
    }

    std.debug.print("Num embedded XMP docs: {d}\n", .{xmp.getNumEmbedded()});

    // Assuming there is at least one, get the 1st.
    // (There is typically never more than one, but theoretically it's possible.)
    if (xmp.getEmbedded(0)) |xml| {
        defer xml.deinit();

        // Create an object to hold one or more string values.
        const sa = try chilkat.StringArray.init();
        defer sa.deinit();
        success = if (sa.append("value_1")) true else |_| false;
        success = if (sa.append("value_2")) true else |_| false;
        // ...

        success = if (xmp.addArray(xml, "bag", "Iptc4xmpCore:Chilkat", sa)) true else |_| false;
        if (!success) {
            std.debug.print("{s}\n", .{try xmp.getLastErrorText(alloc)});
        } else {
            // Save the JPG.
            xmp.saveAppFile("modified.jpg") catch {
                std.debug.print("{s}\n", .{try xmp.getLastErrorText(alloc)});
            };
        }
    } else |_| {
        std.debug.print("{s}\n", .{try xmp.getLastErrorText(alloc)});
    }
}