blurhash-update/README.md
asonix c09bd69c21
All checks were successful
/ tests (push) Successful in 48s
/ clippy (push) Successful in 8s
/ check (aarch64-unknown-linux-musl) (push) Successful in 14s
/ check (armv7-unknown-linux-musleabihf) (push) Successful in 11s
/ check (x86_64-unknown-linux-musl) (push) Successful in 7s
Update readme
2024-02-23 14:40:16 -06:00

79 lines
2.1 KiB
Markdown

# blurhash-update
_A blurhash encoder for streaming bytes_
## Supports
- [x] Encoding
- [ ] Decoding
## Motivation
There exists already a [blurhash crate](https://github.com/whisperfish/blurhash-rs), which is a good
choice for creating blurhashes, however, it requires that all pixels for a given image exist in
memory in order to compute it. For very large images, this might not be ideal.
blurhash-update provides an API for processing bytes from an image as they are made available. This
isn't as performant as blurhash in like-for-like comparisons, but the benefit of a lower memory
overhead can be useful in some scenarios.
blurhash-update also provides the ability to reduce accuracy by skipping processing of some of the
input pixels. This greatly improves performance, but might lead to blurhashes that don't look quite
right. Using blurhash-update's `auto` encoder configuration will target an extremely performant but
very loose profile based on the image dimensions.
## Usage
```rust,no_run
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(())
}
```
Example usage:
```bash
magick convert /path/to/image RGBA:- | \
cargo r --example --release -- --width blah --height blah
```
## License
blurhash-update is licensed under either of the following:
- Apache License, Version 2.0, ([LICENSE-APACHE](./LICENSE-APACHE) or <http://www.apache.org/licenses/LICENSE-2.0>)
- MIT license ([LICENSE-MIT](./LICENSE-MIT) or <http://opensource.org/licenses/MIT>)