TIFF image format encoding and decoding support for SkiaSharp. Encode/decode TIFF images with support for multi-page files, various compressions (LZW, Deflate, JPEG), color spaces (RGB, RGBA, Grayscale), and EXIF metadata.
$ dotnet add package SkiaSharp.TiffTIFF image format encoding and decoding support for SkiaSharp, providing full support for multi-page TIFF files, various compression algorithms, and EXIF metadata.
dotnet add package SkiaSharp.Tiff
Or via NuGet Package Manager:
Install-Package SkiaSharp.Tiffusing SkiaSharp;
using SkiaSharp.Tiff;
// Decode from file
using var bitmap = TiffDecoder.Decode("image.tiff");
// Decode from stream
using var stream = File.OpenRead("image.tiff");
using var bitmap = TiffDecoder.Decode(stream);
// Decode from byte array
byte[] data = File.ReadAllBytes("image.tiff");
using var bitmap = TiffDecoder.Decode(data);
// Async decoding
using var bitmap = await TiffDecoder.DecodeAsync("image.tiff");using SkiaSharp;
using SkiaSharp.Tiff;
using SkiaSharp.Tiff.Options;
using SkiaSharp.Tiff.Enums;
// Encode with default options (LZW compression)
byte[] tiffData = TiffEncoder.Encode(bitmap);
// Save to file
TiffEncoder.Save(bitmap, "output.tiff");
// With custom options
var options = new TiffEncodingOptions
{
Compression = TiffCompression.Deflate,
ResolutionDpi = 300
};
TiffEncoder.Save(bitmap, "output.tiff", options);
// JPEG compression (lossy, smaller files)
var jpegOptions = TiffEncodingOptions.WithJpeg(quality: 85);
TiffEncoder.Save(bitmap, "output.tiff", jpegOptions);// Create multi-page TIFF
var bitmaps = new List<SKBitmap> { page1, page2, page3 };
TiffEncoder.SaveMultiPage(bitmaps, "document.tiff");
// Read all pages
var pages = TiffDecoder.DecodeAllPages("document.tiff");
// Read specific page
using var page2 = TiffDecoder.DecodePage("document.tiff", pageIndex: 1);
// Get page count
int pageCount = TiffDecoder.GetPageCount("document.tiff");using var info = TiffDecoder.DecodeWithInfo("image.tiff");
Console.WriteLine($"Size: {info.ImageInfo.Width}x{info.ImageInfo.Height}");
Console.WriteLine($"Has Alpha: {info.HasAlpha}");
Console.WriteLine($"Pages: {info.PageCount}");
// Access EXIF metadata
if (info.Exif != null)
{
Console.WriteLine($"Camera: {info.Exif.Make} {info.Exif.Model}");
Console.WriteLine($"Date: {info.Exif.DateTimeOriginal}");
}
// Get oriented image (applies EXIF rotation)
using var oriented = info.GetOrientedImage();using SkiaSharp.Tiff.Extensions;
// From TIFF (static methods)
var bitmap = SKBitmapTiffExtensions.FromTiff("image.tiff");
// To TIFF (extension methods)
byte[] tiffData = bitmap.ToTiff();
bitmap.SaveAsTiff("output.tiff");
// Convert to other formats
bitmap.SaveAsPng("output.png");
bitmap.SaveAsJpeg("output.jpg", quality: 90);
bitmap.SaveAsWebp("output.webp", quality: 85);// Check if data is valid TIFF
bool canDecode = TiffDecoder.CanDecode(stream);
bool canDecode = TiffDecoder.CanDecode(headerBytes);
// Safe decoding with TryDecode
if (TiffDecoder.TryDecode("image.tiff", out var bitmap))
{
// Use bitmap
bitmap.Dispose();
}
// Get info without full decode
var info = TiffDecoder.GetImageInfo("image.tiff");
if (info.HasValue)
{
Console.WriteLine($"Size: {info.Value.Width}x{info.Value.Height}");
}| Compression | Type | Best For |
|---|---|---|
None | Uncompressed | Maximum quality, fast processing |
Lzw | Lossless | General purpose (default) |
Deflate | Lossless | Smaller files, good compression |
Jpeg | Lossy | Photos, smallest files |
PackBits | Lossless | Simple RLE, fast |
var options = new TiffEncodingOptions
{
Compression = TiffCompression.Lzw, // Compression algorithm
JpegQuality = 90, // Quality for JPEG (1-100)
BitsPerSample = 8, // Bit depth
IncludeAlpha = true, // Include alpha channel
ResolutionDpi = 300, // DPI for both X and Y
Software = "MyApp" // Software tag
};var options = new TiffDecodingOptions
{
PageIndex = 0, // Page to decode (0-based)
ApplyOrientation = true, // Apply EXIF orientation
IgnorePageErrors = false // Skip corrupted pages
};
using var bitmap = TiffDecoder.Decode("image.tiff", options);The included console converter demonstrates all features:
# Convert TIFF to other formats
ConsoleConverter decode photo.tiff photo.png
ConsoleConverter decode photo.tiff photo.jpg --quality 85
# Convert to TIFF
ConsoleConverter encode photo.png photo.tiff --compression deflate
# Show TIFF information
ConsoleConverter info document.tiff
# Extract pages from multi-page TIFF
ConsoleConverter pages document.tiff ./extracted/
# Merge images into multi-page TIFF
ConsoleConverter merge page1.png page2.png page3.png output.tiffMIT License - see LICENSE file for details.