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
250KB
4K
SLoC
xisf-rs
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 | ❌ | ❌ | |
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 | ❌ | ❌ | ❌ |
- Does not support 64-bit integers
- Scalar, Complex, String, and TimePoint only; no 128-bit floating point values
- 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
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)
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