Crate tiff_forge

Crate tiff_forge 

Source
Expand description

§tiff-forge

Latest Version Rust Documentation

A fork of the tiff-encoder crate which supports both TIFF and BigTIFF 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, are the TiffFile and BigTiffFile structs. 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 of the file, the one it points to (if any), and so on. Each Ifd or BigIfd have one or more entries, which are represented by a pair of FileTag and FieldValues

§TIFF Example

Creating a 256x256 bilevel image with every pixel black.

#[macro_use]
extern crate tiff_forge;
use tiff_forge::prelude::*;
use tiff_forge::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();
}

§BigTIFF Example

Creating a large, bilevel BigTIFF with every pixel black

#[macro_use]
extern crate tiff_forge;
use tiff_forge::prelude::*;
use tiff_forge::ifd::tags;
use tiff_forge::ifd::types::{LONG, LONG8};

fn main() {
    // 300000*300000/8 = 11250000000
    // The image data will have 11,250,000,000 bytes (~11.25GB) with 0 in every bit (each representing a
    // black pixel).
    let image_data = vec![0x00; 11250000000];

    BigTiffFile::new(
        BigIfd::new()
            .with_entry(tags::PhotometricInterpretation, SHORT![1]) // Black is zero
            .with_entry(tags::Compression, SHORT![1]) // No compression
            .with_entry(tags::ImageLength, LONG![300000])
            .with_entry(tags::ImageWidth, LONG![300000])
            .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![300000]) 
            .with_entry(tags::StripByteCounts, LONG8::single(11250000000)) // One strip for the whole image
            .with_entry(tags::StripOffsets, ByteBlock::big_single(image_data))
            .single() // This is the only Ifd in its IfdChain
    ).write_to("example_big.tif").unwrap();
}

Modules§

ifd
Module to manipulate IFDs and their entries.
prelude
Common imports that are necessary for almost every use of the tiff_forge library.
write
Helpers to write the file.

Macros§

ASCII
Convenient macro to declare an IFD entry of ASCII values.
BYTE
Convenient macro to declare an IFD entry of BYTE values.
DOUBLE
Convenient macro to declare an IFD entry of DOUBLE values.
FLOAT
Convenient macro to declare an IFD entry of FLOAT values.
LONG
Convenient macro to declare an IFD entry of 32-bit LONG values.
LONG8
Convenient macro to declare an IFD entry of 64-bit LONG8 values.
RATIONAL
Convenient macro to declare an IFD entry of RATIONAL values.
SBYTE
Convenient macro to declare an IFD entry of SBYTE values.
SHORT
Convenient macro to declare an IFD entry of SHORT values.
SLONG
Convenient macro to declare an IFD entry of SLONG values.
SRATIONAL
Convenient macro to declare an IFD entry of SRATIONAL values.
SSHORT
Convenient macro to declare an IFD entry of SSHORT values.
UNDEFINED
Convenient macro to declare an IFD entry of UNDEFINED values.

Structs§

BigTiffFile
Representation of a BigTIFF file (64-bit offsets).
TiffFile
Representation of a Tagged Image File.