imager
Version:
Easy way to resize, crop and upload images to Rackspace cloudfiles and Amazon S3
164 lines (125 loc) • 4.64 kB
Markdown
[](https://travis-ci.org/imagerjs/imager)
[](https://www.gratipay.com/madhums/)
[](https://david-dm.org/imagerjs/imager)
**wip**: This is work in progress. Converting to use generators and [graphicsmagick-stream](https://github.com/e-conomic/graphicsmagick-stream) library. The uploading is handled by [pkgcloud](https://github.com/pkgcloud/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
```sh
$ brew install graphicsmagick --build-from-source
```
Using ubuntu
```sh
$ sudo apt-get install libgraphicsmagick1-dev
```
## Installation
```sh
$ npm install imager
```
## Config
Use a config file. For example [imager-config.js](https://github.com/imagerjs/imager/blob/master/test/imager.js)
### variants
```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](https://github.com/e-conomic/graphicsmagick-stream#usage) config object.
#### preset options
- `options` - An object that is passed to graphicsmagick. See what options are available [here](https://github.com/e-conomic/graphicsmagick-stream#usage)
- `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:
```js
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
```js
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
```js
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.
```js
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.
```js
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
```sh
$ npm test
```
## TODO
- Support base64 image uploads
- <del>Implement `.remove()`</del>
- Implement `.regenerate()`
- Test the api's for rackspace
## License
MIT