13 个版本

0.3.1 2024 年 4 月 20 日
0.3.0 2024 年 2 月 7 日
0.2.4 2024 年 2 月 2 日
0.2.3 2023 年 12 月 5 日
0.1.8 2023 年 7 月 7 日

#1431解析器实现


2 crates 中使用

MIT 许可证

115KB
2.5K SLoC

nitf-rs

一个最小的 Rust NITF 文件接口

有关读取和写入的基本示例,请参阅 示例

如果您有疑问,想要贡献,或者想要添加某些功能,请提交问题。

注意

以前,这个包中集成了 Sicd 功能。这已经被移动到一个单独的包 sicd-rs


lib.rs:

读取和操作 NITF 文件的最小包。NITF 版本 2.1 的接口

构建一个 [Nitf] 对象将解析文件头和段元数据。每个段都包含一个 header 字段,该字段存储在文件标准中定义的相应元数据。构建 [Nitf] 的主要函数是 [Nitf::from_reader()]

// Read a nitf file and dump metadata to stdout
let mut nitf_file = std::fs::File::open("example.nitf").unwrap();
let nitf = nitf_rs::Nitf::from_reader(&mut nitf_file).unwrap();
println!("{nitf}");

除了 nitf_header 之外,所有其他段都使用通用的 [NitfSegment] 来提供元数据和访问段数据。

// Get the bytes from the first image segment
let mut nitf_file = std::fs::File::open("example.nitf").unwrap();
let nitf = nitf_rs::Nitf::from_reader(&mut nitf_file).unwrap();
let im_seg = &nitf.image_segments[0];
let im_seg_hdr = &im_seg.header;
let im_seg_data = &im_seg.get_data_map(&mut nitf_file).unwrap();

大多数元数据元素都存储在 NitfField 结构中。该结构有一个 val,它保留了字段的原始值(即,解析成 u8、u16、String、枚举等字节的字节),以及字段长度(以字节为单位)和名称。

let mut nitf_file = std::fs::File::open("example.nitf").unwrap();
let nitf = nitf_rs::Nitf::from_reader(&mut nitf_file).unwrap();
let file_title = nitf.nitf_header.ftitle.val;
let n_img_segments = nitf.nitf_header.numi.val;
let n_rows = nitf.image_segments[0].header.nrows.val;

如果段中有用户定义的标记记录扩展 (TRE) 数据,它将存储在 [ExtendedSubheader] 中,供用户相应地解析。

依赖项

~0.4–1MB
~22K SLoC