#sixel #image #encode #byte #graphics #libsixel #string

bin+lib sixel-bytes

使用sixel-sys/libsixel编码图像

5个版本

0.2.3 2023年10月12日
0.2.2 2023年7月15日
0.2.1 2023年7月12日
0.2.0 2023年7月12日
0.1.0 2023年7月12日

254图像

每月 下载 33
2 crates 中使用

MIT 许可证

285KB
142

sixel-bytes

Screenshot

使用 sixel-sys 编码图像。

⚠️ 这是我第一个使用 unsafe 和FFI的crate。请自行检查源代码,该crate非常小。欢迎提交PR。

要写入文件中的sixel,sixel-rs 更安全,并具有更多选项。

尽管名为sixel-bytes,但此crate生成一个 String

示例

将生成的图像编码为sixel并打印它

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");

将来自 image crate的图像编码为sixel并打印它

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}"),
}

二进制文件

sixel <path/to/image> 使用 image crate加载图像,以支持格式,转换为RGBA8888,编码为sixel,并将结果字符串输出到stdout。必须使用 image 功能构建。

test-sixel 仅生成一些255x255的渐变图像并将其输出到stdout。

只有某些终端/终端仿真器具有渲染sixel图形的能力。有关支持sixel的程序列表,请参阅 https://www.arewesixelyet.com/

尝试使用 xterm 运行 -ti 340

功能

默认禁用 image 功能,但需要用于 sixel 二进制文件。

当前版本:0.2.2

许可证:MIT

依赖关系

~5.5MB
~45K SLoC