#ppm #codec #decoder #parser #pixel-format #ppm-decoder

zune-ppm

Portable Pixmap and Portable Floatmap Format Decoder and Encoder

2 unstable releases

0.5.0-rc0 Apr 7, 2024
0.4.0 Nov 16, 2023

#892 in Images

Download history 70/week @ 2024-06-15 32/week @ 2024-06-22 66/week @ 2024-06-29 21/week @ 2024-07-06 10/week @ 2024-07-13 29/week @ 2024-07-20 236/week @ 2024-07-27 164/week @ 2024-08-03 154/week @ 2024-08-10 10/week @ 2024-08-17 37/week @ 2024-08-24 54/week @ 2024-08-31 11/week @ 2024-09-07 16/week @ 2024-09-14 38/week @ 2024-09-21 67/week @ 2024-09-28

134 downloads per month
Used in zune-image

MIT OR Apache-2.0 OR Zlib

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.

Dependencies