1个不稳定版本
0.1.0 | 2024年7月28日 |
---|
#207 in 图像
131 每月下载量
52KB
1K SLoC
xbrz-rs
该项目是Zenju创建的xBRZ像素缩放算法的C++实现,现在已转换为Rust。您可以在 SourceForge 上下载原始的C++版本。C++版本和此版本都采用GNU通用公共许可证v3授权。
请参阅示例图像部分,以比较此库的输出与最邻近缩放。
用法
目前有一个公开的函数scale_rgba
,可以缩放RGBA格式的图像,从原始分辨率的2倍到6倍
use std::path::Path;
fn upscale_image(input_path: &Path, output_path: &Path, factor: usize) -> Result<(), image::ImageError> {
let in_image = image::open(input_path)?;
let width = in_image.width();
let height = in_image.height();
let rgba = image::RgbaImage::from(in_image);
let out_rgba = xbrz::scale_rgba(
&rgba,
width as usize,
height as usize,
factor
);
let out_width = width * factor as u32;
let out_height = height * factor as u32;
image::save_buffer(
output_path,
&out_rgba,
out_width,
out_height,
image::ExtendedColorType::Rgba8,
)
}
特性
为了比较像素,RGB值被转换为YCbCr表示。为此,此包创建了一个查找表(LUT),它将RGB差值与使用YCbCr坐标计算的标量差值之间进行转换。
默认情况下,此查找表使用每通道压缩5位索引,因此查找表仅使用128 KiB的内存。但是,通过启用large_lut
功能,使用8位差值的完整范围,这将导致查找表占用64 MiB的内存。差异将微不足道,但如果您希望获得更高的精度,可以启用它。
示例图像
请参阅测试/images目录中的更多缩放因子示例。
示例I
最邻近x3 | xBRZ算法(xbrz-rs)x3 |
---|---|
示例II
最邻近x3 | xBRZ算法(xbrz-rs)x3 |
---|---|
Yoshi
最邻近x6 | xBRZ算法(xbrz-rs)x6 |
---|---|
依赖项
~1.6–7MB
~38K SLoC