npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

color-mage

v1.5.0

Published

A dependency-free image color extraction library.

Downloads

8

Readme

Color mage


GitHub Workflow Status (branch) GitHub npm npm npm bundle size


A dependency-free image color extraction library.

The extraction consists of using K-Means algorithm.

It has a few utility functions as well!

NOTE: This library compiles to Ecmascript modules target.

Example

This picture was downloaded from Unsplash - link

Functions

  • Color extractors
    • kMeansColorExtractor: Function that extracts colors from a given array of pixels using K-Means algorithm.
  • Converters
  • Counters
    • rgbaCounter: Counts unique colors from the given array of RGBA colors, you can determine if you want it to consider the alpha channel or not.

Install

With npm:

npm i color-mage
# or
yarn add color-mage

Usage

import { convertImageDataToRgba, kMeansColorExtractor, convertRgbToHex } from 'color-mage'

const canvas = document.getElementById('#canvas') as HTMLCanvasElement
const ctx = canvas.getContext('2d')
// draw your image
ctx.drawImage(image, 0, 0, 640, 480)
// then get the image data from canvas
const imageData = ctx.getImageData(0, 0, 640, 480)

// converts the imageData array into an array of colors
const colors = convertImageDataToRgba(imageData.data)

// RGBA color representation
const palette = kMeansColorExtractor(colors, 5)

// All colors converted into hexadecimal representation
const hexColors = palette.map(convertRgbToHex)

Tips

The process might take longer depending on the output size of ctx.getImageData, since it will result in more pixels to process.

It might take longer as well if the image has many colors or the maxRuns in kMeansColorExtractor parameter is higher.

As you can see in the example below, the maxRuns is a tradeoff between color accuracy and time to process.

An example using a 8K image:

  • Extracting 10 colors and maxRuns equals to 50

  • imageData extracted with size of 800x450px using ctx.getImageData(0, 0, 800, 450)

  • Metrics:

    • Get drawn canvas (draw image in canvas element): 14 ms
    • Get image data (gets the image data from drawn canvas): 98 ms
    • Convert imageData to RGBA (convertImageDataToRgba): 30 ms
    • Extract colors (kMeansColorExtractor): 845 ms
    • Total: 988 ms
  • The same image and output size, but with maxRuns equals to 10 (default)

  • Metrics:

    • Get drawn canvas: 18 ms
    • Get image data: 89 ms
    • Convert imageData to RGBA: 32 ms
    • Extract colors: 326 ms
    • Total: 466 ms

License

MIT