UIZE JavaScript Framework

MODULES Uize.Color.Util

1. Introduction

The Uize.Color.Util module provides miscellaneous utility methods for working with colors.

DEVELOPERS: Chris van Rensburg

1.1. Examples

The following example pages are good showcases for the Uize.Color.Util module...

Color Sort by RGB Proximity - When you have a limited palette of colors, how can you sort the colors to find the closest matches to a desired color? This example shows you how.

SEARCH FOR EXAMPLES

Use the link below to search for example pages on the UIZE Web site that reference the Uize.Color.Util module...

SEARCH

1.2. Implementation Info

The Uize.Color.Util module defines the Uize.Color.Util package under the Uize.Color namespace.

1.2.1. Features Introduced in This Module

The features listed in this section have been introduced in this module.

STATIC METHODS

Uize.Color.Util.makeCombinations | Uize.Color.Util.mix | Uize.Color.Util.sort

STATIC PROPERTIES

Uize.Color.Util.moduleName | Uize.Color.Util.pathToResources

1.2.2. Features Overridden in This Module

No features have been overridden in this module.

1.2.3. Features Inherited From Other Modules

This module has no inherited features.

1.2.4. Modules Directly Under This Namespace

There are no modules directly under this namespace.

1.2.5. Unit Tests

There is no dedicated unit tests module for the Uize.Color.Util module.

2. Static Methods

2.1. Uize.Color.Util.makeCombinations

Returns an array of colors, being a series of combinations produced from the two specified colors.

SYNTAX

colorsARRAY = Uize.Color.Util.makeCombinations (
  color1ANYTYPE,
  color2ANYTYPE,
  valuesPerComponentINTorARRAY
);

This method uses the two colors specified by the color1ANYTYPE and color2ANYTYPE parameters to produce a series of combination colors. A series of interpolated values is calculated for each component of the color space, with the first value being the value of the component for color 1, the last value being the value of the component for color 2, and a series of values calculated at intervals between the first value and the last value. Each value out of the series of values for each component is then combined with each other value for every other component, so producing a set of combinations in the color space of color 1.

The number of values per color component is specified by the valuesPerComponentINTorARRAY parameter. If an integer value is specified for this parameter, then there will be the same number of interpolated values for all components of the color space. For example, a value of 3 for the valuesPerComponentINTorARRAY parameter means that there will be three values for each of the red, green, and blue channels of the sRGB color space, producing a total of 27 combinations.

An array of integers can also be specified for the valuesPerComponentINTorARRAY parameter, in which case a desired number of interpolated values can be specified for each component of the color space. So, for example, the value [2,3,4] would specify two interpolated values for the red channel, three for the green channel, and four for the blue channel in the sRGB color space, producing a total of 24 combination colors.

VARIATION 1

colorsARRAY = Uize.Color.Util.makeCombinations (color1ANYTYPE,color2ANYTYPE);

When no valuesPerComponentINTorARRAY parameter is specified, then there will be a default of two values per component, producing eight combinations for a three component color space (such as sRGB, HSL, HSV, etc.). The two values that are used for each component will be the value of that component for color 1 and the value of that component for color 2.

VARIATION 2

colorsARRAY = Uize.Color.Util.makeCombinations (
  color1ANYTYPE,
  color2ANYTYPE,
  valuesPerComponentINTorARRAY,
  componentChaosFLOATorARRAY
);

When the optional componentChaosFLOATorARRAY parameter is specified, a certain amount of chaos can be introduced to the calculation of component values when making the combination colors. The value for componentChaosFLOATorARRAY can be a floating point number in the range of 0 to 1, specifying the amount of chaos to be applied to all components of the color space, or it can be an array of floating point numbers in the range of 0 to 1, specifying the amount of chaos to be applied to specific components.

