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.
xisf-rs |
libXISF |
PCL |
|
---|---|---|---|
Language | Rust | C++ | C++ |
License | MIT/Apache | GPLv3 | BSD-4-Clause-like |
Monolithic Files | Read | Read + Write | Read + Write |
Distributed Files | ❌ | ❌ | |
N-D Images | ✅ | ❌ | ❌ |
Pixel Sample Formats | Scalar, Complex | Agnostic (Raw Bytes Only) | Scalar1, Complex |
Image Metadata | EverythingAttributes, XISF Properties, FITS Keywords, ICC Profile, RGB Working Space, Display Function, CFA, Resolution, Thumbnail |
BasicAttributes2, XISF Properties3, FITS Keywords4, ICC Profile, CFA, Thumbnail |
Nearly EverythingAttributes5, XISF Properties6, 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 | ❌ | ❌ | ❌ |
Footnotes
- Does not support 64-bit integer pixel samples
- Only mandatory attributes and colorSpace
- Int32, Float32, Float64, String, and TimePoint only
- Raw strings only; cannot parse values
- Missing imageType, offset, orientation, and uuid attributes
- No 128-bit integer or floating point values
zstd
support is nonstandard for spec version 1.0, but has been confirmed for an upcoming version of the standard- Sub-blocks not yet supported (this limits supported images to 4GiB)
- Minimum Supported Rust Version (MSRV): 1.67.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)
- gcc quadmath (LGPL v2.1) when the
f128
feature is enabled- quadmath doesn't support every CPU architecture, so 128-bit floating point properties are limited to those architectures
- Test suite requires a Docker installation when the
remote-ftp
feature is enabled
- 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 - Vector, Matrix
<Property>
elements - 128-bit floating point
<Property>
types - Write monolithic files
-
<Table>
element - Property format strings
- Write distributed files
- Color space conversion?
- XML Digital Signature verification
- async data block read functions
- C/C++11 interface with
cbindgen