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

cpt2js

v1.5.3

Published

Color palette text parser to a function, input compatible with GMT, GDAL, GRASS, PostGIS, ArcGIS

Downloads

88

Readme

cpt2js

Color palette text parser to a function, input compatible with GMT, GDAL, GRASS, PostGIS, ArcGIS

Demo

From GDAL docs:

The text-based color configuration file generally contains 4 columns per line: the elevation value and the corresponding Red, Green, Blue component (between 0 and 255). The elevation value can be any floating point value, or the nv keyword for the nodata value. The elevation can also be expressed as a percentage: 0% being the minimum value found in the raster, 100% the maximum value.

An extra column can be optionally added for the alpha component. If it is not specified, full opacity (255) is assumed.

Various field separators are accepted: comma, tabulation, spaces, ‘:’.

Common colors used by GRASS can also be specified by using their name, instead of the RGB triplet. The supported list is: white, black, red, green, blue, yellow, magenta, cyan, aqua, grey/gray, orange, brown, purple/violet and indigo.

GMT .cpt palette files are also supported (COLOR_MODEL = RGB only).

Note: the syntax of the color configuration file is derived from the one supported by GRASS r.colors utility. ESRI HDR color table files (.clr) also match that syntax. The alpha component and the support of tab and comma as separators are GDAL specific extensions.

Differences from GDAL:

Supported color formats and modes:

  • color formats - named, hex, CSS, RGB, HSL, HSV
  • color modes - RGB, HSL, HSV
  • more color formats and modes can be added as needed

Color palette references:

Install

npm install cpt2js

or

<script src="https://unpkg.com/[email protected]/dist/cpt2js.umd.min.js"></script>

Usage

The library exposes a function parsePalette, which can be used to parse the color palette text or array.

Formats:

The second argument of parsePalette is an options object:

  • bounds ([number, number]) - used for resolving relative values to absolute values, default [0, 1]

The parse result is a Chroma.js Scale, a function (value: number) => Color.

The colors returned are Chroma.js Color objects, with default toString method returning a hex color.

From text

import { parsePalette } from 'cpt2js';

const palette = `
0   black
1   white
`;
const paletteScale = parsePalette(palette);

paletteScale(0.5).toString(); // '#808080'
paletteScale(0.5).css(); // 'rgb(128, 128, 128)' - use for CSS
paletteScale(0.5).rgba(); // [128, 128, 128, 1] - use for deck.gl, multiply alpha by 255

From text - Relative values

import { parsePalette } from 'cpt2js';

const palette = `
0%   black
100% white
`;
const paletteScale = parsePalette(palette, { bounds: [0, 100] });

paletteScale(50).toString(); // '#808080'

From array

import { parsePalette } from 'cpt2js';

const palette = [
  [0, 'black'],
  [1, 'white'],
];
const paletteScale = parsePalette(palette);

paletteScale(0.5).toString(); // '#808080'
paletteScale(0.5).css(); // 'rgb(128, 128, 128)' - use for CSS
paletteScale(0.5).rgba(); // [128, 128, 128, 1] - use for deck.gl, multiply alpha by 255

From array - Relative values

import { parsePalette } from 'cpt2js';

const palette = [
  ['0%',   'black'],
  ['100%', 'white'],
];
const paletteScale = parsePalette(palette, { bounds: [0, 100] });

paletteScale(50).toString(); // '#808080'

Color ramp

The library exposes a function colorRampCanvas, which can be used to color ramp the scale function to a canvas. The canvas can be encoded to a Data URL and rendered as an image.

The second argument of colorRampCanvas is an options object:

  • width (number) - width of the canvas, used also as a number of color ramp colors, default 256
  • height (number) - height of the canvas, default 1
import { parsePalette, colorRampCanvas } from 'cpt2js';

const palette = `
0   black
1   white
`;
const paletteScale = parsePalette(palette);
const paletteCanvas = colorRampCanvas(scale);
const paletteCanvasDataUrl = paletteCanvas.toDataURL();
const html = `<img src="${paletteCanvasDataUrl}">`;

Text format

Formats

0   0   0   0   1   255 255 255
0   0/0/0   1   255/255/255
0   0   0   0
1   255 255 255

Values

0   black
0%  black
N      gray
nv     gray
null   gray
nodata gray

Colors

0   black
1   white
0   #000000
1   #ffffff
0   0   0   0
1   255 255 255
0   0   0   0   0
1   255 255 255 255
# COLOR_MODEL = hsl
0   300 1 0.5
0.5 150 1 0.5
1   0   1 0.5
# COLOR_MODEL = hsv
0   300 1 1
0.5 150 1 1
1   0   1 1

Thanks

Discussion at stac-extensions/raster#17 and Cloud-Native Geospatial Outreach Event 2022 that sparked the idea for the library.