Skip to content

wsi-rs 0.9.1

Choose a tag to compare

@jcwal1516 jcwal1516 released this 01 Nov 05:51
· 5 commits to main since this release

wsi-rs 0.9.1 is a patch release with fixes to the tile byte locations and lossless raw reads added in 0.9.0 (#27, #32). There are no API changes. It still uses J2K 0.13.1 and JXR 0.4.0 and needs Rust 1.99 or newer.

The Python bindings are on PyPI as wsi-rs (pip install -U wsi-rs). The abi3 wheels support Python 3.10 and newer on:

  • Linux x86_64 and aarch64;
  • macOS arm64 and x86_64;
  • Windows x64.

The wheels and sdist are attached to this release.

[0.9.1] - 2026-11-01

Fixes to the tile locations and lossless raw reads added in 0.9.0. No API
changes.

Fixed

  • Raw reads of clipped right and bottom edge tiles now report the stored
    tile's size, with RawCompressedTile::tile_region locating the tile inside
    it, as tile_location does, for TIFF JPEG XR tiles and NDPI tiles read
    through restart markers. JPEG XR edge tiles reported the clipped size for a
    codestream holding the whole tile, and NDPI edge tiles reported no region.
  • A raw read cut from a baseline or progressive JPEG that the lossless crop
    cannot cut, such as a single component sampled 2x2, now returns the whole
    stored JPEG with tile_region locating the tile, as a crop over its memory
    limit does, instead of failing. A crop source that breaks the JPEG
    standard (a zero quantizer, repeated component IDs, sampling factors
    outside 1 to 4 or more than 10 blocks per MCU) now fails with
    WsiError::Jpeg rather than WsiError::Unsupported.
  • EncodedUnit::assemble and TIFF JPEG raw reads merge JPEGTables into a
    tile whenever the tile references a quantization or Huffman table it does
    not define. Before, a tile carrying any table of each kind was returned
    unchanged, so a tile with its own table 0 that needed table 1 from
    JPEGTables could not be decoded on its own. Tables the tile defines still
    take precedence.
  • DICOM tile_location now checks that the file is the one opened, as tile
    reads do, and returns the "source changed" error for a replaced file
    instead of byte ranges computed against the old one.