tiff-encoder

Crates.iotiff-encoder
lib.rstiff-encoder
version0.3.2
sourcesrc
created_at2018-10-04 14:38:53.041616
updated_at2019-04-06 23:10:51.275534
descriptionRust library for creating TIFF files.
homepagehttps://github.com/Goncalerta/tiff-encoder
repositoryhttps://github.com/Goncalerta/tiff-encoder
max_upload_size
id88028
size78,998
Pedro Gonçalo Correia (Goncalerta)

documentation

README

tiff-encoder

Latest Version Rust Documentation

A crate for encoding TIFF files with the desired IFDs and entries.

This crate allows to create any hierarchy of IFDs and to add any tags with any values to each. It does so while avoiding that the user needs to worry about the position of each structure in the file and to point to it with the correct offset.

The main structure of this crate, used to actually write the TIFF file, is the TiffFile. This structure writes the file in [little endian] by default (but that can be changed) and requires an IfdChain. This IfdChain consists of the first Ifd of the file, the one it points to (if any), and so on. Each Ifd has one or more entries, which are represented by a pair of FieldTag and FieldValues.

Example

Creating a 256x256 bilevel image with every pixel black.

#[macro_use]
extern crate tiff_encoder;
use tiff_encoder::prelude::*;
use tiff_encoder::ifd::tags;

fn main() {
    // 256*256/8 = 8192
    // The image data will have 8192 bytes with 0 in every bit (each representing a
    // black pixel).
    let image_data = vec![0x00; 8192];

    TiffFile::new(
        Ifd::new()
            .with_entry(tags::PhotometricInterpretation, SHORT![1]) // Black is zero
            .with_entry(tags::Compression, SHORT![1]) // No compression

            .with_entry(tags::ImageLength, LONG![256])
            .with_entry(tags::ImageWidth, LONG![256])

            .with_entry(tags::ResolutionUnit, SHORT![1]) // No resolution unit
            .with_entry(tags::XResolution, RATIONAL![(1, 1)])
            .with_entry(tags::YResolution, RATIONAL![(1, 1)])

            .with_entry(tags::RowsPerStrip, LONG![256]) // One strip for the whole image
            .with_entry(tags::StripByteCounts, LONG![8192])
            .with_entry(tags::StripOffsets, ByteBlock::single(image_data))
            .single() // This is the only Ifd in its IfdChain
    ).write_to("example.tif").unwrap();
}
Commit count: 58

cargo fmt