@elastic/spritezero

small opinionated sprites

Usage no npm install needed!

<script type="module">
  import elasticSpritezero from 'https://cdn.skypack.dev/@elastic/spritezero';
</script>

README

@elastic/spritezero

Forked from @mapbox/spritezero

WTF? (Why The Fork?)

The mapbox-gl-js Map.addImage method supports loading icons with SDF (signed distance fields). The icon-color and icon-halo-color properties of the Mapbox Style Specification are only supported on SDF icons.

This fork of the spritezero library adds an options.sdf parameter to the spritezero functions. SDF icons are generated from SVGs using the pathToSDF function in the elastic/fontnik library.

You can see a demo of SDF sprites here.

Usage

var spritezero = require('@elastic/spritezero');
var fs = require('fs');
var glob = require('glob');
var path = require('path');

[1, 2, 4].forEach(function(pxRatio) {
    var svgs = glob.sync(path.resolve(path.join(__dirname, 'input/*.svg')))
        .map(function(f) {
            return {
                svg: fs.readFileSync(f),
                id: path.basename(f).replace('.svg', '')
            };
        });
    var pngPath = path.resolve(path.join(__dirname, 'output/sprite@' + pxRatio + '.png'));
    var jsonPath = path.resolve(path.join(__dirname, 'output/sprite@' + pxRatio + '.json'));

    // Pass `true` in the layout parameter to generate a data layout
    // suitable for exporting to a JSON sprite manifest file.
    spritezero.generateLayout({ imgs: svgs, pixelRatio: pxRatio, sdf: true, format: true }, function(err, dataLayout) {
        if (err) return;
        fs.writeFileSync(jsonPath, JSON.stringify(dataLayout));
    });

    // Pass `false` in the layout parameter to generate an image layout
    // suitable for exporting to a PNG sprite image file.
    spritezero.generateLayout({ imgs: svgs, pixelRatio: pxRatio, sdf: true, format: false }, function(err, imageLayout) {
        spritezero.generateImage(imageLayout, function(err, image) {
            if (err) return;
            fs.writeFileSync(pngPath, image);
        });
    });

});

Installation

Requires nodejs v10.0.0 or greater.

$ npm install @elastic/spritezero

Executable

@elastic/spritezero-cli is an executable for bundling and creating your own sprites from a folder of svg's:

$ npm install -g @elastic/spritezero-cli
$ spritezero --help

Usage:
spritezero [output filename] [input directory]
  --retina      shorthand for --ratio=2
  --ratio=[n]   pixel ratio
  --sdf         generate sdf sprites