Sample code for 30+ languages & platforms
Zig

Get a String Property Value from XMP

See more XMP Examples

Demonstrates how to open a JPG or TIF image file, access the XMP metadata, and fetch the value of a string property, such as the Location.

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();

    // 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
    xmp.loadAppFile("sample1.jpg") catch {
        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();

        const prop_val = xmp.getSimpleStr(alloc, xml, "Iptc4xmpCore:Location") catch "";
        if (!xmp.getLastMethodSuccess()) {
            std.debug.print("Not found.\n", .{});
        } else {
            std.debug.print("{s}\n", .{prop_val});
        }
    } else |_| {
        std.debug.print("{s}\n", .{try xmp.getLastErrorText(alloc)});
    }
}