• Stars
    star
    119
  • Rank 297,930 (Top 6 %)
  • Language
    Rust
  • License
    MIT License
  • Created over 13 years ago
  • Updated over 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Extract colour palettes from images 🎨

ℹī¸ For GraphicsMagick version please see tag v0.2.1.


CI

colour-extractor

Extracts colour palettes from photos using k-means clustering in LAB colour space.

sample 1 sample 2 sample 3

Installation

Is as simple as with any other Node.js module:

$ npm install @colour-extractor/colour-extractor

Note: This module contains native Rust libraries. Please open an issue if your platform isn't supported.

Usage

colour-extractor exports two functions:

const { topColours, topColoursHex } = require('@colour-extractor/colour-extractor');
const colours = await topColours('./photos/cats/tigre.jpg');
console.log(colours);
// => [ [158, 64, 75], ... ]

topColours function needs a path to your image (see below for supported formats) and it resolves to an Array containing RGB triplet for each prominent colour:

[
  [46, 70, 118],
  [0, 0, 2],
  [12, 44, 11]
]

topColoursHex on the other hand returns hex codes (with # included):

const hexColours = await topColoursHex('./photos/cats/tigre.jpg');
console.log(hexColours);
// => ["#2e4676", "#000002", "#0c2c0b"]

Supported image formats

All major image formats are supported, including PNG, JPG and WebP. Please see image-rs's documentation for a full list. Note that file extension is used for determining the image type.

How does it work?

Here's the simplified algorithm:

  1. Image is scaled down to 48x48px with a fast nearest-neighbour algorithm.
  2. Colours are grouped into up to 16 clusters using k-means clustering.
  3. Identified clusters are further refined using CIEDE2000 colour distance, removing any duplicates.

Licence

colour-extractor is published under MIT license.

Photos used the examples above can be found on Unsplash: