0.0.0 • Published 3 years ago

@neomura/aseprite-importer v0.0.0

Weekly downloads
88
License
MIT
Repository
github
Last release
3 years ago

neomura/aseprite-importer

Helpers for importing Aseprite files using NodeJS.

MIT licensed.

Usage

Both bash and aseprite must exist on the PATH.

Use neomura/setup-aseprite-cli-action to use this in CI.

import { inspect } from "util";
import { importAsepriteFile } from "@neomura/aseprite-importer";

importAsepriteFile(`path-to-an-aseprite-file.ase`)
  .then((result) => {
    console.log(inspect(result, false, 4, true));
  });

This will produce the following output for an example file:

{
  frames: [
    {
      durationMilliseconds: 250,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 63, top: 19 }
      }
    },
    { durationMilliseconds: 100, content: null },
    {
      durationMilliseconds: 400,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 69, top: 56 }
      }
    },
    {
      durationMilliseconds: 250,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 33, top: 36 }
      }
    },
    {
      durationMilliseconds: 200,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 71,
          height: 5,
          data: <Buffer ff 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 00 00 ff 00 00 ff 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff 00 00 00 00 ff 00 ... 1370 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 28, top: 46 }
      }
    },
    {
      durationMilliseconds: 500,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 45, top: 42 }
      }
    },
    { durationMilliseconds: 100, content: null },
    {
      durationMilliseconds: 50,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 18, top: 38 }
      }
    },
    {
      durationMilliseconds: 200,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 45, top: 38 }
      }
    },
    {
      durationMilliseconds: 250,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 12, top: 45 }
      }
    },
    { durationMilliseconds: 100, content: null },
    {
      durationMilliseconds: 400,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 53, top: 16 }
      }
    },
    {
      durationMilliseconds: 50,
      content: {
        png: Stream {
          _events: [Object: null prototype] {},
          _eventsCount: 0,
          _maxListeners: undefined,
          width: 48,
          height: 32,
          data: <Buffer 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 00 ff ff 00 ... 6094 more bytes>,
          gamma: 0,
          writable: true,
          readable: true,
          _parser: [Stream],
          _packer: [Stream],
          [Symbol(kCapture)]: false
        },
        offset: { left: 75, top: 27 }
      }
    }
  ],
  tags: [
    { name: 'tag_a_name', frameIndices: [ 0, 1, 2, 3 ] },
    { name: 'tag_b_name', frameIndices: [ 8, 7, 6, 5 ] },
    { name: 'tag_c_name', frameIndices: [ 9, 10, 11, 12, 11, 10 ] }
  ]
}

Here:

  • frames.*.content.png is a pngjs PNG object containing the frame's pixel data, trimmed of transparent space.
  • frames.*.content.offset describes where the trimmed PNG object was positioned relative to the top left corner of the original
  • When frames.*.content is null, the frame is empty.