Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

image-pal

Package Overview
Dependencies
Maintainers
1
Versions
8
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

image-pal

Retrieve human perceivable palette of colors from images leveraging color quantization

  • 1.2.2
  • latest
  • Source
  • npm
  • Socket score

Version published
Weekly downloads
11K
increased by25.21%
Maintainers
1
Weekly downloads
 
Created
Source

Intro

Retrieve human perceivable palette of colors from images leveraging color quantization. What sets Image-Pal apart from other image-based color palette generators is that you can easily plugin other color spaces (or variations of existing) to achieve the desired palette.

NPM

Usage

Built-in support for RGB and HSLuv color spaces. Or easily plugin other color spaces.

  const getColors = require('image-pal/lib/hsluv');
  // OR if you want the non-human-perceptual version based on pure RGB
  // const getColors = require('image-pal/lib/rgb');
  
  const colors = getColors(myImageBytes, options);
  colors.forEach(color => {
    console.log(color.rgb); // [ 100, 100, 100 ]
    console.log(color.alpha); // 255
    console.log(color.hex); // #abc123
    // below props only available if using `hsluv` version
    console.log(color.hsluv); // [ 1, 50, 100 ]
  });

Helpers

Depending how you intend to access the images, there are a few high-performance recommendations:

  • image-pal-canvas - A browser based implementation that leverages Image and Canvas for fast palette generation.
  • image-pal-sharp - A Node.js based implementation that leverages Sharp and libvips for fast palette generation.
  • image-steam - An Image API with built-in support, already optimized for you.

By leveraging browser and server implementations you can provide consistent (though NOT identical) palette generation across your stack. Generated palettes will still vary slightly as the image resize operations vary in algorithm across browsers and server implementations. If consistency is critical you might consider one of the server-only solutions.

Options

NameTypeDefaultDesc
hasAlphaBooleanrequiredIf input has alpha it'll read 4-byte colors instead of the default 3
maxColorsNumber10Maximum size of colors to return. Only one is garuanteed
minDensityNumber0.005Minimum cell density (0.5%) required to be considered a valid palette color
cubicCellsNumber4Number of cells per dimension in 3d space. Higher number of cells increases cpu time but can be useful if you want to return a large palette (greater than 10 maxColors). Only (3^3=27) or (4^3=64) supported
meanBooleantrueBy default the mean color will be computed which is generally desired. If set to false the median color will be selected.
orderStringdistanceOrder of the returned color palette. By default will be ordered based on the distance between colors. Or density if cell density is desired.

Logos

In the case you're working with a logo where brand is everything, disabling mean to select the median color will avoid tampering with brand colors.

{ mean: false }

Performance

While this library is light weight, if it's used with very large images it can still take a considerable amount of time. See Helpers for high-performance production usage.

Custom Color Spaces

It's quite simple to leverage a different color space or a variation of the provided color spaces (RGB or HSLuv).

  const getColors = require('image-pal/lib/rgb'); // extend rgb generator
  
  function rgbColorPlacer(c) {
    // instead, I could convert RGB to an alternate color space, OR change the placement logic within the RGB spectrum
    return [
      c.rgb[0] / 256, // x=0-1
      c.rgb[1] / 256, // y=0-1
      c.rgb[2] / 256 // z=0-1
    ];
  }

  const colors = getColors(myImageBytes, { colorPlacer: rgbColorPlacer });
  // do something with colors...

Keywords

FAQs

Package last updated on 04 Sep 2019

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc