Update JPEG metadata losslessly
View as MarkdownUpdates metadata of JPEG image without recompression.
Code Snippet
using (var losslessJpeg = new LosslessJpeg("Chicago.jpg"))
{
// IPTC
if (losslessJpeg.Iptc == null)
{
losslessJpeg.Iptc = new IptcDictionary();
}
losslessJpeg.Iptc[IptcDictionary.Caption] = "Mountain";
// EXIF
if (losslessJpeg.Exif == null)
{
losslessJpeg.Exif = new ExifDictionary();
}
losslessJpeg.Exif[ExifDictionary.Software] = "Aurigma Graphics Mill";
// XMP
var xmp = new XmpData();
if (losslessJpeg.Xmp != null)
{
xmp.Load(losslessJpeg.Xmp);
}
var node = new XmpValueNode(XmpNodeType.SimpleProperty, "John Doe", XmpTagNames.DCContributor);
xmp.AddNode(node);
losslessJpeg.Xmp = xmp.Save();
// Adobe image resource blocks
if (losslessJpeg.AdobeResources == null)
{
losslessJpeg.AdobeResources = new AdobeResourceDictionary();
}
const int copyrightFlag = 0x040A;
var arBlock = new AdobeResourceBlock("Copyright", new byte[] { 1 });
losslessJpeg.AdobeResources[copyrightFlag] = arBlock;
losslessJpeg.Write("UpdateJpegMetadataLosslessly.jpg");
}
Input
Chicago.jpg
Output
UpdateJpegMetadataLosslessly.jpg
Used APIs
- Aurigma.GraphicsMill.Codecs.AdobeResourceBlock
- Aurigma.GraphicsMill.Codecs.AdobeResourceDictionary
- Aurigma.GraphicsMill.Codecs.ExifDictionary
- Aurigma.GraphicsMill.Codecs.IptcDictionary
- Aurigma.GraphicsMill.Codecs.LosslessJpeg
- Aurigma.GraphicsMill.Codecs.LosslessJpeg.AdobeResources
- Aurigma.GraphicsMill.Codecs.LosslessJpeg.Exif
- Aurigma.GraphicsMill.Codecs.LosslessJpeg.Iptc
- Aurigma.GraphicsMill.Codecs.LosslessJpeg.Write(String)
- Aurigma.GraphicsMill.Codecs.LosslessJpeg.Xmp
- Aurigma.GraphicsMill.Codecs.XmpData
- Aurigma.GraphicsMill.Codecs.XmpData.AddNode(XmpNode)
- Aurigma.GraphicsMill.Codecs.XmpData.Load(String)
- Aurigma.GraphicsMill.Codecs.XmpData.Save
- Aurigma.GraphicsMill.Codecs.XmpNodeType
- Aurigma.GraphicsMill.Codecs.XmpTagNames
- Aurigma.GraphicsMill.Codecs.XmpTagNames.DCContributor
- Aurigma.GraphicsMill.Codecs.XmpValueNode