Browse Source

universal format detector

pull/1760/head
Ildar Khayrutdinov 4 years ago
parent
commit
d2500953f7
  1. 4
      src/ImageSharp/Formats/Tiff/TiffConfigurationModule.cs
  2. 45
      src/ImageSharp/Formats/Tiff/TiffImageFormatDetector.cs

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

@ -13,9 +13,7 @@ namespace SixLabors.ImageSharp.Formats.Tiff
{ {
configuration.ImageFormatsManager.SetEncoder(TiffFormat.Instance, new TiffEncoder()); configuration.ImageFormatsManager.SetEncoder(TiffFormat.Instance, new TiffEncoder());
configuration.ImageFormatsManager.SetDecoder(TiffFormat.Instance, new TiffDecoder()); configuration.ImageFormatsManager.SetDecoder(TiffFormat.Instance, new TiffDecoder());
configuration.ImageFormatsManager.AddImageFormatDetector(new TiffImageFormatDetector(false)); configuration.ImageFormatsManager.AddImageFormatDetector(new TiffImageFormatDetector());
configuration.ImageFormatsManager.AddImageFormatDetector(new TiffImageFormatDetector(true));
} }
} }
} }

45
src/ImageSharp/Formats/Tiff/TiffImageFormatDetector.cs

@ -10,16 +10,8 @@ namespace SixLabors.ImageSharp.Formats.Tiff
/// </summary> /// </summary>
public sealed class TiffImageFormatDetector : IImageFormatDetector public sealed class TiffImageFormatDetector : IImageFormatDetector
{ {
private readonly bool isBigTiff;
/// <summary>
/// Initializes a new instance of the <see cref="TiffImageFormatDetector"/> class.
/// </summary>
/// <param name="isBigTiff">if set to <c>true</c> is BigTiff.</param>
public TiffImageFormatDetector(bool isBigTiff) => this.isBigTiff = isBigTiff;
/// <inheritdoc/> /// <inheritdoc/>
public int HeaderSize => this.isBigTiff ? 8 : 4; public int HeaderSize => 8;
/// <inheritdoc/> /// <inheritdoc/>
public IImageFormat DetectFormat(ReadOnlySpan<byte> header) public IImageFormat DetectFormat(ReadOnlySpan<byte> header)
@ -39,39 +31,32 @@ namespace SixLabors.ImageSharp.Formats.Tiff
if (header[0] == 0x49 && header[1] == 0x49) if (header[0] == 0x49 && header[1] == 0x49)
{ {
// Little-endian // Little-endian
if (this.isBigTiff is false) if (header[2] == 0x2A && header[3] == 0x00)
{ {
if (header[2] == 0x2A && header[3] == 0x00) // tiff
{ return true;
return true;
}
} }
else else if (header[2] == 0x2B && header[3] == 0x00
&& header[4] == 8 && header[5] == 0 && header[6] == 0 && header[7] == 0)
{ {
if (header[2] == 0x2B && header[3] == 0x00 // big tiff
&& header[4] == 8 && header[5] == 0 && header[6] == 0 && header[7] == 0) return true;
{
return true;
}
} }
} }
else if (header[0] == 0x4D && header[1] == 0x4D) else if (header[0] == 0x4D && header[1] == 0x4D)
{ {
// Big-endian // Big-endian
if (this.isBigTiff is false) if (header[2] == 0 && header[3] == 0x2A)
{ {
if (header[2] == 0 && header[3] == 0x2A) // tiff
{ return true;
return true;
}
} }
else else
if (header[2] == 0 && header[3] == 0x2B
&& header[4] == 0 && header[5] == 8 && header[6] == 0 && header[7] == 0)
{ {
if (header[2] == 0 && header[3] == 0x2B // big tiff
&& header[4] == 0 && header[5] == 8 && header[6] == 0 && header[7] == 0) return true;
{
return true;
}
} }
} }
} }

Loading…
Cancel
Save