Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

developmentseed/async-tiff

Open more actions menu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

206 Commits
206 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

async-tiff

An async, low-level TIFF reader for Rust and Python.

Features

  • Async, read-only support for tiled TIFF images.
  • Read directly from object storage providers, via the object_store crate.
  • Separation of concerns between data reading and decoding so that IO-bound and CPU-bound tasks can be scheduled appropriately.
  • Support for user-defined decompression algorithms.
  • Tile request merging and concurrency.
  • Integration with the ndarray crate for easy manipulation of decoded image data.
  • Support for GeoTIFF tag metadata.
  • Supported compressions:
    • Deflate, LERC, LERC+Deflate, LERC+ZSTD, LZMA, LZW, JPEG, JPEG2000, WebP, ZSTD
    • Support for user-defined decompression algorithms.

Example

# tokio_test::block_on(async {
# use std::sync::Arc;
# use std::env::current_dir;
#
use object_store::local::LocalFileSystem;
use async_tiff::metadata::TiffMetadataReader;
use async_tiff::metadata::cache::ReadaheadMetadataCache;
use async_tiff::reader::ObjectReader;
use async_tiff::TIFF;

let store = Arc::new(LocalFileSystem::new_with_prefix(current_dir().unwrap()).unwrap());
let reader = ObjectReader::new(store, "fixtures/image-tiff/tiled-jpeg-rgb-u8.tif".into());
let cache = ReadaheadMetadataCache::new(reader.clone());

let mut meta = TiffMetadataReader::try_open(&cache).await.unwrap();
let ifds = meta.read_all_ifds(&cache).await.unwrap();
let tiff = TIFF::new(ifds, meta.endianness());

// Fetch and decode a tile
let tile = tiff.ifds()[0].fetch_tile(0, 0, &reader).await.unwrap();
let array = tile.decode(&Default::default()).unwrap();
println!("shape: {:?}, dtype: {:?}", array.shape(), array.data_type());
# })

Background

The existing tiff crate is great, but only supports synchronous reading of TIFF files. Furthermore, due to low maintenance bandwidth it is not designed for extensibility (see #250).

This crate was initially forked from the tiff crate, and still maintains some of its TIFF tag parsing code.

Releases

Packages

Used by

Contributors

Languages

Morty Proxy This is a proxified and sanitized view of the page, visit original site.