Browse Source

Make TiffFrameMetadata internal

pull/1553/head
Brian Popow 5 years ago
parent
commit
09f4957ce5
  1. 7
      src/ImageSharp/Formats/Tiff/MetadataExtensions.cs
  2. 3
      src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
  3. 14
      src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs
  4. 5
      src/ImageSharp/Formats/Tiff/TiffFormat.cs
  5. 2
      src/ImageSharp/Formats/Tiff/TiffFrameMetadata.cs
  6. 37
      tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs
  7. 16
      tests/ImageSharp.Tests/Formats/Tiff/TiffMetadataTests.cs

7
src/ImageSharp/Formats/Tiff/MetadataExtensions.cs

@ -17,12 +17,5 @@ namespace SixLabors.ImageSharp
/// <param name="metadata">The metadata this method extends.</param>
/// <returns>The <see cref="TiffMetadata"/>.</returns>
public static TiffMetadata GetTiffMetadata(this ImageMetadata metadata) => metadata.GetFormatMetadata(TiffFormat.Instance);
/// <summary>
/// Gets the tiff format specific metadata for the image frame.
/// </summary>
/// <param name="metadata">The metadata this method extends.</param>
/// <returns>The <see cref="TiffFrameMetadata"/>.</returns>
public static TiffFrameMetadata GetTiffMetadata(this ImageFrameMetadata metadata) => metadata.GetFormatMetadata(TiffFormat.Instance);
}
}

3
src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs

@ -179,8 +179,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
ImageFrameMetadata imageFrameMetaData = this.ignoreMetadata ?
new ImageFrameMetadata() :
new ImageFrameMetadata { ExifProfile = tags, XmpProfile = tags.GetValue(ExifTag.XMP)?.Value };
tiffFrameMetaData = imageFrameMetaData.GetTiffMetadata();
tiffFrameMetaData.Initialize(tags);
tiffFrameMetaData = new TiffFrameMetadata(tags);
this.VerifyAndParse(tiffFrameMetaData);

14
src/ImageSharp/Formats/Tiff/TiffEncoderCore.cs

@ -112,9 +112,9 @@ namespace SixLabors.ImageSharp.Formats.Tiff
this.configuration = image.GetConfiguration();
ImageMetadata metadata = image.Metadata;
TiffMetadata tiffMetadata = metadata.GetTiffMetadata();
TiffFrameMetadata rootFrameMetaData = image.Frames.RootFrame.Metadata.GetTiffMetadata();
TiffPhotometricInterpretation rootFramePhotometricInterpretation = GetRootFramePhotometricInterpretation(image);
TiffPhotometricInterpretation photometricInterpretation = this.Mode == TiffEncodingMode.ColorPalette
? TiffPhotometricInterpretation.PaletteColor : rootFrameMetaData.PhotometricInterpretation;
? TiffPhotometricInterpretation.PaletteColor : rootFramePhotometricInterpretation;
this.SetMode(tiffMetadata, photometricInterpretation);
this.SetBitsPerPixel(tiffMetadata);
@ -375,5 +375,15 @@ namespace SixLabors.ImageSharp.Formats.Tiff
break;
}
}
private static TiffPhotometricInterpretation GetRootFramePhotometricInterpretation(Image image)
{
ExifProfile exifProfile = image.Frames.RootFrame.Metadata.ExifProfile;
TiffPhotometricInterpretation rootFramePhotometricInterpretation =
exifProfile?.GetValue(ExifTag.PhotometricInterpretation) != null
? (TiffPhotometricInterpretation)exifProfile?.GetValue(ExifTag.PhotometricInterpretation).Value
: TiffPhotometricInterpretation.WhiteIsZero;
return rootFramePhotometricInterpretation;
}
}
}

5
src/ImageSharp/Formats/Tiff/TiffFormat.cs

@ -10,7 +10,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// <summary>
/// Encapsulates the means to encode and decode Tiff images.
/// </summary>
public class TiffFormat : IImageFormat<TiffMetadata, TiffFrameMetadata>
public class TiffFormat : IImageFormat<TiffMetadata>
{
private TiffFormat()
{
@ -35,8 +35,5 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// <inheritdoc/>
public TiffMetadata CreateDefaultFormatMetadata() => new TiffMetadata();
/// <inheritdoc/>
public TiffFrameMetadata CreateDefaultFormatFrameMetadata() => new TiffFrameMetadata();
}
}

2
src/ImageSharp/Formats/Tiff/TiffFrameMetadata.cs

