sixel-bytes

Crates.iosixel-bytes
lib.rssixel-bytes
version0.2.3
sourcesrc
created_at2023-07-12 12:35:37.775605
updated_at2023-10-12 10:52:36.090239
descriptionEncode an image with sixel-sys/libsixel
homepage
repositoryhttps://github.com/benjajaja/sixel-bytes
max_upload_size
id914474
size297,832
Benjamin Grosse (benjajaja)

documentation

README

sixel-bytes

Screenshot

Encode an image with sixel-sys.

⚠️ This is my first crate that uses unsafe and FFI. Please inspect the source code yourself, the crate is very small. PRs are welcome.

To write a sixel to a file, sixel-rs is safer and has more options.

Despite being called sixel-bytes, this crates produces a String.

Examples

Encode a generated image to sixel and print it:

let mut bytes: Vec<u8> = Vec::new();
for x in 0..255 {
    for y in 0..255 {
        bytes.append(&mut vec![x, 0, y]);
    }
}

let data = sixel_bytes::sixel_string(
    &bytes,
    255,
    255,
    sixel_bytes::PixelFormat::RGB888,
    sixel_bytes::DiffusionMethod::Atkinson,
).unwrap();
assert_eq!(&data[..3], "\u{1b}Pq");

Encode an image from the image crate to sixel and print it:

let image = image::io::Reader::open("./assets/Ada.png")
    .unwrap()
    .decode()
    .unwrap()
    .into_rgba8();
let bytes = image.as_raw();

match sixel_bytes::sixel_string(
    bytes,
    image.width() as _,
    image.height() as _,
    sixel_bytes::PixelFormat::RGBA8888,
    sixel_sys::DiffusionMethod::Stucki,
) {
    Err(err) => eprintln!("{err}"),
    Ok(data) => print!("{data}"),
}

Binaries

sixel <path/to/image> uses the image crate to load an image with supported formats, convert to RGBA8888, encode to sixel, and dump the resulting string to stdout. It must be built with the image feature.

test-sixel just generates some 255x255 image with a gradient and dumps it to stdout.

Only certain terminals / terminal emulators have the capability to render sixel graphics. See https://www.arewesixelyet.com/ for a list of programs that support sixels.

Try running xterm with -ti 340.

Features

The image feature is disabled by default but needed for the sixel binary.

Current version: 0.2.2

License: MIT

Commit count: 3

cargo fmt