在完成前面的步骤之后,就已经可以在 PNG 文件中编码隐藏信息、解码提取信息、删除指定数据块以及打印所有数据块信息。
此时项目结构是这样的:
我们可以通过以下步骤来使用这个小工具:
构建项目
cargo build --release
将可执行文件添加到系统路径(可选)
export PATH=$PATH:/path/to/your/project/target/release
使用方法
pngme encode <FILE_PATH> <CHUNK_TYPE> <MESSAGE> [--output <OUTPUT_FILE>]
pngme decode <FILE_PATH> <CHUNK_TYPE>
pngme remove <FILE_PATH> <CHUNK_TYPE>
pngme print <FILE_PATH>
示例
pngme encode input.png "HIDE" "Hello, World!" --output output.png
pngme decode output.png "HIDE"
pngme remove output.png "HIDE"
接下来,将上面的代码拆分为库和可执行文件:
拆分代码为库和可执行文件
创建库项目
在项目根目录下创建一个库项目:
cargo new --lib pngme_lib
将核心逻辑(如 Png、Chunk、ChunkType 等)移动到 pngme_lib/src/lib.rs 中。
将现有的代码移动到 pngme_lib 目录中。你可以将 src 目录下的所有文件移动到 pngme_lib/src 目录中。
修改库的 Cargo.toml
在 pngme_lib/Cargo.toml 中,确保有正确的依赖项和库名称。
[package]
name = "pngme_lib"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
anyhow = "1.0"
clap = { version = "4.3.23", features = ["derive", "std"] }
crc = "3.0"
[lib]
name = "pngme_lib"
path = "src/lib.rs"
创建可执行项目
在项目根目录下创建一个可执行项目:
cargo new --bin pngme_bin
将命令行参数解析和 main 函数逻辑保留在 pngme_bin/src/main.rs 中。
修改可执行项目的 Cargo.toml
[package]
name = "pngme_bin"
version = "0.1.0"
edition = "2021"
[dependencies]
pngme_lib = { path = "../pngme_lib" }
编写可执行代码
在 pngme_bin/src/main.rs 中,调用库中的功能。
最终的项目结构变成了:
运行项目
最后我们就可以使用 pngme_bin 的命令了。