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 在 解析器实现
78KB
1K SLoC
tiff-encoder
用于编码 TIFF 文件并带有所需 IFD 和条目的 crate。
该 crate 允许创建任何层次的 IFD,并为每个 IFD 添加任何条目和值。这样做的同时避免了用户需要担心每个结构在文件中的位置,并使用正确的偏移量指向它。
该 crate 的主要结构是用于实际写入 TIFF 文件的 TiffFile
。该结构默认以 [小端] 格式写入文件(但可以更改),并需要一个 IfdChain
。该 IfdChain
由文件的第一 Ifd
组成,它指向(如果有的话),依此类推。每个 Ifd
都有一个或多个条目,这些条目由一对 FieldTag
和 FieldValues
表示。
示例
创建一个 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