diff --git a/src/ImageSharp/Formats/Tiff/Ifd/DirectoryReader.cs b/src/ImageSharp/Formats/Tiff/Ifd/DirectoryReader.cs
index bd673cf3a4..e8a0871230 100644
--- a/src/ImageSharp/Formats/Tiff/Ifd/DirectoryReader.cs
+++ b/src/ImageSharp/Formats/Tiff/Ifd/DirectoryReader.cs
@@ -29,6 +29,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff
///
public ByteOrder ByteOrder { get; private set; }
+ public bool IsBigTiff { get; private set; }
+
///
/// Reads image file directories.
///
@@ -40,6 +42,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
headerReader.ReadFileHeader();
this.nextIfdOffset = headerReader.FirstIfdOffset;
+ this.IsBigTiff = headerReader.IsBigTiff;
return this.ReadIfds(headerReader.IsBigTiff);
}
diff --git a/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs b/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
index 4ab920ff89..3aae61448b 100644
--- a/src/ImageSharp/Formats/Tiff/TiffDecoderCore.cs
+++ b/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 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);
diff --git a/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs b/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs
index 6f8a81a827..ddaf6fa96c 100644
--- a/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs
+++ b/src/ImageSharp/Formats/Tiff/TiffDecoderMetadataCreator.cs
@@ -18,7 +18,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
///
internal static class TiffDecoderMetadataCreator
{
- public static ImageMetadata Create(List> frames, bool ignoreMetadata, ByteOrder byteOrder)
+ public static ImageMetadata Create(List> frames, bool ignoreMetadata, ByteOrder byteOrder, bool isBigTiff)
where TPixel : unmanaged, IPixel
{
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;
}
diff --git a/src/ImageSharp/Formats/Tiff/TiffMetadata.cs b/src/ImageSharp/Formats/Tiff/TiffMetadata.cs
index cf1ab37545..d537981dbe 100644
--- a/src/ImageSharp/Formats/Tiff/TiffMetadata.cs
+++ b/src/ImageSharp/Formats/Tiff/TiffMetadata.cs
@@ -26,6 +26,14 @@ namespace SixLabors.ImageSharp.Formats.Tiff
///
public ByteOrder ByteOrder { get; set; }
+ ///
+ /// Gets or sets a value indicating whether this instance is BigTiff format.
+ ///
+ ///
+ /// true if this instance BigTiff format; otherwise, false.
+ ///
+ public bool IsBigTiff { get; set; }
+
///
public IDeepCloneable DeepClone() => new TiffMetadata(this);
}