Package Exports
- mongoose-crate-gm
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (mongoose-crate-gm) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
mongoose-crate-gm
A mongoose-crate FileProcessor that applies image transformations with GraphicsMagick via the gm
module.
Prequisites
A modern version of GraphicsMagic installed and available on the path.
Usage
You can pass images through one or more filters:
const mongoose = require('mongoose')
const crate = require('mongoose-crate')
const LocalFS = require('mongoose-crate-localfs')
const GraphicsMagic = require('mongoose-crate-gm')
const PostSchema = new mongoose.Schema({
title: String,
description: String
})
PostSchema.plugin(crate, {
storage: new LocalFS({
directory: '/path/to/storage/directory'
}),
fields: {
image: {
processor: new GraphicsMagic({
tmpDir: '/tmp', // Where transformed files are placed before storage, defaults to os.tmpdir()
formats: ['JPEG', 'GIF', 'PNG'], // Supported formats, defaults to ['JPEG', 'GIF', 'PNG', 'TIFF']
transforms: {
original: {
// keep the original file
},
small: {
resize: '150x150',
format: '.jpg'
},
medium: {
resize: '250x250',
format: '.jpg'
}
}
})
}
}
})
const Post = mongoose.model('Post', PostSchema)
.. then later:
const post = new Post()
post.attach('image', {path: '/path/to/image'}, (error) => {
// image is now attached and post.image is populated e.g.:
// post.image.small.url
// post.image.medium.url
})
Meta data
mongoose-crate-gm
extends the basic meta data added by mongoose-crate
to add some image specific fields. It provides the following for each transformation:
{
width: 120,
height: 103,
depth: 8,
format: 'PNG',
name: 'dragon.png',
size: 26887,
url: 'http://my_bucket.s3.amazonaws.com/folder/4fbaaa31db8cec0923000019-medium.png'
}
Transformations
Transformations are achieved by invoking the convert command and passing all the properties of the transform as arguments.
Example in convert command:
gm convert source.png -crop 120x120 -blur 5x10 output.png
Example in plugin options:
PostSchema.plugin(crate, {
...
fields: {
image: {
processor: new GraphicsMagic({
transforms: {
small: {
crop: '120x120',
blur: '5x10'
For more information on available transforms, see the GraphicsMagick website.
Changing the destination format
You can change the destination format by using the special transform property format
with a known file extension like png, jpg, gif, etc:
PostSchema.plugin(crate, {
...
fields: {
image: {
processor: new GraphicsMagic({
transforms: {
as_jpeg: {
format: 'jpg'
Supported formats
By default we'll only try to process a few common image types. The supported list defaults to jpgs, pngs, gifs and tiffs.
This list can be overridden by specifying the formats
argument:
PostSchema.plugin(crate, {
...
fields: {
image: {
processor: new GraphicsMagic({
formats: ['JPEG', 'GIF', 'PNG']
The values should match up with convert
's supported formats. To see a list of all formats supported by your install, run:
gm convert -list format
Using ImageMagick instead of GraphicsMagic
By default the gm
module uses the GraphicsMagic binary. If you wish to use ImageMagick instead, first install a recent version of ImageMagick on your system and add it to your path, then pass true for the imageMagick
option:
PostSchema.plugin(crate, {
...
fields: {
image: {
processor: new GraphicsMagic({
imageMagick: true