8 个版本

0.3.2 2019年4月6日
0.3.1 2019年3月10日
0.2.1 2018年12月13日
0.1.2 2018年12月1日
0.1.1 2018年10月10日

#1730解析器实现

MIT 许可证

78KB
1K SLoC

tiff-encoder

Latest Version Rust Documentation

用于编码 TIFF 文件并带有所需 IFD 和条目的 crate。

该 crate 允许创建任何层次的 IFD,并为每个 IFD 添加任何条目和值。这样做的同时避免了用户需要担心每个结构在文件中的位置,并使用正确的偏移量指向它。

该 crate 的主要结构是用于实际写入 TIFF 文件的 TiffFile。该结构默认以 [小端] 格式写入文件(但可以更改),并需要一个 IfdChain。该 IfdChain 由文件的第一 Ifd 组成,它指向(如果有的话),依此类推。每个 Ifd 都有一个或多个条目,这些条目由一对 FieldTagFieldValues 表示。

示例

创建一个 256x256 的单色图像,每个像素都是黑色的。

#[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();
}

依赖关系

~120KB