Browse Source

Add IsBigTif flag property in metadata

pull/1760/head
Ildar Khayrutdinov 5 years ago
parent
commit
393659f386
  1. 3
      src/ImageSharp/Formats/Tiff/Ifd/DirectoryReader.cs
  2. 4
      src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
  3. 13
      src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs
  4. 8
      src/ImageSharp/Formats/Tiff/TiffMetadata.cs

3
src/ImageSharp/Formats/Tiff/Ifd/DirectoryReader.cs

@ -29,6 +29,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// </summary>
public ByteOrder ByteOrder { get; private set; }
public bool IsBigTiff { get; private set; }
/// <summary>
/// Reads image file directories.
/// </summary>
@ -40,6 +42,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
headerReader.ReadFileHeader();
this.nextIfdOffset = headerReader.FirstIfdOffset;
this.IsBigTiff = headerReader.IsBigTiff;
return this.ReadIfds(headerReader.IsBigTiff);
}

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

@ -154,7 +154,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
frames.Add(frame);
}
ImageMetadata metadata = TiffDecoderMetadataCreator.Create(frames, this.ignoreMetadata, reader.ByteOrder);
ImageMetadata metadata = TiffDecoderMetadataCreator.Create(frames, this.ignoreMetadata, reader.ByteOrder, reader.IsBigTiff);
// TODO: Tiff frames can have different sizes
ImageFrame<TPixel> root = frames[0];
@ -180,7 +180,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
ExifProfile rootFrameExifProfile = directories.First();
var rootMetadata = TiffFrameMetadata.Parse(rootFrameExifProfile);
ImageMetadata metadata = TiffDecoderMetadataCreator.Create(reader.ByteOrder, rootFrameExifProfile);
ImageMetadata metadata = TiffDecoderMetadataCreator.Create(reader.ByteOrder, reader.IsBigTiff, rootFrameExifProfile);
int width = GetImageWidth(rootFrameExifProfile);
int height = GetImageHeight(rootFrameExifProfile);

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

@ -18,7 +18,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// </summary>
internal static class TiffDecoderMetadataCreator
{
public static ImageMetadata Create<TPixel>(List<ImageFrame<TPixel>> frames, bool ignoreMetadata, ByteOrder byteOrder)
public static ImageMetadata Create<TPixel>(List<ImageFrame<TPixel>> frames, bool ignoreMetadata, ByteOrder byteOrder, bool isBigTiff)
where TPixel : unmanaged, IPixel<TPixel>
{
if (frames.Count < 1)
@ -26,13 +26,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
TiffThrowHelper.ThrowImageFormatException("Expected at least one frame.");
}
var imageMetaData = new ImageMetadata();
ExifProfile exifProfileRootFrame = frames[0].Metadata.ExifProfile;
SetResolution(imageMetaData, exifProfileRootFrame);
TiffMetadata tiffMetadata = imageMetaData.GetTiffMetadata();
tiffMetadata.ByteOrder = byteOrder;
ImageMetadata imageMetaData = Create(byteOrder, isBigTiff, frames[0].Metadata.ExifProfile);
if (!ignoreMetadata)
{
@ -56,13 +50,14 @@ namespace SixLabors.ImageSharp.Formats.Tiff
return imageMetaData;
}
public static ImageMetadata Create(ByteOrder byteOrder, ExifProfile exifProfile)
public static ImageMetadata Create(ByteOrder byteOrder, bool isBigTiff, ExifProfile exifProfile)
{
var imageMetaData = new ImageMetadata();
SetResolution(imageMetaData, exifProfile);
TiffMetadata tiffMetadata = imageMetaData.GetTiffMetadata();
tiffMetadata.ByteOrder = byteOrder;
tiffMetadata.IsBigTiff = isBigTiff;
return imageMetaData;
}

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

@ -26,6 +26,14 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// </summary>
public ByteOrder ByteOrder { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this instance is BigTiff format.
/// </summary>
/// <value>
/// <c>true</c> if this instance BigTiff format; otherwise, <c>false</c>.
/// </value>
public bool IsBigTiff { get; set; }
/// <inheritdoc/>
public IDeepCloneable DeepClone() => new TiffMetadata(this);
}

Loading…
Cancel
Save