#pixel-art #image #lookup-tables #upscaling

xbrz-rs

一种高质量图像缩放算法,旨在保留低分辨率像素艺术中的关键细节

1个不稳定版本

0.1.0 2024年7月28日

#207 in 图像

Download history 104/week @ 2024-07-24 27/week @ 2024-07-31

131 每月下载量

GPL-3.0-only

52KB
1K SLoC

xbrz-rs

Crates.io version docs.rs GPL-3.0 license

该项目是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
Sample one, nearest neighbour scaled 3x Sample one, xBRZ scaled 3x

示例II

最邻近x3 xBRZ算法(xbrz-rs)x3
Sample two, nearest neighbour scaled 3x Sample two, xBRZ scaled 3x

Yoshi

最邻近x6 xBRZ算法(xbrz-rs)x6
Yoshi, nearest neighbour scaled 6x Yoshi, xBRZ scaled 6x

依赖项

~1.6–7MB
~38K SLoC