A value of 0 means there will be no chaos, and values for a component will be calculated at regular intervals between the value of that component for color 1 and the value of that component for color 2. A value of 1 means that the calculation of values for a component will be completely chaotic, and chosen at random points between the value of that component for color 1 and the value of that component for color 2. A value of .5 means that there will be an equal blend between regular intervals and chaos. Any degree of chaos - between none and total - can be introduced into the calculation of combination colors.

VARIATION 3

colorsARRAY = Uize.Color.Util.makeCombinations (
  color1ANYTYPE,
  color2ANYTYPE,
  valuesPerComponentINTorARRAY,
  componentChaosFLOATorARRAY,
  outputEncodingSTR
);

By default, this method generates its combination colors as an array of Uize.Color object instances. However, the optional outputEncodingSTR parameter lets you control the encoding of the color values in the generated array. You can specify any encoding - even an encoding that is not of the same color space as the colors specified by the color1ANYTYPE and color2ANYTYPE parameters. The output encoding will not, however, affect the color space in which the combination colors are generated, and this is determined by the encoding of the color1ANYTYPE parameter.

EXAMPLE

var webSafeColors = Uize.Color.Util.makeCombinations ('0','f',6,0,'#hex');

In the above example, the webSafeColors variable will be an array containing all the web safe colors, encoded in #hex format. The Uize.Color.Util.makeCombinations method makes it easy to generate the web safe colors because they are defined as the combination colors with distinct 6 values per channel: 00, 33, 66, 99, cc, and ff. Now, if you wanted an array of Uize.Color instances instead, you could just specify the value 'color' for the outputEncodingSTR parameter, instead of '#hex'.

IMPLEMENTATION INFO

this feature was introduced in this module

2.2. Uize.Color.Util.mix

Returns an instance of the Uize.Color object, whose color is initialized to the average of all the colors specified in the colors array.

SYNTAX

colorOBJ = Uize.Color.Util.mix (colorsARRAY);

Color values specified in the colorsARRAY array can be specified in any of the many color encodings supported by the Uize.Color module, so the following statement is perfectly valid...

EXAMPLE

var mixedColor = Uize.Color.Util.mix ([
  '#f5f5dc',                    // beige
  [255,0,0],                    // red
  'fuchsia',                    // fuchsia
  'Rgb(64,224,208)',            // turquoise
  {red:255,green:255,blue:0},   // yellow
  0x808080,                     // gray
  Uize.Color (245,255,250)      // mintcream
]);
alert (mixedColor.to ());        // displays the text "#cf9e98"

The above example would produce a Uize.Color object set to the color with the hex RGB equivalent of #cf9e98. The expression mixedColor.to () produces the output '#cf9e98' because the first color in the list is specified using the #hex encoding.

2.2.1. Primary Encoding

When mixing a series of colors, the color encoding of the first color in the series is used as the primary encoding for the mixing process.

This means that the Uize.Color object instance that is returned by this method will be set to that encoding. It also means that any color in the list that may be specified using an encoding that implies a color space other than that of the primary encoding will be automatically converted to the color space of the primary encoding.

VARIATION

colorOBJ = Uize.Color.Util.mix (colorsARRAY,encodingSTR);

When the optional encodingSTR parameter is specified, rhe resulting mixed color can be encoded in any of the many supported color encodings.

EXAMPLE

alert (
  Uize.Color.Util.mix (
    [
      '#f5f5dc',                    // beige
      [255,0,0],                    // red
      'fuchsia',                    // fuchsia
      'Rgb(64,224,208)',            // turquoise
      {red:255,green:255,blue:0},   // yellow
      0x808080,                     // gray
      Uize.Color (245,255,250)      // mintcream
    ],
    'RGB string'
  )
);

In the above example, the alert statement would display the text "rgb(207,158,152)".

IMPLEMENTATION INFO

this feature was introduced in this module

2.3. Uize.Color.Util.sort

Sorts the specified array of colors according to their proximity to a specified reference color, using the specified sort criteria.

