Zig
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
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)});
}
}