Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

@jimp/custom

jimp-dev5.6mMIT0.22.12TypeScript support: included

Interface to customize jimp configuration

readme

@jimp/custom

Configure jimp with types and plugins.

Useful Defaults

The following wil configure a jimp instance with the same functionality as the main jimp package.

import configure from "@jimp/custom";
// all of jimp's default types
import types from "@jimp/types";
// all of jimp's default types
import plugins from "@jimp/plugins";

configure({
  types: [types],
  plugins: [plugins],
});

Available Methods

configure

Takes a Jimp configuration and applies it to @jimp/core.

Sample Jimp configuration:

import types from '@jimp/types';

import bmp from '@jimp/bmp';
import jpeg from '@jimp/types';
...

configure({
  types: [types]
})

// or

configure({
  types: [bmp, jpeg, ...]
})

Extending Jimp Further

You can use configure to add more types and plugins to a jimp multiple times.

let jimp = configure({
  types: [bmp],
});

jimp = configure(
  {
    types: [jpeg],
  },
  jimp
);

Type Definition

To define a new Jimp image type write a function the takes the current Jimp configuration. In this function you can extend Jimp's internal data structures.

This function must return an object whose key is the mime type and value is an array of valid file extensions.

const special = require('special-js');

const MIME_TYPE = 'image/special';

export default () => ({
  mime: {[MIME_TYPE], ['spec', 'special']},

  constants: {
    MIME_SPECIAL: MIME_TYPE
  },

  decoders: {
    [MIME_TYPE]: data => special.decode(data)
  },

  encoders: {
    [MIME_TYPE]: image => special.encode(image.bitmap)
  }
});

Constants

A jimp image type can expose as many constants as it wants. Each jimp type is required to expose a mime type.

constants: {
  MIME_SPECIAL: MIME_TYPE
},

hasAlpha

A image type can define whether it supports an alpha channel.

hasAlpha: {
  MIME_SPECIAL: true
},

Decoder

A function that when supplied with a buffer should return a bitmap with height and width.

decoders: {
  [MIME_TYPE]: data => special.decode(data)
},

Encoder

A function that when supplied with a Jimp image should return an encoded buffer.

encoders: {
  [MIME_TYPE]: image => special.encode(image.bitmap)
}

Class

Add class properties and function to the Jimp constructor.

class: {
  _quality: 100,
  quality: function(n, cb) {
    if (typeof n !== 'number') {
      return throwError.call(this, 'n must be a number', cb);
    }

    if (n < 0 || n > 100) {
      return throwError.call(this, 'n must be a number 0 - 100', cb);
    }

    this._quality = Math.round(n);

    if (isNodePattern(cb)) {
      cb.call(this, null, this);
    }

    return this;
  }
};

Plugin Definition

Defining a plugin has access to all the same things in the type definition. Mainly plugins use just the constants and class config options.

Below is the invert plugin. If a plugin doesn return an object with constants and class, all keys are treated as class functions.

import { isNodePattern } from "@jimp/utils";

/**
 * Inverts the image
 * @param {function(Error, Jimp)} cb (optional) a callback for when complete
 * @returns {Jimp} this for chaining of methods
 */
export default () => ({
  invert(cb) {
    this.scanQuiet(
      0,
      0,
      this.bitmap.width,
      this.bitmap.height,
      function (x, y, idx) {
        this.bitmap.data[idx] = 255 - this.bitmap.data[idx];
        this.bitmap.data[idx + 1] = 255 - this.bitmap.data[idx + 1];
        this.bitmap.data[idx + 2] = 255 - this.bitmap.data[idx + 2];
      }
    );

    if (isNodePattern(cb)) {
      cb.call(this, null, this);
    }

    return this;
  },
});

changelog

v0.22.1 (Mon Feb 06 2023)

🏠 Internal

Authors: 1


v0.22.0 (Mon Feb 06 2023)

🏠 Internal

Authors: 1


v0.21.0 (Sun Feb 05 2023)

Release Notes

Babel Refactor (#1149)

Marking this as a "breaking release" because it might change what deps need to be installed.

All modules should be exported as valid cjs and esm

CleanShot 2023-02-04 at 18 19 27


💥 Breaking Change

Authors: 1


v0.18.0 (Sun Feb 05 2023)

Release Notes

switch from browserify to webpack (#1140)

This PR can be considered a breaking change as it remove the jimp.min.js file.

Instead there is now only the jimp.js file and we ship source maps for it.

We also configured the browser field so jimp will be automatically bundled better


💥 Breaking Change

Authors: 1


v0.16.3 (Sat Feb 04 2023)

⚠️ Pushed to main

Authors: 1


v0.11.0 (Fri May 15 2020)

🚀 Enhancement

Authors: 1


v0.10.0 (Mon Mar 30 2020)

🚀 Enhancement

Authors: 1


v0.9.6 (Wed Mar 18 2020)

🏠 Internal

Authors: 1


v0.9.3 (Tue Nov 26 2019)

🐛 Bug Fix

  • @jimp/cli, @jimp/core, @jimp/custom, jimp, @jimp/plugin-blit, @jimp/plugin-blur, @jimp/plugin-circle, @jimp/plugin-color, @jimp/plugin-contain, @jimp/plugin-cover, @jimp/plugin-crop, @jimp/plugin-displace, @jimp/plugin-dither, @jimp/plugin-fisheye, @jimp/plugin-flip, @jimp/plugin-gaussian, @jimp/plugin-invert, @jimp/plugin-mask, @jimp/plugin-normalize, @jimp/plugin-print, @jimp/plugin-resize, @jimp/plugin-rotate, @jimp/plugin-scale, @jimp/plugin-shadow, @jimp/plugin-threshold, @jimp/plugins, @jimp/test-utils, @jimp/bmp, @jimp/gif, @jimp/jpeg, @jimp/png, @jimp/tiff, @jimp/types, @jimp/utils

Authors: 2