SYNTAX

colorsARRAY = Uize.Color.Util.sort (colorsARRAY,referenceColorANYTYPE);

This method sorts the colors specified by the colorsARRAY parameter, by how close they are to the reference color specified by the referenceColorANYTYPE parameter. Colors close to the head of the sorted array will be most like each other and most like the reference color, while colors towards the tail of the sorted array will be most unlike the reference color and will also tend to be most unlike one another. This will make the head of the sorted array appear more orderly, while making the tail appear more chaotic, since colors that are from the reference color may also be far from one another.

Color values in the array to sort can be specified using any of the color encodings supported by the Uize.Color object, but they will be sorted in the color space of the reference color, as specified by the referenceColorANYTYPE parameter. So, if the array of colors are specified using sRGB encodings and the reference color is specified using an HSL encoding, then the colors will be sorted in the HSL color space.

EXAMPLE

Uize.Color.Util.sort (colors,'rgb(255,0,0)'); // sort redder colors to the head of the array

VARIATION 1

colorsARRAY = Uize.Color.Util.sort (
  colorsARRAY,
  referenceColorANYTYPE,
  componentWeightingARRAY
);

By default, the different components are normalized in order to give them equal weighting when calculating the proximity of colors being sorted to the reference color. However, specifying the optional componentWeightingARRAY parameter lets you specify a greater or lesser weighting for different components. For example, in the HSL color space, one may care more about how close colors are in terms of hue to the reference color than one cares about how close they are in terms of saturation or lightness.

The array specified by the componentWeightingARRAY parameter should contain a weighting factor for each component of the color space of the reference color. Each weighting factor should be a floating point number, where a value of 1 represents normal weighting, and a value of 0 means to effectively ignore the component. Weighting values greater than 1 may be specified. For example, a value for componentWeightingARRAY of [2,1,1] in the HSL color space means that hue is twice as important as saturation and lightness. And, for that matter, values of [2,2,2] and [1,1,1] for componentWeightingARRAY both indicate equal weighting for three components of a color space.

EXAMPLES

Uize.Color.Util.sort (colors,'hsl(0,0,0)',[0,0,1]);    // darkest to lightest
Uize.Color.Util.sort (colors,'hsl(0,0,100)',[0,0,1]);  // lightest to darkest
Uize.Color.Util.sort (colors,'hsl(0,100,0)',[0,1,0]);  // most to least saturated
Uize.Color.Util.sort (colors,'hsl(120,0,0)',[1,0,0]);  // hue only, starting with green

The above examples show different ways that different components in the color space can be completely ignored when sorting, simply by giving them a weight of 0.

The "darkest to lightest" example sorts the array so that the darkest colors appear first. This is done by specifying a reference color in the HSL color space, with its lightness component set to 0 (i.e. black), and with the components other than lightness given a weight of 0. The "lightest to darkest" example operates in a similar way, excepting that the reference color for the sort has lightness set to 100 (i.e. white). The "most to least saturated" example specifies weighting of 0 for hue and lightness so that only saturation affects the sort, and the saturation for the reference color is set to 100 (i.e. most saturated first). The "hue only, starting with green" example makes hue the only component of importance, and the hue for the reference color is set to 120 (i.e. green).

VARIATION 2

colorsARRAY = Uize.Color.Util.sort (colorsARRAY);

When no referenceColorANYTYPE parameter is specified, then the reference color will be black in the RGB color space, and colors will be sorted on how close they are to black (so, essentially, darkest to lightest).

NOTES

this method modifies the source array specified by the colorsARRAY parameter
this method returns a reference to the array being sorted

IMPLEMENTATION INFO

this feature was introduced in this module

3. Static Properties

3.1. Uize.Color.Util.moduleName

IMPLEMENTATION INFO

this feature was introduced in this module

3.2. Uize.Color.Util.pathToResources

IMPLEMENTATION INFO

this feature was introduced in this module