#纹理格式 #纹理 #魔兽 #图像格式 #魔兽世界 #文件格式 #blp

image-blp

用于编码/解码暴雪BLP纹理格式的库

4 个稳定版本

1.2.0 2023年10月1日
1.1.0 2023年4月8日
1.0.1 2022年9月13日

#240 in 图像

每月50次下载
blp-conv 中使用

MIT 许可证

145KB
3.5K SLoC

此crate提供了用于暴雪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类型。以下是将图像保存为的典型方式

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以获取完整代码。

命令行工具

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

cargo install blp-conv

特性

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

  • BLP0 -- 用于旧的魔兽III ROC Beta构建。
  • BLP1 -- 在魔兽III TFT中常见。
  • BLP2 -- 在魔兽世界中使用。

该包装箱也支持所有已知的编码

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

测试

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

依赖项

~17MB
~139K SLoC