palette-extract-rs

A Rust lib for extracting a color palette from an image!

Based on a port of Leptonica's modified median cut quantization algorithm.

Example

drawing[^1]

color1 color2 color3 color4 color5 color6 color7 color8 color9

Credits

This Rust implementation of modified median cut quantization (MMCQ) is adapted from Kazuki Ohara's ColorThiefSwift.

Special thanks

Installation

To use, add the following to Cargo.toml under [dependencies]: toml palette_extract = "0.1.0"

Usage

Using the library consists of calling get_palette_rgb or get_palette_with_options with a set of RGB or RGBA pixels represented as a u8 slice.

Basic

A minimal example using 4 red pixels represented in RGB looks like this: ```rust use paletteextract::{getpalette_rgb, Color};

fn main() { let pixels: [u8; 12] = [255, 0, 0, 255, 0, 0, 255, 0, 0, 255, 0, 0];

let r = get_palette_rgb(&pixels);

assert_eq!(r.len(), 1);
assert_eq!(r[0], Color::new(252, 4, 4));

} ```

Image from file/somewhere else

Here's one way to extract the color palette of an image by leveraging the image crate to read and decode an image file (see full working example in examples directory): ```rust let image_path = "./path/to/image.jpg";

// open and decode the image using the `image` crate
let img = image::open(image_path).unwrap();

// grab a reference to the underlying pixels/RGB buffer
let pixels = img.as_bytes();

// extract the color palette
let palette = get_palette_rgb(&pixels);

// output the extracted color palette
palette.iter().for_each(|x| println!("{:?}", x));

```

More usage examples can be found in the examples directory!

Background/Further reading