2 unstable releases
0.5.0-rc0 | Apr 7, 2024 |
---|---|
0.4.0 | Nov 16, 2023 |
#892 in Images
134 downloads per month
Used in zune-image
130KB
2K
SLoC
zune-ppm
A Portable Pixel Format (PPM) and Portable FloatMap Format (PFM) decoder and encoder
This crate contains a decoder and encoder that understands the ppm specification and hence can parse those formats.
Format | Decoder | Encoder |
---|---|---|
P1-P3 | No | No |
P5 | Yes | Yes |
P6 | Yes | Yes |
P7 | Yes | Yes |
PFM | Yes | No |
Usage
A simple decoding looks like
use zune_ppm::PPMDecoder;
use zune_ppm::PPMDecodeErrors;
use zune_core::result::DecodingResult;
fn main()->Result<(),PPMDecodeErrors>{
let mut decoder = PPMDecoder::new(&[]);
let pix = decoder.decode()?;
match pix {
DecodingResult::U8(_) => {
// deal with 8 bit images
}
DecodingResult::U16(_) => {
// deal with 16 bit images
}
DecodingResult::F32(_) => {
// deal with 32 bit images (PFM)
},
_=>unreachable!()
};
Ok(())
}
Note that all routes have to be handled since PPMs come in many flavours.
Speed
PPM isn't really a format where speed matters, hence benchmarks have been skipped. Nonetheless the library is still as efficient as they come
Security
The crate is continuously fuzzed in CI to ensure that untrusted input does not cause panics
The library also has #!forbid[(unsafe_code)]
to help prevent any future unsafe creep.