#astronomy #decoder #color-space #file-format #reader #thumbnail #xisf

xisf-rs

Reader (eventually writer) library for the XISF astronomy image file format

4 releases

0.0.4 Sep 13, 2023
0.0.3 Sep 8, 2023
0.0.2 Aug 23, 2023
0.0.1 Aug 23, 2023

#11 in #thumbnail

MIT license

250KB
4K SLoC

xisf-rs

Crates.io docs.rs Minimum rustc version License

An unaffiliated implementation of Pleiades Astrophoto's open-source Extensible Image Serialization Format (XISF) file format, the native image format for their flagship editing software PixInsight. Aims for 100% support for spec version 1.0, as opposed to implementations such as libXISF or Pleiades Astrophoto's own PixInsight Class Libraries, which are written with 2D images in mind. Currently under rapid development, but all changes to the public API will be accompanied with a version update following Cargo's SemVer guidelines before being pushed to crates.io.

Feature Comparison

  xisf-rs libXISF PCL
Language Rust C++ C++
License MIT GPLv3 BSD-4-Clause-like
Monolithic Files Decode Encode + Decode Encode + Decode
Distributed Files
Decode (Partial)http, https, ftp, see road map
N-D Images
Pixel Sample Formats Scalar, Complex Agnostic (Raw Bytes Only) Scalar1, Complex
Image Metadata
Attributes, XISF Properties2, FITS Keywords, ICC Profile, RGB Working Space, Display Function, CFA, Resolution, Thumbnail
Attributes3, XISF Properties4, FITS Keywords5, ICC Profile, CFA, Thumbnail
Attributes6, XISF Properties, FITS Keywords, ICC Profile, RGB Working Space, Display Function, CFA, Resolution, Thumbnail
Supported XISF Property Locations <Image>, <Metadata>, <xisf> <Image> <Image>, <Metadata>, <xisf>
<Table> Element
<Reference> Element
Data Block Compression
7zlib, lz4, lz4hc, zstd
7, 8zlib, lz4, lz4hc, zstd
7zlib, lz4, lz4hc, zstd
Checksum Verification
XML Digital Signature Verification
  1. Does not support 64-bit integers
  2. Scalar, Complex, String, and TimePoint only; no 128-bit floating point values
  3. Only mandatory attributes and colorSpace
  4. Int32, Float32, Float64, String, and TimePoint only
  5. Raw strings only; cannot parse values
  6. Missing imageType, offset, orientation, and uuid attributes
  7. zstd support is nonstandard for spec version 1.0, but has been confirmed for an upcoming version of the standard
  8. Sub-blocks not yet supported (this limits supported images to 4GiB)

Dependencies

  • Minimum Supported Rust Version (MSRV): 1.64.0, verified for x86_64-unknown-linux-gnu
  • libxml2 (MIT)
  • lz4 (BSD-2-Clause)
  • zstd (BSD-3-Clause)
  • Can be configured to use zlib (Zlib) or zlib-ng (Zlib)
  • Test suite requires a Docker installation when the remote-ftp feature is enabled

Road Map

  • Read N-dimensional images
  • Data block compression
  • Checksum verification
  • Images of complex numbers
  • <Reference> element
  • <FITSKeyword> element
  • Image thumbnails
  • Remote resources
    • Ask user for trust before connecting
    • Caching
      • Files with a checksum are read through twice, and right now that means the file gets downloaded twice
    • Authorization/Credentials Store
      • Stateful schemes like FTP require keeping track of sessions
    • XISB files
    • SFTP/SCP
  • Non-<Property> image metadata
  • Scalar, Complex, String, and TimePoint <Property> elements
  • Write monolithic files
  • <Table> element
  • Vector, Matrix <Property> elements
  • Write distributed files
  • Color space conversion?
  • XML Digital Signature verification
  • 128-bit floating point <Property> types
  • async data block read functions
  • C/C++11 interface with cbindgen

Dependencies

~13–21MB
~288K SLoC