Browse Source

Remove Exif profile from the image metadata: each frame will have its own ExifProfile

pull/1553/head
Brian Popow 5 years ago
parent
commit
275a6cc27d
  1. 18
      src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs
  2. 8
      src/ImageSharp/Formats/Tiff/TiffEncoderEntriesCollector.cs
  3. 13
      tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs

18
src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs

@ -54,24 +54,6 @@ namespace SixLabors.ImageSharp.Formats.Tiff
} }
} }
if (coreMetadata.ExifProfile == null && frame.ExifProfile != null)
{
coreMetadata.ExifProfile = frame.ExifProfile.DeepClone();
// Remove Tiff specific tags from the profile.
coreMetadata.ExifProfile.RemoveValue(ExifTag.ImageWidth);
coreMetadata.ExifProfile.RemoveValue(ExifTag.ImageLength);
coreMetadata.ExifProfile.RemoveValue(ExifTag.ResolutionUnit);
coreMetadata.ExifProfile.RemoveValue(ExifTag.Predictor);
coreMetadata.ExifProfile.RemoveValue(ExifTag.PlanarConfiguration);
coreMetadata.ExifProfile.RemoveValue(ExifTag.PhotometricInterpretation);
coreMetadata.ExifProfile.RemoveValue(ExifTag.BitsPerSample);
coreMetadata.ExifProfile.RemoveValue(ExifTag.ColorMap);
coreMetadata.ExifProfile.RemoveValue(ExifTag.Compression);
coreMetadata.ExifProfile.RemoveValue(ExifTag.StripOffsets);
coreMetadata.ExifProfile.RemoveValue(ExifTag.StripByteCounts);
}
if (coreMetadata.IptcProfile == null) if (coreMetadata.IptcProfile == null)
{ {
if (TryGetIptc(frame.ExifProfile.Values, out byte[] iptcBytes)) if (TryGetIptc(frame.ExifProfile.Values, out byte[] iptcBytes))

8
src/ImageSharp/Formats/Tiff/TiffEncoderEntriesCollector.cs

@ -177,15 +177,15 @@ namespace SixLabors.ImageSharp.Formats.Tiff
private void ProcessProfiles(ImageMetadata imageMetadata, TiffFrameMetadata tiffFrameMetadata) private void ProcessProfiles(ImageMetadata imageMetadata, TiffFrameMetadata tiffFrameMetadata)
{ {
if (imageMetadata.ExifProfile != null && imageMetadata.ExifProfile.Parts != ExifParts.None) ExifProfile exifProfile = tiffFrameMetadata.ExifProfile;
if (exifProfile != null && exifProfile.Parts != ExifParts.None)
{ {
imageMetadata.SyncProfiles(); foreach (IExifValue entry in exifProfile.Values)
foreach (IExifValue entry in imageMetadata.ExifProfile.Values)
{ {
if (!this.collector.Entries.Exists(t => t.Tag == entry.Tag) && entry.GetValue() != null) if (!this.collector.Entries.Exists(t => t.Tag == entry.Tag) && entry.GetValue() != null)
{ {
ExifParts entryPart = ExifTags.GetPart(entry.Tag); ExifParts entryPart = ExifTags.GetPart(entry.Tag);
if (entryPart != ExifParts.None && imageMetadata.ExifProfile.Parts.HasFlag(entryPart)) if (entryPart != ExifParts.None && exifProfile.Parts.HasFlag(entryPart))
{ {
this.collector.AddOrReplace(entry.DeepClone()); this.collector.AddOrReplace(entry.DeepClone());
} }

13
tests/ImageSharp.Tests/Metadata/Profiles/Exif/ExifProfileTests.cs

@ -28,12 +28,7 @@ namespace SixLabors.ImageSharp.Tests
/// <summary> /// <summary>
/// Writes a png file. /// Writes a png file.
/// </summary> /// </summary>
Png, Png
/// <summary>
/// Writes a tiff file.
/// </summary>
Tiff,
} }
private static readonly Dictionary<ExifTag, object> TestProfileValues = new Dictionary<ExifTag, object> private static readonly Dictionary<ExifTag, object> TestProfileValues = new Dictionary<ExifTag, object>
@ -97,7 +92,6 @@ namespace SixLabors.ImageSharp.Tests
[Theory] [Theory]
[InlineData(TestImageWriteFormat.Jpeg)] [InlineData(TestImageWriteFormat.Jpeg)]
[InlineData(TestImageWriteFormat.Png)] [InlineData(TestImageWriteFormat.Png)]
[InlineData(TestImageWriteFormat.Tiff)]
public void WriteFraction(TestImageWriteFormat imageFormat) public void WriteFraction(TestImageWriteFormat imageFormat)
{ {
using (var memStream = new MemoryStream()) using (var memStream = new MemoryStream())
@ -141,7 +135,6 @@ namespace SixLabors.ImageSharp.Tests
[Theory] [Theory]
[InlineData(TestImageWriteFormat.Jpeg)] [InlineData(TestImageWriteFormat.Jpeg)]
[InlineData(TestImageWriteFormat.Png)] [InlineData(TestImageWriteFormat.Png)]
[InlineData(TestImageWriteFormat.Tiff)]
public void ReadWriteInfinity(TestImageWriteFormat imageFormat) public void ReadWriteInfinity(TestImageWriteFormat imageFormat)
{ {
Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image(); Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image();
@ -175,7 +168,6 @@ namespace SixLabors.ImageSharp.Tests
https://exiftool.org/TagNames/EXIF.html */ https://exiftool.org/TagNames/EXIF.html */
[InlineData(TestImageWriteFormat.Jpeg, 16)] [InlineData(TestImageWriteFormat.Jpeg, 16)]
[InlineData(TestImageWriteFormat.Png, 16)] [InlineData(TestImageWriteFormat.Png, 16)]
[InlineData(TestImageWriteFormat.Tiff, 16)]
public void SetValue(TestImageWriteFormat imageFormat, int expectedProfileValueCount) public void SetValue(TestImageWriteFormat imageFormat, int expectedProfileValueCount)
{ {
Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image(); Image<Rgba32> image = TestFile.Create(TestImages.Jpeg.Baseline.Floorplan).CreateRgba32Image();
@ -411,7 +403,6 @@ namespace SixLabors.ImageSharp.Tests
[Theory] [Theory]
[InlineData(TestImageWriteFormat.Jpeg)] [InlineData(TestImageWriteFormat.Jpeg)]
[InlineData(TestImageWriteFormat.Png)] [InlineData(TestImageWriteFormat.Png)]
[InlineData(TestImageWriteFormat.Tiff)]
public void WritingImagePreservesExifProfile(TestImageWriteFormat imageFormat) public void WritingImagePreservesExifProfile(TestImageWriteFormat imageFormat)
{ {
// Arrange // Arrange
@ -486,8 +477,6 @@ namespace SixLabors.ImageSharp.Tests
return WriteAndReadJpeg(image); return WriteAndReadJpeg(image);
case TestImageWriteFormat.Png: case TestImageWriteFormat.Png:
return WriteAndReadPng(image); return WriteAndReadPng(image);
case TestImageWriteFormat.Tiff:
return WriteAndReadTiff(image);
default: default:
throw new ArgumentException("Unexpected test image format, only Jpeg, Png and Tiff are allowed"); throw new ArgumentException("Unexpected test image format, only Jpeg, Png and Tiff are allowed");
} }

Loading…
Cancel
Save