Resize And Preserve Metadata
EXIF IPTC Adobe Resources XMP Read Write Resize Pipeline
Resize a JPEG and preserve/update metadata with Aurigma Graphics Mill. Halves width (keeps aspect), updates EXIF Software, adds IPTC keyword, sets Adobe copyright flag, adds XMP dc:contributor, and saves all metadata.
Сode Snippet
using (var jpegReader = new JpegReader("Chicago.jpg"))
using (var resize = new Resize(jpegReader.Width / 2, 0))
using (var jpegWriter = new JpegWriter("ResizeAndPreserveMetadata.jpg"))
{
// Read EXIF
var exif = jpegReader.Exif;
// Check if loaded image contains EXIF metadata
if (exif == null)
{
exif = new ExifDictionary();
}
exif[ExifDictionary.Software] = "Aurigma Graphics Mill";
// Read IPTC
var iptc = jpegReader.Iptc;
// Check if loaded image contains IPTC metadata
if (iptc == null)
{
iptc = new IptcDictionary();
}
iptc[IptcDictionary.Keyword] = "mountain";
// Read Adobe resource blocks
var adobeResources = jpegReader.AdobeResources;
// Check if loaded image contains Adobe image resource blocks
if (adobeResources == null)
{
adobeResources = new AdobeResourceDictionary();
}
// Create new adobe image resource block containing copyright metadata
var arBlock = new AdobeResourceBlock("Copyright", new byte[] { 1 });
// Set this block to the item with 0x040A ID (copyright flag)
adobeResources[0x040A] = arBlock;
var xmp = new XmpData();
// Check if loaded image contains XMP metadata
if (jpegReader.Xmp != null)
{
xmp.Load(jpegReader.Xmp);
}
// Create a node containing dc:contributor metadata
var node = new XmpValueNode(XmpNodeType.SimpleProperty, "John Doe", XmpTagNames.DCContributor);
xmp.AddNode(node);
// Write metadata
jpegWriter.Exif = exif;
jpegWriter.Iptc = iptc;
jpegWriter.AdobeResources = adobeResources;
jpegWriter.Xmp = xmp.Save();
Pipeline.Run(jpegReader + resize + jpegWriter);
Input
Chicago.jpg
Output
ResizeAndPreserveMetadata.jpg
For AI-assisted development: Download Graphics Mill Code Samples XML Catalog