#qoi #convert #cli #convert-images

app qoiconv-rs

在不同图像格式和 qoi 格式之间进行转换

1 个不稳定版本

0.5.1 2023 年 3 月 14 日

#14 in #qoi

MIT 许可证

21KB
370

qoiconv-rs

Cli 在图像格式和 qoi 之间进行转换。尝试将 qoi.h 移植到 rust-lang。

qoiconv-rs 使用方法

$ cargo install qoiconv-rs
$ qoiconv-rs -i input.png -o output.qoi # convert form image to qoi
$ qoiconv-rs -i input.qoi -o output.png # convert from qoi to image 

使用方法

将 qoi.rs 复制到您的源文件并将它作为模块添加。

.qoi 文件解码像素的示例

use std::fs::File;
use std::io::BufReader;
mod qoi;
use qoi::*;

fn main() {
    // load file and get bytes (use `BufReader` to speed up reads)
    let file = File::open("wikipedia_008.qoi").unwrap();
    let mut bytes = BufReader::new(file);

    // get pixels and descriptor
    let (data, desc) = qoi_decode(bytes, None).unwrap();
}

将像素编码到 .qoi 文件的示例

use std::fs::File;
use std::io::Write;
mod qoi;
use qoi::*;
fn main() {
    // get pixels and make valid descriptor
    // pixels must be laid out in order RGB(A)
    let pixels = [255, 0, 0, 15, 1, 255, 255, 255, 191, 255, 0, 0, 15, 1, 74];
    let desc = QoiDescriptor {
        width: pixels.len() / 3,
        height: 1,
        channels: ChanelMode::Rgb,
        colorspace: Colorspace::Linear,
    };

    let bytes = qoi_encode(&pixels, &desc).unwrap();

    let mut f = File::create("example.qoi").unwrap();
    f.write_all(bytes.as_slice()).unwrap();
}

测试、模糊测试、基准测试、配置文件

使用 cargo 测试和模糊测试程序(您需要安装 cargo-fuzz)

cargo test
# install cargo-fuzz with `cargo install cargo-fuzz`
cargo fuzz run qoi-test-pixels

要运行基准测试与 c 测试程序运行

待办事项:实现新的基准测试以与 c 进行比较

此实现比 c 实现慢 2 倍,可能是由于 BufReader 缓冲区大小较小的原因。

依赖关系

~16–25MB
~184K SLoC