#sixel #querying #deserializing #serialization #parser #byte #serializer-deserializer

sixel-image

An interface for querying, manipulating and serializing/deserializing Sixel data

1 unstable release

0.1.0 Jul 7, 2022

#2506 in Encoding

Download history 1696/week @ 2025-03-12 1723/week @ 2025-03-19 1070/week @ 2025-03-26 1122/week @ 2025-04-02 1167/week @ 2025-04-09 1176/week @ 2025-04-16 1138/week @ 2025-04-23 1056/week @ 2025-04-30 984/week @ 2025-05-07 938/week @ 2025-05-14 1034/week @ 2025-05-21 902/week @ 2025-05-28 867/week @ 2025-06-04 956/week @ 2025-06-11 984/week @ 2025-06-18 1119/week @ 2025-06-25

4,082 downloads per month
Used in 2 crates (via zellij-server)

MIT license

31KB
718 lines

sixel-image

This library provides an interface for querying, manipulating and serializing/deserializing sixel data.

There are several methods provided here to do this:

  1. If you already have all the serialized sixel bytes, construct SixelImage directly
  2. If you'd like to parse bytes in real time "on the wire", use SixelDeserializer (accompanied by the sixel-tokenizer sister crate).

Example

With all the serialized bytes ahead of time (option 1)

use sixel_image::SixelImage;

fn main() {
    let sample = "
        \u{1b}Pq
        \"2;1;100;200
        #0;2;0;0;0#1;2;100;100;0#2;2;0;100;0
        #1~~@@vv@@~~@@~~$
        #2??}}GG}}??}}??-
        #1!14@
        \u{1b}\\
    ";
    let bytes = sample.as_bytes();

    let sixel_image = SixelImage::new(&bytes).unwrap();
    let serialized = sixel_image.serialize();
    println!("{:?}", serialized);
}

Parsing bytes "on the wire" (option 2)

use sixel_tokenizer::Parser;
use sixel_image::SixelDeserializer;

fn main() {
    let sample = "
        \u{1b}Pq
        \"2;1;100;200
        #0;2;0;0;0#1;2;100;100;0#2;2;0;100;0
        #1~~@@vv@@~~@@~~$
        #2??}}GG}}??}}??-
        #1!14@
        \u{1b}\\
    ";
    let bytes = sample.as_bytes();
    let mut parser = Parser::new();
    let mut sixel_deserializer = SixelDeserializer::new();
    for byte in bytes {
        parser.advance(&byte, |sixel_event| {
            let _ = sixel_deserializer.handle_event(sixel_event);
        });
    }
    let sixel_image = sixel_deserializer.create_image().unwrap();
    let serialized = sixel_image.serialize();
    println!("{:?}", serialized);
}

License

MIT

Dependencies

~325–770KB
~18K SLoC