Crate png

Source
Expand description

§PNG encoder and decoder

This crate contains a PNG encoder and decoder. It supports reading of single lines or whole frames.

§The decoder

The most important types for decoding purposes are Decoder and Reader. They both wrap a std::io::Read. Decoder serves as a builder for Reader. Calling Decoder::read_info reads from the Read until the image data is reached.

§Using the decoder

use std::fs::File;
// The decoder is a build for reader and can be used to set various decoding options
// via `Transformations`. The default output transformation is `Transformations::IDENTITY`.
let decoder = png::Decoder::new(File::open("tests/pngsuite/basi0g01.png").unwrap());
let mut reader = decoder.read_info().unwrap();
// Allocate the output buffer.
let mut buf = vec![0; reader.output_buffer_size()];
// Read the next frame. An APNG might contain multiple frames.
let info = reader.next_frame(&mut buf).unwrap();
// Grab the bytes of the image.
let bytes = &buf[..info.buffer_size()];
// Inspect more details of the last read frame.
let in_animation = reader.info().frame_control.is_some();

§Encoder

§Using the encoder

// For reading and opening files
use std::path::Path;
use std::fs::File;
use std::io::BufWriter;

let path = Path::new(r"/path/to/image.png");
let file = File::create(path).unwrap();
let ref mut w = BufWriter::new(file);

let mut encoder = png::Encoder::new(w, 2, 1); // Width is 2 pixels and height is 1.
encoder.set_color(png::ColorType::Rgba);
encoder.set_depth(png::BitDepth::Eight);
encoder.set_source_gamma(png::ScaledFloat::from_scaled(45455)); // 1.0 / 2.2, scaled by 100000
encoder.set_source_gamma(png::ScaledFloat::new(1.0 / 2.2));     // 1.0 / 2.2, unscaled, but rounded
let source_chromaticities = png::SourceChromaticities::new(     // Using unscaled instantiation here
    (0.31270, 0.32900),
    (0.64000, 0.33000),
    (0.30000, 0.60000),
    (0.15000, 0.06000)
);
encoder.set_source_chromaticities(source_chromaticities);
let mut writer = encoder.write_header().unwrap();

let data = [255, 0, 0, 255, 0, 0, 0, 255]; // An array containing a RGBA sequence. First pixel is red and second pixel is black.
writer.write_image_data(&data).unwrap(); // Save

Modules§

chunk
Chunk types and functions
text_metadata
Text chunks (tEXt/zTXt/iTXt) structs and functions

Structs§

Adam7Info
Describes which stage of the Adam7 algorithm applies to a decoded row.
AnimationControl
Animation control information
CodingIndependentCodePoints
Coding-independent code points (cICP) specify the color space (primaries), transfer function, matrix coefficients and scaling factor of the image using the code points specified in ITU-T-H.273.
ContentLightLevelInfo
Content light level information of HDR content.
DecodeOptions
Decoder configuration options
Decoder
PNG Decoder
Encoder
PNG Encoder.
FrameControl
Frame control information
Info
PNG info struct
InterlacedRow
A row of data with interlace information attached.
Limits
Limits on the resources the Decoder is allowed too use
MasteringDisplayColorVolume
Mastering Display Color Volume (mDCV) used at the point of content creation, as specified in SMPTE-ST-2086.
OutputInfo
Output info.
ParameterError
PixelDimensions
Pixel dimensions information
Reader
PNG reader (mostly high-level interface)
ScaledFloat
An unsigned integer scaled version of a floating point value, equivalent to an integer quotient with fixed denominator (100_000)).
SourceChromaticities
Chromaticities of the color space primaries
StreamWriter
Streaming PNG writer
StreamingDecoder
PNG StreamingDecoder (low-level interface)
Transformations
Output transformations
Writer
PNG writer

Enums§

AdaptiveFilterType
Adaptive filtering tries every possible filter for each row and uses a heuristic to select the best one. This improves compression ratio, but makes encoding slightly slower.
BitDepth
Bit depth of the PNG file. Specifies the number of bits per sample.
BlendOp
How pixels are written into the buffer.
ColorType
Describes how a pixel is encoded.
Compression
The type and strength of applied compression.
Decoded
Result of the decoding process
DecodingError
Any kind of error during PNG decoding.
DisposeOp
How to reset buffer of an animated png (APNG) at the end of a frame.
EncodingError
FilterType
The byte level filter applied to scanlines to prepare them for compression.
InterlaceInfo
Describes which interlacing algorithm applies to a decoded row.
SrgbRenderingIntent
The rendering intent for an sRGB image.
Unit
Physical unit of the pixel dimensions

Functions§

expand_interlaced_row
Copies pixels from interlaced_row into the right location in img.