27 个版本
0.10.4+libjxl-0.10.3 | 2024年6月30日 |
---|---|
0.10.2+libjxl-0.10.2 | 2024年3月21日 |
0.8.3+libjxl-0.8.2 | 2023年10月13日 |
0.8.2+libjxl-0.8.2 | 2023年6月14日 |
0.1.4 | 2020年8月25日 |
44 在 图像 中排名
870 每月下载量
在 simp 中使用
155KB
3K SLoC
jpegxl-rs
在 libjxl
库上创建的一个安全的 JPEGXL 封装。查看原始 库 和 绑定。
构建
如果您想指定自定义库路径,请设置环境变量 DEP_JXL_LIB
。
可以使用 vendored
功能启用构建 libjxl
和静态链接。
如果您不想依赖 C++ 标准库,请禁用功能 threads
。
使用
目前,支持 u8
、u16
、f16
和 f32
作为像素类型。
解码
let mut decoder = decoder_builder().build()?;
let (Metadata { width, height, ..}, pixels) = decoder.decode(&sample)?;
match pixels {
Pixels::Float(data) => { /* do something with Vec<f32> data */ },
Pixels::Uint8(data) => { /* do something with Vec<u8> data */ },
Pixels::Uint16(data) => { /* do something with Vec<u16> data */ },
Pixels::Float16(data) => { /* do something with Vec<f16> data */ },
}
// Multi-threading
use jpegxl_rs::ThreadsRunner;
let runner = ThreadsRunner::default();
let mut decoder = decoder_builder()
.parallel_runner(&runner)
.build()?;
// Customize pixel format
let mut decoder = decoder_builder()
.pixel_format(PixelFormat {
num_channels: 3,
endianness: Endianness::Big,
align: 8
})
.build()?;
decoder.decode_with::<u8>(&sample);
// You can change the settings after initialization
decoder.skip_reorientation = Some(true);
// Reconstruct JPEG, fallback to pixels if JPEG reconstruction is not possible
// This operation is finished in on pass
let (metadata, data) = decoder.reconstruct(&sample)?;
match data {
Data::Jpeg(jpeg) => {/* do something with the JPEG data */}
Data::Pixels(pixels) => {/* do something with the pixels data */}
}
编码
use image::io::Reader as ImageReader;
let sample = ImageReader::open("../samples/sample.png")?.decode()?.to_rgba16();
let mut encoder = encoder_builder().build()?;
let buffer: EncoderResult<f32> = encoder.encode(&sample, sample.width(), sample.height())?;
设置编码器选项
let mut encoder = encoder_builder()
.lossless(true)
.speed(EncoderSpeed::Falcon)
.build()?;
// You can change the settings after initialization
encoder.lossless = false;
encoder.quality = 3.0;
image
crate 集成
集成默认启用。如果您不需要它,请禁用 image
功能。
use jpegxl_rs::image::ToDynamic;
use jpegxl_rs::decoder_builder;
use image::DynamicImage;
let sample = std::fs::read("../samples/sample.jxl")?;
let mut decoder = decoder_builder().build()?;
let img = decoder.decode_to_image(&sample)?;
let img = decoder.decode_to_image_with::<f32>(&sample)?;
许可证:GPL-3.0-or-later
依赖项
~3MB
~64K SLoC