#image #texture #warcraft #texture-format #image-format #blp #war3

app blp-conv

CLI工具,用于编码/解码Blizzard BLP纹理格式

2个版本

0.1.1 2022年9月13日
0.1.0 2022年9月13日

#8 in #warcraft

MIT许可协议

165KB
4K SLoC

此crate提供了用于Blizzard BLP纹理格式的解码/编码,该格式在多个游戏(如魔兽III和魔兽世界)中使用。您可以将任何BLP文件加载到来自image crate的DynamicImage,并将任何DynamicImage保存为BLP文件。

用法

此crate位于crates.io,您可以通过在项目的Cargo.toml中将image-blp添加到依赖项中来使用它。

[dependencies]
image-blp = "1"

示例:加载

该crate将BLP文件的加载分为解析和转换。这样可以处理BLP文件而不会因不必要的转换而丢失信息。将BLP图像加载到可用的RGBA图像中的典型方法如下

let blp_file = load_blp(blp_filename).expect("loaded blp");
let mipmap_level = 0;
let image = blp_to_image(&blp_file, mipmap_level).expect("converted");

请参阅完整的代码示例examples/load.rs

示例:保存

该crate提供了一个简化的API来指定您想使用的BLP类型。有关更多信息,请参阅convert::BlpTarget类型。以下是将图像保存为BLP的典型方法

let img_file: DynamicImage = Reader::open(input_filename)
    .expect("open")
    .decode()
    .expect("decode");
let make_mipmaps = true;
let blp = image_to_blp(
    img_file,
    make_mipmaps,
    BlpTarget::Blp1(BlpOldFormat::Raw1 {
        alpha_bits: AlphaBits::Bit1,
    }),
    FilterType::Nearest,
)
.expect("converted");
save_blp(&blp, output_filename).expect("saved");

请参阅完整的代码示例examples/save.rs

CLI工具

该库用于构建通用的CLI工具blp-conv,它允许将图像转换为/从BLP格式转换为广泛的图像格式。您可以通过以下方式安装它

cargo install blp-conv

功能

该crate支持所有已知的BLP版本,如

  • BLP0 -- 用于旧版魔兽III ROC Beta构建。
  • BLP1 -- 常用于魔兽III TFT。
  • BLP2 -- 用于魔兽世界。

该crate还支持所有已知的编码

  • RAW1 -- 256色的调色板图像。我们使用color_quant包将通用图像压缩到该格式。
  • RAW3 -- 与普通的 RGBA 位图类似。
  • JPEG -- 普通的 jpeg 压缩图像。
  • DXTn -- 用于 BLP2 版本的 S3TC 压缩算法。我们使用 texpresso 进行压缩/解压缩。

测试

库的测试使用暴雪游戏的原文件。因此,由于版权问题,它们不能与库一起分发。您应该购买原始游戏以提取测试文件。

依赖项

~20–30MB
~268K SLoC