---
title: "Edit, modify, create or delete IPTC metadata in C# | Nutrient .NET SDK"
canonical_url: "https://www.nutrient.io/guides/dotnet/editor/metadata-iptc/"
md_url: "https://www.nutrient.io/guides/dotnet/editor/metadata-iptc.md"
last_updated: "2026-06-15T15:43:43.643Z"
description: "Learn to read and edit EXIF, IPTC, and XMP metadata in PDF files using C#. Enhance your C# skills with our comprehensive guide."
---

# Edit IPTC metadata using C#

### EXIF Tags

[EXIF Tags](https://www.nutrient.io/guides/dotnet/editor/metadata-exif.md)

### Page Labels

[Page Labels](https://www.nutrient.io/guides/dotnet/editor/metadata-pdf-page-label.md)

### XMP

[XMP](https://www.nutrient.io/guides/dotnet/editor/metadata-xmp.md)

### IPTC

[IPTC](https://www.nutrient.io/guides/dotnet/editor/metadata-iptc.md)

IPTC is an extension of the [EXIF](/guides/dotnet/editor/metadata-exif.md) standard, and it contains additional information not included in EXIF tags. This information refers to the image content to help manage and categorize images and includes the image category, copyright notice, and more. Custom IPTC tags can also be created.

## Supported image formats

- JPEG (read and write)

- TIFF (read and write)

## Getting IPTC tags

To retrieve IPTC tag data, use the following methods:

- [`IPTCGetID`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCGetID.html)

- [`IPTCGetType`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCGetType.html)

- [`IPTCGetValueString`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCGetValueString.html)

- [`IPTCGetValueBytes`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCGetValueBytes.html)

All methods listed above require the image ID and the IPTC tag number.

The tag number may be different for every IPTC tag. This means that to get the exact IPTC tag you want, you have to loop through all tags. To get the total number of IPTC tags, use the [`IPTCCount` method](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCCount.html).

The code below shows how to list IPTC tags of an image file:

### C#

```csharp

using GdPictureImaging gdpictureImaging = new GdPictureImaging();
int imageID = gdpictureImaging.CreateGdPictureImageFromFile(@"C:\temp\source.jpg");
// Create a `StringBuilder` object to store tags.
StringBuilder report = new StringBuilder();
// Get tag count.
int tagCount = gdpictureImaging.IPTCCount(imageID);
for (int i = 1; i <= tagCount; i++)
{
    // Get tag ID.
    IPTCTags tagID = gdpictureImaging.IPTCGetID(imageID, i);
    //Get tag type.
    TagType tagType = gdpictureImaging.IPTCGetType(imageID, i);
    // Get tag value.
    string tagValue = gdpictureImaging.IPTCGetValueString(imageID, i);
    // Append tag data.
    report.AppendLine($"{tagID} {tagType} {tagValue}");
}
Console.WriteLine($"{report}");
GdPictureDocumentUtilities.DisposeImage(imageID);

```

### VB.NET

```vb

Using gdpictureImaging As GdPictureImaging = New GdPictureImaging()
    Dim imageID As Integer = gdpictureImaging.CreateGdPictureImageFromFile("C:\temp\source.jpg")
    ' Create a `StringBuilder` object to store tags.
    Dim report As StringBuilder = New StringBuilder()
    ' Get tag count.
    Dim tagCount As Integer = gdpictureImaging.IPTCCount(imageID)
    For i = 1 To tagCount
        ' Get tag ID.
        Dim tagID As IPTCTags = gdpictureImaging.IPTCGetID(imageID, i)
        'Get tag type.
        Dim tagType As TagType = gdpictureImaging.IPTCGetType(imageID, i)
        ' Get tag value.
        Dim tagValue As String = gdpictureImaging.IPTCGetValueString(imageID, i)
        ' Append tag data.
        report.AppendLine($"{tagID} {tagType} {tagValue}")
    Next
    Console.WriteLine($"{report}")
    GdPictureDocumentUtilities.DisposeImage(imageID)
End Using

```

#### Used methods

- [`CreateGdPictureImageFromFile`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~CreateGdPictureImageFromFile.html)

- [`DisposeImage`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentUtilities~DisposeImage.html)

- [`IPTCCount`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCCount.html)

- [`IPTCGetID`]

- [`IPTCGetType`]

- [`IPTCGetValueString`]

#### Related topics

- [Load a file](/guides/dotnet/load-a-file.md)

## Setting an IPTC tag

To set an IPTC tag, use one of the [`IPTCSetValueString` method](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCSetValueString.html). It requires the following parameters:

- `imageID` — Image ID.

- `IPTCTagID` — IPTC tag ID, which is a member of the [`IPTCTags` enumeration](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.IPTCTags.html).

- `TagData` — The new string value of the tag.

The code below shows how to modify an IPTC tag of an image file that specifies the location of the city the image was taken in:

### C#

```csharp

using GdPictureImaging gdpictureImaging = new GdPictureImaging();
int imageID = gdpictureImaging.CreateGdPictureImageFromFile(@"C:\temp\source.jpg");
// Set the value of the `IPTCTagCity` tag.
gdpictureImaging.IPTCSetValueString(imageID, IPTCTags.IPTCTagCity, "New York");
gdpictureImaging.SaveAsJPEG(imageID, @"C:\temp\source.jpg");
GdPictureDocumentUtilities.DisposeImage(imageID);

```

### VB.NET

```vb

Using gdpictureImaging As GdPictureImaging = New GdPictureImaging()
    Dim imageID As Integer = gdpictureImaging.CreateGdPictureImageFromFile("C:\temp\source.jpg")
    ' Set the value of the `IPTCTagCity` tag.
    gdpictureImaging.IPTCSetValueString(imageID, IPTCTags.IPTCTagCity, "New York")
    gdpictureImaging.SaveAsJPEG(imageID, "C:\temp\source.jpg")
    GdPictureDocumentUtilities.DisposeImage(imageID)
End Using

```

#### Used methods

- [`CreateGdPictureImageFromFile`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~CreateGdPictureImageFromFile.html)

- [`DisposeImage`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentUtilities~DisposeImage.html)

- [`IPTCSetValueString`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCSetValueString.html)

- [`SaveAsJPEG`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~SaveAsJPEG.html)

#### Related topics

- [Load a file](/guides/dotnet/load-a-file.md)

- [Save a file](/guides/dotnet/save-a-file.md)

## Deleting an IPTC tag

To delete an IPTC tag, use the [`IPTCDelete` method](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCDelete.html). It requires the following parameters:

- `imageID` — Image ID.

- `TagNo` — IPTC tag number attached to the image.

The tag number may be different for every IPTC tag. This means that to get the exact IPTC tag you want, you have to loop through all tags. To get the total number of IPTC tags, use the [`IPTCCount` method](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCCount.html):

### C#

```csharp

using GdPictureImaging gdpictureImaging = new GdPictureImaging();
int imageID = gdpictureImaging.CreateGdPictureImageFromFile(@"C:\temp\source.jpg");
// Get tag count.
int tagCount = gdpictureImaging.IPTCCount(imageID);
for (int i = 1; i <= tagCount; i++)
{
    // If the current tag is `IPTCTagCity`, then delete the tag.
    if(gdpictureImaging.IPTCGetID(imageID, i) == IPTCTags.IPTCTagCity)
        gdpictureImaging.IPTCDelete(imageID, i);
}
gdpictureImaging.SaveAsJPEG(imageID, @"C:\temp\source.jpg");
GdPictureDocumentUtilities.DisposeImage(imageID);

```

### VB.NET

```vb

Using gdpictureImaging As GdPictureImaging = New GdPictureImaging()
    Dim imageID As Integer = gdpictureImaging.CreateGdPictureImageFromFile("C:\temp\source.jpg")
    ' Get tag count.
    Dim tagCount As Integer = gdpictureImaging.IPTCCount(imageID)
    For i = 1 To tagCount
        ' If the current tag is `IPTCTagCity`, then delete the tag.
        If gdpictureImaging.IPTCGetID(imageID, i) Is IPTCTags.IPTCTagCity Then gdpictureImaging.IPTCDelete(imageID, i)
    Next
    gdpictureImaging.SaveAsJPEG(imageID, "C:\temp\source.jpg")
    GdPictureDocumentUtilities.DisposeImage(imageID)
End Using

```

#### Used methods

- [`CreateGdPictureImageFromFile`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~CreateGdPictureImageFromFile.html)

- [`DisposeImage`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentUtilities~DisposeImage.html)

- [`IPTCDelete`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCDelete.html)

- [`IPTCCount`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCCount.html)

- [`IPTCGetID`]

- [`SaveAsJPEG`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~SaveAsJPEG.html)

#### Related topics

- [Load a file](/guides/dotnet/load-a-file.md)

- [Save a file](/guides/dotnet/save-a-file.md)

## Creating a Custom IPTC tag

To create a custom IPTC tag, you have to add a new member to the [`IPTCTags` enumeration](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.IPTCTags.html) and assign a value to it:

### C#

```csharp

using GdPictureImaging gdpictureImaging = new GdPictureImaging();
int imageID = gdpictureImaging.CreateGdPictureImageFromFile(@"C:\temp\source.jpg");
// Create a `StringBuilder` object to store tag data.
StringBuilder report = new StringBuilder();
// Get tag count.
int tagCount = gdpictureImaging.IPTCCount(imageID);
// Add an empty custom tag to the `IPTCTags` enumeration.
IPTCTags customTag = (IPTCTags)(tagCount + 1);
// Set a value to the custom tag.
gdpictureImaging.IPTCSetValueString(imageID, customTag, "Custom tag value");
for (int i = 1; i <= tagCount + 1; i++)
{
    // Get tag ID.
    IPTCTags tagID = gdpictureImaging.IPTCGetID(imageID, i);
    // Get tag type.
    TagType tagType = gdpictureImaging.IPTCGetType(imageID, i);
    // Get tag value.
    string tagValue = gdpictureImaging.IPTCGetValueString(imageID, i);
    // Append tag data.
    report.AppendLine($"{tagID} {tagType} {tagValue}");
}
gdpictureImaging.SaveAsJPEG(imageID, @"C:\temp\source.jpg");
Console.WriteLine($"{report}");
GdPictureDocumentUtilities.DisposeImage(imageID);

```

### VB.NET

```vb

Using gdpictureImaging As GdPictureImaging = New GdPictureImaging()
    Dim imageID As Integer = gdpictureImaging.CreateGdPictureImageFromFile("C:\temp\source.jpg")
    ' Create a `StringBuilder` object to store tag data.
    Dim report As StringBuilder = New StringBuilder()
    ' Get tag count.
    Dim tagCount As Integer = gdpictureImaging.IPTCCount(imageID)
    ' Add an empty custom tag to the `IPTCTags` enumeration.
    Dim customTag As IPTCTags = CType(tagCount + 1, IPTCTags)
    ' Set a value to the custom tag.
    gdpictureImaging.IPTCSetValueString(imageID, customTag, "Custom tag value")
    For i = 1 To tagCount + 1
        ' Get tag ID.
        Dim tagID As IPTCTags = gdpictureImaging.IPTCGetID(imageID, i)
        'Get tag type.
        Dim tagType As TagType = gdpictureImaging.IPTCGetType(imageID, i)
        ' Get tag value.
        Dim tagValue As String = gdpictureImaging.IPTCGetValueString(imageID, i)
        ' Append tag data.
        report.AppendLine($"{tagID} {tagType} {tagValue}")
    Next
    gdpictureImaging.SaveAsJPEG(imageID, "C:\temp\source.jpg")
    Console.WriteLine($"{report}")
    GdPictureDocumentUtilities.DisposeImage(imageID)
End Using

```

#### Used methods

- [`CreateGdPictureImageFromFile`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~CreateGdPictureImageFromFile.html)

- [`DisposeImage`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureDocumentUtilities~DisposeImage.html)

- [`IPTCCount`](https://www.nutrient.io/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~IPTCCount.html)

- [`IPTCGetID`]

- [`IPTCGetType`]

- [`IPTCGetValueString`]

- [`SaveAsJPEG`](/api/gdpicture/GdPicture.NET.14~GdPicture14.GdPictureImaging~SaveAsJPEG.html)

#### Related topics

- [Load a file](/guides/dotnet/load-a-file.md)

- [Save a file](/guides/dotnet/save-a-file.md)
---

## Related pages

- [Add an image to another image using C#](/guides/dotnet/editor/add-image-to-image.md)
- [Add a page to a PDF or a TIFF image in C# .NET](/guides/dotnet/editor/add-page.md)
- [Add an image to a PDF using C#](/guides/dotnet/editor/add-image-to-pdf.md)
- [Add text to an image using C#](/guides/dotnet/editor/add-text-to-image.md)
- [Attach a file to a PDF in C#](/guides/dotnet/editor/attach-a-file.md)
- [PDF and image editor in C#.NET](/guides/dotnet/editor.md)
- [Add text to PDFs in C#](/guides/dotnet/editor/add-text-to-pdf.md)
- [Merge PDFs in C#](/guides/dotnet/editor/merge-or-combine.md)
- [Modify EXIF metadata using C#](/guides/dotnet/editor/metadata-exif.md)
- [Read and edit PDF page label metadata using C#](/guides/dotnet/editor/metadata-pdf-page-label.md)
- [Split PDF pages into multiple pages in C#](/guides/dotnet/editor/split.md)
- [Add watermarks to PDFs and images in C#](/guides/dotnet/editor/watermark.md)
- [Read and edit PDF XMP metadata using C#](/guides/dotnet/editor/metadata-xmp.md)

