imager

Easy way to resize, crop and upload images to Rackspace cloudfiles and Amazon S3

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.

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

  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
$ npm install imager

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

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.

  • 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.

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
  }
}
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) 

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 (erravatar) {
  // 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', ] 
  // } 
});

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) {
 
});
$ npm test
  • Support base64 image uploads
  • Implement .remove()
  • Implement .regenerate()
  • Test the api's for rackspace

MIT