diff --git a/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs b/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs index 5bbcd6681..3264d2cba 100644 --- a/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs +++ b/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs @@ -40,18 +40,15 @@ namespace SixLabors.ImageSharp.Formats.Tiff { ImageFrame frame = frames[i]; ImageFrameMetadata frameMetaData = frame.Metadata; - if (imageMetaData.IptcProfile == null && TryGetIptc(frameMetaData.ExifProfile.Values, out byte[] iptcBytes)) + if (TryGetIptc(frameMetaData.ExifProfile.Values, out byte[] iptcBytes)) { - imageMetaData.IptcProfile = new IptcProfile(iptcBytes); + frameMetaData.IptcProfile = new IptcProfile(iptcBytes); } - if (imageMetaData.IccProfile == null) + IExifValue iccProfileBytes = frameMetaData.ExifProfile.GetValue(ExifTag.IccProfile); + if (iccProfileBytes != null) { - IExifValue val = frameMetaData.ExifProfile.GetValue(ExifTag.IccProfile); - if (val != null) - { - imageMetaData.IccProfile = new IccProfile(val.Value); - } + frameMetaData.IccProfile = new IccProfile(iccProfileBytes.Value); } } } diff --git a/src/ImageSharp/Metadata/ImageFrameMetadata.cs b/src/ImageSharp/Metadata/ImageFrameMetadata.cs index ae298d518..1819fd2bc 100644 --- a/src/ImageSharp/Metadata/ImageFrameMetadata.cs +++ b/src/ImageSharp/Metadata/ImageFrameMetadata.cs @@ -5,6 +5,8 @@ using System; using System.Collections.Generic; using SixLabors.ImageSharp.Formats; using SixLabors.ImageSharp.Metadata.Profiles.Exif; +using SixLabors.ImageSharp.Metadata.Profiles.Icc; +using SixLabors.ImageSharp.Metadata.Profiles.Iptc; namespace SixLabors.ImageSharp.Metadata { @@ -39,6 +41,8 @@ namespace SixLabors.ImageSharp.Metadata } this.ExifProfile = other.ExifProfile?.DeepClone(); + this.IccProfile = other.IccProfile?.DeepClone(); + this.IptcProfile = other.IptcProfile?.DeepClone(); this.XmpProfile = other.XmpProfile != null ? new byte[other.XmpProfile.Length] : null; other.XmpProfile?.AsSpan().CopyTo(this.XmpProfile.AsSpan()); } @@ -53,6 +57,16 @@ namespace SixLabors.ImageSharp.Metadata /// internal byte[] XmpProfile { get; set; } + /// + /// Gets or sets the list of ICC profiles. + /// + public IccProfile IccProfile { get; set; } + + /// + /// Gets or sets the iptc profile. + /// + public IptcProfile IptcProfile { get; set; } + /// public ImageFrameMetadata DeepClone() => new ImageFrameMetadata(this); diff --git a/tests/ImageSharp.Tests/Formats/Tiff/TiffMetadataTests.cs b/tests/ImageSharp.Tests/Formats/Tiff/TiffMetadataTests.cs index a302cc110..5298c9998 100644 --- a/tests/ImageSharp.Tests/Formats/Tiff/TiffMetadataTests.cs +++ b/tests/ImageSharp.Tests/Formats/Tiff/TiffMetadataTests.cs @@ -133,8 +133,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff { using Image image = provider.GetImage(TiffDecoder); - Assert.NotNull(image.Metadata.IptcProfile); - IptcValue byline = image.Metadata.IptcProfile.Values.FirstOrDefault(data => data.Tag == IptcTag.Byline); + IptcProfile iptcProfile = image.Frames.RootFrame.Metadata.IptcProfile; + Assert.NotNull(iptcProfile); + IptcValue byline = iptcProfile.Values.FirstOrDefault(data => data.Tag == IptcTag.Byline); Assert.NotNull(byline); Assert.Equal("Studio Mantyniemi", byline.Value); } diff --git a/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs b/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs index cf63db39b..f1a90d43e 100644 --- a/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs +++ b/tests/ImageSharp.Tests/Metadata/ImageFrameMetadataTests.cs @@ -4,8 +4,10 @@ using System.Linq; using SixLabors.ImageSharp.Formats.Gif; using SixLabors.ImageSharp.Metadata; -using SixLabors.ImageSharp.Metadata.Profiles.Exif; +using SixLabors.ImageSharp.Metadata.Profiles.Icc; using Xunit; +using ExifProfile = SixLabors.ImageSharp.Metadata.Profiles.Exif.ExifProfile; +using ExifTag = SixLabors.ImageSharp.Metadata.Profiles.Exif.ExifTag; namespace SixLabors.ImageSharp.Tests.Metadata { @@ -43,10 +45,20 @@ namespace SixLabors.ImageSharp.Tests.Metadata var exifProfile = new ExifProfile(); exifProfile.SetValue(ExifTag.Software, "UnitTest"); exifProfile.SetValue(ExifTag.Artist, "UnitTest"); + var iccProfile = new IccProfile() + { + Header = new IccProfileHeader() + { + CmmType = "Unittest" + } + }; + var iptcProfile = new ImageSharp.Metadata.Profiles.Iptc.IptcProfile(); var metaData = new ImageFrameMetadata() { XmpProfile = xmpProfile, - ExifProfile = exifProfile + ExifProfile = exifProfile, + IccProfile = iccProfile, + IptcProfile = iptcProfile }; // act @@ -56,11 +68,15 @@ namespace SixLabors.ImageSharp.Tests.Metadata Assert.NotNull(clone); Assert.NotNull(clone.ExifProfile); Assert.NotNull(clone.XmpProfile); + Assert.NotNull(clone.IccProfile); + Assert.NotNull(clone.IptcProfile); Assert.False(metaData.ExifProfile.Equals(clone.ExifProfile)); Assert.True(metaData.ExifProfile.Values.Count == clone.ExifProfile.Values.Count); Assert.False(metaData.XmpProfile.Equals(clone.XmpProfile)); Assert.True(metaData.XmpProfile.SequenceEqual(clone.XmpProfile)); Assert.False(metaData.GetGifMetadata().Equals(clone.GetGifMetadata())); + Assert.False(metaData.IccProfile.Equals(clone.IccProfile)); + Assert.False(metaData.IptcProfile.Equals(clone.IptcProfile)); } } }