@ -14,7 +14,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// <summary>
/// Provides Tiff specific metadata information for the frame.
/// </summary>
public class TiffFrameMetadata : IDeepCloneable
internal class TiffFrameMetadata : IDeepCloneable
{
private const TiffPlanarConfiguration DefaultPlanarConfiguration = TiffPlanarConfiguration.Chunky;

37
tests/ImageSharp.Tests/Formats/Tiff/TiffEncoderTests.cs

@ -6,6 +6,7 @@ using System.IO;
using SixLabors.ImageSharp.Formats;
using SixLabors.ImageSharp.Formats.Tiff;
using SixLabors.ImageSharp.Formats.Tiff.Constants;
using SixLabors.ImageSharp.Metadata.Profiles.Exif;
using SixLabors.ImageSharp.PixelFormats;
using SixLabors.ImageSharp.Tests.TestUtilities.ImageComparison;
using SixLabors.ImageSharp.Tests.TestUtilities.ReferenceCodecs;
@ -49,9 +50,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
memStream.Position = 0;
using var output = Image.Load<Rgba32>(Configuration, memStream);
TiffMetadata meta = output.Metadata.GetTiffMetadata();
TiffFrameMetadata frameMetaData = output.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfile = output.Frames.RootFrame.Metadata.ExifProfile;
Assert.Equal(expectedBitsPerPixel, meta.BitsPerPixel);
Assert.Equal(TiffCompression.None, frameMetaData.Compression);
Assert.Equal(TiffCompression.None, (TiffCompression)exifProfile.GetValue(ExifTag.Compression).Value);
}
[Theory]
@ -73,9 +74,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
memStream.Position = 0;
using var output = Image.Load<Rgba32>(Configuration, memStream);
TiffMetadata meta = output.Metadata.GetTiffMetadata();
TiffFrameMetadata frameMetaData = output.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfile = output.Frames.RootFrame.Metadata.ExifProfile;
Assert.Equal(bitsPerPixel, meta.BitsPerPixel);
Assert.Equal(TiffCompression.None, frameMetaData.Compression);
Assert.Equal(TiffCompression.None, (TiffCompression)exifProfile.GetValue(ExifTag.Compression).Value);
}
[Theory]
@ -113,9 +114,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
memStream.Position = 0;
using var output = Image.Load<Rgba32>(Configuration, memStream);
TiffMetadata meta = output.Metadata.GetTiffMetadata();
TiffFrameMetadata frameMetaData = output.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfile = output.Frames.RootFrame.Metadata.ExifProfile;
Assert.Equal(expectedBitsPerPixel, meta.BitsPerPixel);
Assert.Equal(expectedCompression, frameMetaData.Compression);
Assert.Equal(expectedCompression, (TiffCompression)exifProfile.GetValue(ExifTag.Compression).Value);
}
[Theory]
@ -163,9 +164,9 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
memStream.Position = 0;
using var output = Image.Load<Rgba32>(Configuration, memStream);
TiffMetadata meta = output.Metadata.GetTiffMetadata();
TiffFrameMetadata frameMetaData = output.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfile = output.Frames.RootFrame.Metadata.ExifProfile;
Assert.Equal(TiffBitsPerPixel.Bit1, meta.BitsPerPixel);
Assert.Equal(expectedCompression, frameMetaData.Compression);
Assert.Equal(expectedCompression, (TiffCompression)exifProfile.GetValue(ExifTag.Compression).Value);
}
[Theory]
@ -337,7 +338,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
var tiffEncoder = new TiffEncoder() { Mode = mode, Compression = compression };
using Image<TPixel> input = provider.GetImage();
using var memStream = new MemoryStream();
TiffFrameMetadata inputMeta = input.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfileInput = input.Frames.RootFrame.Metadata.ExifProfile;
var inputMeta = new TiffFrameMetadata(exifProfileInput);
// act
input.Save(memStream, tiffEncoder);
@ -345,14 +347,15 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
// assert
memStream.Position = 0;
using var output = Image.Load<Rgba32>(Configuration, memStream);
TiffFrameMetadata meta = output.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfileOutput = output.Frames.RootFrame.Metadata.ExifProfile;
var outputMeta = new TiffFrameMetadata(exifProfileOutput);
ImageFrame<Rgba32> rootFrame = output.Frames.RootFrame;
Assert.True(output.Height > (int)meta.RowsPerStrip);
Assert.True(meta.StripOffsets.Length > 1);
Assert.True(meta.StripByteCounts.Length > 1);
Assert.True(output.Height > (int)outputMeta.RowsPerStrip);
Assert.True(outputMeta.StripOffsets.Length > 1);
Assert.True(outputMeta.StripByteCounts.Length > 1);
foreach (Number sz in meta.StripByteCounts)
foreach (Number sz in outputMeta.StripByteCounts)
{
Assert.True((uint)sz <= TiffConstants.DefaultStripSize);
}
@ -360,11 +363,11 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
// For uncompressed more accurate test.
if (compression == TiffCompression.None)
{
for (int i = 0; i < meta.StripByteCounts.Length - 1; i++)
for (int i = 0; i < outputMeta.StripByteCounts.Length - 1; i++)
{
// The difference must be less than one row.
int stripBytes = (int)meta.StripByteCounts[i];
int widthBytes = (meta.BitsPerPixel + 7) / 8 * rootFrame.Width;
int stripBytes = (int)outputMeta.StripByteCounts[i];
int widthBytes = (outputMeta.BitsPerPixel + 7) / 8 * rootFrame.Width;
Assert.True((TiffConstants.DefaultStripSize - stripBytes) < widthBytes);
}

16
tests/ImageSharp.Tests/Formats/Tiff/TiffMetadataTests.cs

@ -55,7 +55,8 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
{
using (Image<TPixel> image = provider.GetImage(TiffDecoder))
{
TiffFrameMetadata meta = image.Frames.RootFrame.Metadata.GetTiffMetadata();
ExifProfile exifProfile = image.Frames.RootFrame.Metadata.ExifProfile;
var meta = new TiffFrameMetadata(exifProfile);
var cloneSameAsSampleMetaData = (TiffFrameMetadata)meta.DeepClone();
VerifyExpectedTiffFrameMetaDataIsPresent(cloneSameAsSampleMetaData);
@ -168,9 +169,6 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.Equal(4, exifProfile.GetValue(ExifTag.Rating).Value);
Assert.Equal(75, exifProfile.GetValue(ExifTag.RatingPercent).Value);
TiffFrameMetadata tiffFrameMetadata = rootFrame.Metadata.GetTiffMetadata();
Assert.NotNull(tiffFrameMetadata);
ImageMetadata imageMetaData = image.Metadata;
Assert.NotNull(imageMetaData);
Assert.Equal(PixelResolutionUnit.PixelsPerInch, imageMetaData.ResolutionUnits);
@ -182,12 +180,14 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.Equal(ByteOrder.LittleEndian, tiffMetaData.ByteOrder);
Assert.Equal(TiffBitsPerPixel.Bit4, tiffMetaData.BitsPerPixel);
var tiffFrameMetadata = new TiffFrameMetadata(exifProfile);
VerifyExpectedTiffFrameMetaDataIsPresent(tiffFrameMetadata);
}
}
private static void VerifyExpectedTiffFrameMetaDataIsPresent(TiffFrameMetadata frameMetaData)
{
Assert.NotNull(frameMetaData);
Assert.Equal(TiffBitsPerSample.Bit4, frameMetaData.BitsPerSample);
Assert.Equal(TiffCompression.Lzw, frameMetaData.Compression);
Assert.Equal(TiffPhotometricInterpretation.PaletteColor, frameMetaData.PhotometricInterpretation);
@ -222,12 +222,12 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
Assert.Equal(2, image.Frames.Count);
TiffFrameMetadata frame0MetaData = image.Frames[0].Metadata.GetTiffMetadata();
var frame0MetaData = new TiffFrameMetadata(image.Frames[0].Metadata.ExifProfile);
Assert.Equal(TiffNewSubfileType.FullImage, frame0MetaData.SubfileType);
Assert.Equal(255, image.Frames[0].Width);
Assert.Equal(255, image.Frames[0].Height);
TiffFrameMetadata frame1MetaData = image.Frames[1].Metadata.GetTiffMetadata();
var frame1MetaData = new TiffFrameMetadata(image.Frames[1].Metadata.ExifProfile);
Assert.Equal(TiffNewSubfileType.Preview, frame1MetaData.SubfileType);
Assert.Equal(255, image.Frames[1].Width);
Assert.Equal(255, image.Frames[1].Height);
@ -244,7 +244,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
ImageMetadata inputMetaData = image.Metadata;
TiffMetadata tiffMetaInput = image.Metadata.GetTiffMetadata();
TiffFrameMetadata frameMetaInput = image.Frames.RootFrame.Metadata.GetTiffMetadata();
var frameMetaInput = new TiffFrameMetadata(image.Frames.RootFrame.Metadata.ExifProfile);
ImageFrame<TPixel> rootFrameInput = image.Frames.RootFrame;
byte[] xmpProfileInput = rootFrameInput.Metadata.XmpProfile;
ExifProfile rootFrameExifProfileInput = rootFrameInput.Metadata.ExifProfile;
@ -264,7 +264,7 @@ namespace SixLabors.ImageSharp.Tests.Formats.Tiff
ImageMetadata encodedImageMetaData = encodedImage.Metadata;
TiffMetadata tiffMetaDataEncodedImage = encodedImageMetaData.GetTiffMetadata();
ImageFrame<Rgba32> rootFrameEncodedImage = encodedImage.Frames.RootFrame;
TiffFrameMetadata tiffMetaDataEncodedRootFrame = rootFrameEncodedImage.Metadata.GetTiffMetadata();
var tiffMetaDataEncodedRootFrame = new TiffFrameMetadata(rootFrameEncodedImage.Metadata.ExifProfile);
ExifProfile encodedImageExifProfile = rootFrameEncodedImage.Metadata.ExifProfile;
byte[] encodedImageXmpProfile = rootFrameEncodedImage.Metadata.XmpProfile;

Loading…
Cancel
Save