3个不稳定版本
使用旧的Rust 2015
0.2.0 | 2015年8月29日 |
---|---|
0.1.2 | 2015年8月20日 |
0.1.1 | 2015年8月20日 |
在#swf-file中排名5
15KB
217 行
swf-headers
一个用于读取swf文件头部的库,也可选帮助你读取其余部分。
示例
extern crate swf_headers;
use std::io::Read; // Needed for calling read_to_end()
use swf_headers::SwfHeaders;
use swf_headers::Error as SwfError;
use swf_headers::DecodedSwf;
let (headers, mut decoded_swf) = SwfHeaders::open("example.swf").unwrap_or_else(|err| {
match err {
SwfError::IoError(_) => panic!("Oh no! An IO error!"),
SwfError::NotSwf => panic!("Oh no! It wasn't actually a swf file!")
}
});
println!("The compression method is {:?}", headers.signature());
println!("The swf version is {}", headers.version());
println!("The file length in bytes is {}", headers.file_length());
println!("The dimensions in pixels are {:?}", headers.dimensions());
println!("The frame rate is {}", headers.frame_rate());
println!("And finally, the frame count is {}!", headers.frame_count());
let mut the_rest_of_the_swf: Vec<u8> = vec![];
decoded_swf.read_to_end(&mut the_rest_of_the_swf).ok().expect("Oh no! Error reading!");
// And then you can do whatever you want with the rest of the swf!
测试
当你必须测试专有二进制文件时,测试会很痛苦。有关更多信息,请参阅tests/README.md。
常见问题解答
问题:为什么创建一个用于解析swf文件的库?
答案:为什么不呢?我有这方面的经验,并且注意到crates.io上没有swf解析工具,所以我确定了市场定位并付诸实践。
问题:这真的需要依赖于两个解压缩库来解析头部吗?
答案:很遗憾,是的。swf规范很糟糕,所以swf文件通常会有头部的一半使用zlib或LZMA进行压缩。
问题:swf规范在哪里?
答案:[链接](https://www.adobe.com/content/dam/Adobe/en/devnet/swf/pdf/swf-file-format-spec.pdf)。如果您计划解析swf的其余部分,您可能需要阅读该文档,但为了理解这个库,您只需要阅读第一章和第27页。
问题:嘿,我有一些使用奇怪flash设置的公有领域swf文件,你想要它们吗?
答案:当然!测试覆盖率是整个过程中最难的部分,所以我可以随时欢迎小swf文件用于测试。
问题:你的代码很糟糕。我能修复它吗?
答案:当然可以!欢迎提交Pull Requests。
依赖关系
~1MB
~18K SLoC