## 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](https://netpbm.sourceforge.net/doc/ppm.html) and
hence can parse those formats.
| P1-P3 | No | No |
| P5 | Yes | Yes |
| P6 | Yes | Yes |
| P7 | Yes | Yes |
| [PFM] | Yes | No |
## Usage
A simple decoding looks like
```rust
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.
[PFM]: https://www.pauldebevec.com/Research/HDR/PFM/