1 个不稳定发布

0.1.0 2024年2月26日

#851 in 图像

Download history 35/week @ 2024-04-04 8/week @ 2024-04-11 1/week @ 2024-04-18 13/week @ 2024-04-25 8/week @ 2024-05-02 5/week @ 2024-05-09 19/week @ 2024-05-16 12/week @ 2024-05-23 33/week @ 2024-05-30 57/week @ 2024-06-06 22/week @ 2024-06-13 88/week @ 2024-06-20 13/week @ 2024-06-27 6/week @ 2024-07-04 25/week @ 2024-07-11 17/week @ 2024-07-18

每月79次下载
pict-rs 中使用

MIT/Apache

1MB
704

blurhash-update

用于流式传输字节的blurhash编码器

支持

  • 编码
  • 解码

动机

已经存在一个blurhash crate,它是一个创建blurhash的好选择,但是它要求所有给定图像的像素都必须存在于内存中才能计算它。对于非常大的图像,这可能不是理想的选择。

blurhash-update提供了一个API来处理图像的字节,当它们可用时。在类似比较中,这并不像blurhash那样高效,但较低的内存开销在某些场景中可能很有用。

blurhash-update还提供了一种通过跳过处理一些输入像素来降低精度的能力。这大大提高了性能,但可能会导致blurhash看起来不太对劲。使用blurhash-update的auto编码器配置将针对基于图像尺寸的极端高效但非常宽松的配置文件。

使用

use std::io::Read;

use blurhash_update::{Components, Encoder, ImageBounds};
use clap::Parser;

#[derive(clap::Parser)]
struct Args {
    /// Width of the provided image
    #[clap(long)]
    width: u32,

    /// Height of the provided image
    #[clap(long)]
    height: u32,
}

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let Args { width, height } = Args::parse();
    let mut encoder = Encoder::new(Components { x: 4, y: 3 }, ImageBounds { width, height }, 1)?;

    let mut stdin = std::io::stdin().lock();
    let mut buf = [0u8; 1024];

    loop {
        let n = stdin.read(&mut buf)?;

        if n == 0 {
            break;
        }

        encoder.update(&buf[..n]);
    }

    println!("{}", encoder.finalize());

    Ok(())
}

示例使用

magick convert /path/to/image RGBA:- | \
    cargo r --example --release -- --width blah --height blah

许可

blurhash-update许可为以下之一

无运行时依赖