# sixel-bytes ![Screenshot](./assets/Screenshot.png) Encode an image with [sixel-sys]. [sixel-sys]: https://crates.io/crates/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`. [sixel-rs]: https://crates.io/crates/sixel-rs ## Examples Encode a generated image to sixel and print it: ```rust let mut bytes: Vec = 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: ```rust 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 ` 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. [image]: https://crates.io/crates/image Current version: 0.2.2 License: MIT