---
title: "Update JPEG metadata losslessly"
canonical: https://www.graphicsmill.com/samples/Codecs/Jpeg/UpdateJpegMetadataLosslessly_cs
product: "Graphics Mill"
source: "Codecs/Jpeg/UpdateJpegMetadataLosslessly.cs"
---

# Update JPEG metadata losslessly

Updates metadata of JPEG image without recompression.

## Instruction

Write a C# program that updates IPTC, EXIF, XMP, and Adobe image resource metadata in a JPEG image using the `LosslessJpeg` class. Ensure that the image is not recompressed in the process.

## Usings

```csharp
using Aurigma.GraphicsMill.Codecs;
```

## Code Snippet

```csharp
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");
}
```

## Explanation

Below is a C# code sample that modifies metadata fields of a JPEG image without recompression:

The code demonstrates how to edit IPTC, EXIF, and XMP metadata, and how to insert an Adobe resource block using `LosslessJpeg`.

## Tags

- [Filesystem](<https://www.graphicsmill.com/samples/tags/filesystem_md>): Loading and saving images from files
- [JPG](<https://www.graphicsmill.com/samples/tags/jpg_md>): Reading and writing JPEG images
- [Lossless JPEG](<https://www.graphicsmill.com/samples/tags/lossless_md>): Applying lossless JPEG operations
- [Metadata](<https://www.graphicsmill.com/samples/tags/metadata_md>): Reading and writing image metadata
- [Read](<https://www.graphicsmill.com/samples/tags/read_md>): Reading images with codecs
- [Write](<https://www.graphicsmill.com/samples/tags/write_md>): Writing images with codecs

## Input

- [Chicago.jpg](<https://www.graphicsmill.com/samples/Codecs/compiled/Debug/Chicago_jpg>) (preview)

## Output

- [UpdateJpegMetadataLosslessly.jpg](<https://www.graphicsmill.com/samples/Codecs/compiled/Debug/UpdateJpegMetadataLosslessly_jpg>) (preview)

## Used APIs

- [Aurigma.GraphicsMill.Codecs.AdobeResourceBlock](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_AdobeResourceBlock.htm.md>)
- [Aurigma.GraphicsMill.Codecs.AdobeResourceDictionary](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_AdobeResourceDictionary.htm.md>)
- [Aurigma.GraphicsMill.Codecs.ExifDictionary](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_ExifDictionary.htm.md>)
- [Aurigma.GraphicsMill.Codecs.IptcDictionary](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_IptcDictionary.htm.md>)
- [Aurigma.GraphicsMill.Codecs.LosslessJpeg](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_LosslessJpeg.htm.md>)
- [Aurigma.GraphicsMill.Codecs.LosslessJpeg.AdobeResources](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_LosslessJpeg_AdobeResources.htm.md>)
- [Aurigma.GraphicsMill.Codecs.LosslessJpeg.Exif](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_LosslessJpeg_Exif.htm.md>)
- [Aurigma.GraphicsMill.Codecs.LosslessJpeg.Iptc](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_LosslessJpeg_Iptc.htm.md>)
- [Aurigma.GraphicsMill.Codecs.LosslessJpeg.Write(String)](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_Codecs_LosslessJpeg_Write_1_bb3a7a4f.htm.md>)
- [Aurigma.GraphicsMill.Codecs.LosslessJpeg.Xmp](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_LosslessJpeg_Xmp.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpData](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_XmpData.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpData.AddNode(XmpNode)](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_Codecs_XmpData_AddNode_1_79cf5b78.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpData.Load(String)](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_Codecs_XmpData_Load_1_bb3a7a4f.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpData.Save](<https://www.graphicsmill.com/docs/gm/M_Aurigma_GraphicsMill_Codecs_XmpData_Save.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpNodeType](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_XmpNodeType.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpTagNames](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_XmpTagNames.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpTagNames.DCContributor](<https://www.graphicsmill.com/docs/gm/P_Aurigma_GraphicsMill_Codecs_XmpTagNames_DCContributor.htm.md>)
- [Aurigma.GraphicsMill.Codecs.XmpValueNode](<https://www.graphicsmill.com/docs/gm/T_Aurigma_GraphicsMill_Codecs_XmpValueNode.htm.md>)
