Nuanced Pumpkin Mavens

    inkjet

    3.0.0 • Public • Published

    inkjet-logo

    Node.js CI

    JPEG-image decoding, encoding & EXIF reading library for a browser and node.js

    browser-matrix

    Installation

    installing with npm:

    npm install inkjet --save

    In browser

    To use inkjet in a browser, use inkjet.js or inkjet.min.js in /dist directory, or build it manually:

    npm install
    npm run browser

    Usage

    Decoding, encoding and EXIF extraction operations are offloaded to WebWorkers if the environment supports them.

    Decode JPEG

    var inkjet = require('inkjet');
     
    var filepath = './images/js_logo-4-2-0.jpg';
    var buf = fs.readFileSync(filepath);
     
    inkjet.decode(buf, function(err, decoded) {
      // decoded: { width: number, height: number, data: Uint8Array }
    });

    Encode JPEG

    var inkjet = require('inkjet');
     
    var width = 320;
    var height = 180;
    var frameData = new Buffer(width * height * 4);
    var i = 0;
     
    while (< frameData.length) {
      frameData[i++] = 0xFF; // R, red
      frameData[i++] = 0x00; // G, green
      frameData[i++] = 0x00; // B, blue
      frameData[i++] = 0xFF; // A, alpha - ignored in JPEGs
    }
     
    var buf = frameData;
    var options = {
      width: width,
      height: height,
      quality: 80
    };
     
    inkjet.encode(buf, options, function(err, encoded) {
      // encoded: { width: number, height: number, data: Uint8Array }
    });

    Read EXIF

    var inkjet = require('inkjet');
     
    var filepath = './images/js_logo-exif.jpg';
    var buf = fs.readFileSync(filepath);
    inkjet.exif(buf, function(err, metadata) {
      // metadata -- an object that maps EXIF tags to string values
    });

    Deduce image type

    var inkjet = require('inkjet');
     
    var filepath = './images/js_logo-4-2-0.jpg';
    var buf = fs.readFileSync(filepath);
    inkjet.magic(buf, function(err, data) {
      // data -- an object that contains mime-type and extension
    });

    Image information

    var inkjet = require('inkjet');
     
    var filepath = './images/js_logo-4-2-0.jpg';
    var buf = fs.readFileSync(filepath);
    inkjet.info(buf, function(err, data) {
      // data -- an object that contains width, height, mime type and extension data
    });

    API

    .decode(buf, [options], cb);

    Decodes a JPEG image.

    Arguments:

    • buf - source buffer, one of the following types: Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray
    • [options] - an optional object with settings to decode an image. Supported options:
      • width - override image width
      • height - override image height
    • cb - a callback that gets 2 arguments:
      • err - decoding Error
      • decoded - an object that describes the decoded image: { width: number, height: number, data: Uint8Array } where data represents colors in RGBA format.
    inkjet.decode(buf, function(err, decoded) {
      // ...
    });

    .encode(buf, [options], cb);

    Encodes the provided buffer to a JPEG format.

    Arguments:

    • buf - source buffer, one of the following types: Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray
    • [options] - an optional object with settings to encode an image. Supported options:
      • width - width of the image in buf
      • height- height of the image in buf
      • quality - a numberic value [0-100], describes quality of encoding. 0 - low quality, 100 - high quality.
    • cb - a callback that gets 2 arguments:
      • err - encoding Error
      • encoded - an object that describes the encoded image: { width: number, height: number, data: Uint8Array }
    inkjet.encode(buf, function(err, encoded) {
      // ...
    });

    .exif(buf, [options], cb);

    Get EXIF metadata for the image. The metadata tags defined in the Exif standard cover date and time information, camera settings, descriptions, resolution and location information.

    Arguments:

    • buf - source buffer, one of the following types: Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray
    • [options] - an optional object with settings to encode an image. Supported options:
      • hasMakerNote - exclude MakerNote tag from metadata. Default value: true, MakerNote tag is excluded.
    • cb - a callback that gets 2 arguments:
      • err - exif extraction Error
      • metadata - metadata object, a set of tags and their values.
    inkjet.exif(buf, function(err, metadata) {
      // ...
    });

    .magic(buf, cb);

    Deduce image type (mime type and extension) for the provided buffer.

    Arguments:

    • buf - source buffer, one of the following types: Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray
    • cb - a callback that gets 2 arguments:
      • err - Error object
      • data - data object { "mimeType": string, "extension": string }
    inkjet.magic(buf, function(err, data) {
      // ...
    });

    .info(buf, cb);

    Get image information without reading and decoding an image.

    Arguments:

    • buf - source buffer, one of the following types: Buffer|ArrayBuffer|Uint8Array|Uint8ClampedArray
    • cb - a callback that gets 2 arguments:
      • err - Error object
      • data - data object { "type": string, "mimeType": string, "extension": string, "width": number, "height: number" }
    inkjet.info(buf, function(err, data) {
      // data: {
      //   type: "image"
      //   mimeType: ...
    });

    Tests

    To run the tests for inkjet in Node.js:

    npm test

    To run tests in a browser:

    npm run bundle:test

    a bundle file inkjet-test-bundle.js with all tests will be generated in inkjet/test/browser directory.

    Open inkjet/test/browser/index.html in the target browser. Tests will run automatically.

    Contact

    Grigorii Chudnov

    License

    Distributed under the The MIT License (MIT).

    Install

    npm i inkjet

    DownloadsWeekly Downloads

    688

    Version

    3.0.0

    License

    MIT

    Unpacked Size

    2.67 MB

    Total Files

    23

    Last publish

    Collaborators

    • gchudnov