13 个版本
0.3.1 | 2024 年 4 月 20 日 |
---|---|
0.3.0 | 2024 年 2 月 7 日 |
0.2.4 |
|
0.2.3 | 2023 年 12 月 5 日 |
0.1.8 | 2023 年 7 月 7 日 |
#1431 在 解析器实现
在 2 crates 中使用
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