imager

    1.0.0-alpha1 • Public • Published

    Build Status Gittip Dependencies

    wip: This is work in progress. Converting to use generators and graphicsmagick-stream library. The uploading is handled by pkgcloud. The master branch and 1.0.0-alpha1 tag works only with s3.

    Imager

    A node module to resize, crop and upload images (with different variants and presets) to the cloud.

    Dependencies

    1. node >= 0.11.12 with --harmony flag
    2. You need to install libgraphicsmagicks.

    Using osx

    $ brew install graphicsmagick --build-from-source

    Using ubuntu

    $ sudo apt-get install libgraphicsmagick1-dev

    Installation

    $ npm install imager

    Config

    Use a config file. For example imager-config.js

    variants

    exports.variants = {
      item: {             // variant
        thumb: {          // preset
          options: {      // preset options
            pool: 5,
            scale: { width: 200, height: 150, type: 'contain' },
            crop: { width: 200, height: 150, x: 0, y: 0 },
            format: 'png',
            rotate: 'auto',
          }
        },
        large: {
          original: true  // upload original image without image processing
        }
      },
      gallery: {
        // ...
      }
    };

    In the above config, item and gallery are variants. thumb and large are presets. Each preset has an options object which is a graphicsmagick-stream config object.

    preset options

    • options - An object that is passed to graphicsmagick. See what options are available here

    • rename - A function that accepts an object file as an argument. It has the following properties: name, size, type and path. It is called before uploading each file.

      Example:

      variants.item.thumb.rename = function (file) {
        return 'users/1/thumb/' + file.name;
      };
      var imager = new Imager(variants.item, ...);
    • original - A true value. If this option is set, the original image will be uploaded without any image processing.

    storages

    exports.storages = {
      local: {
        provider: 'local',
        path: '/tmp',
        mode: 0777
      },
      rackspace: {
        provider: 'rackspace',
        username: process.env.IMAGER_RACKSPACE_USERNAME,
        apiKey: process.env.IMAGER_RACKSPACE_KEY,
        authUrl: 'https://lon.auth.api.rackspacecloud.com',
        region: 'IAD', // https://github.com/pkgcloud/pkgcloud/issues/276
        container: process.env.IMAGER_RACKSPACE_CONTAINER
      },
      amazon: {
        provider: 'amazon',
        key: process.env.IMAGER_S3_KEY,
        keyId: process.env.IMAGER_S3_KEYID,
        container: process.env.IMAGER_S3_BUCKET
      }
    }

    Usage

    var Imager = require('imager');
    var config = require('./imager-config.js');
    var imager = new Imager(config.variants.item, config.storages.amazon);
    // You can also pass only the storage without a variant which will simply
    // upload the original image
    // new Imager(storages.amazon)

    API

    .upload(files, callback)

    files is an array of files or a single file. A file can be a file object, absolute file path pointing a local file or base64 encoded image data. callback accepts err and an object containing the array of uploaded images.

    var config = require('./imager-config.js');
    var imager = new Imager(config.variants.item, config.storages.amazon);
    imager.upload(files, function (err, avatar) {
      // avatar =>
      // {
      //   thumb: [ 'https://fudge.s3.amazonaws.com/user/1/thumb/image-1.png', ],
      //   large: [ 'https://fudge.s3.amazonaws.com/user/1/large/image-1.png', ]
      // }
    });

    .remove(files, callback)

    files is an array of files or a single file. A file should be the file name of the image on the storage. callback accepts err as an argument.

    var config = require('./imager-config.js');
    var imager = new Imager(config.storages.amazon);
    var files = ['file-1.png']; // or just 'file-1.png'
    imager.remove(files, function (err) {
     
    });

    .regenerate()

    Tests

    $ npm test

    TODO

    • Support base64 image uploads
    • Implement .remove()
    • Implement .regenerate()
    • Test the api's for rackspace

    License

    MIT

    Install

    npm i imager

    DownloadsWeekly Downloads

    7

    Version

    1.0.0-alpha1

    License

    none

    Last publish

    Collaborators

    • madhums