graphicsmagick-stream
v2.1.2
Published
Fast convertion/scaling of images using a pool of long lived graphicsmagick processes
Downloads
49
Readme
graphicsmagick-stream
Fast convertion/scaling of images using a pool of long lived graphicsmagick processes
npm install graphicsmagick-stream
It works by spawning and reusing a custom graphicsmagick processes (see src/) that accepts images over stdin and pipes out the converted result over stdout
Usage
var gm = require('graphicsmagick-stream')
var fs = require('fs')
var convert = gm({
pool: 5, // how many graphicsmagick processes to use
format: 'png', // format to convert to
scale: {
width: 200, // scale input to this width
height: 200, // scale input this height
type: 'contain' // scale type (either contain/cover/fixed)
},
crop: {
width: 200, // crop input to this width
height: 200, // crop input this height
x: 0, // crop using this x offset
y: 0 // crop using this y offset
},
page: [1,5], // only render page 1 to 5 (for pdfs)
// set to a single number if you only want to render one page
// or omit if you want all pages
rotate: 'auto', // auto rotate image based on exif data
// or use rotate:degrees
density: 300, // set the image density. useful when converting pdf to images
split: false, // when converting pdfs into images it is possible to split
// into multiple pages. If set to true the resulting file will
// be a tar containing all the images.
tar: false // stream a tar containing the image. This is forced to `true`
// if split is set to `true`
})
fs.createReadStream('input.jpg')
.pipe(convert({
// override any of the above options here
}))
.pipe(fs.createWriteStream('output.jpg'))
You do not need to set all the options. If you only want to scale an image do
var stream = convert({
scale: {
width: 400,
height: 300
}
})
You can also use it to get metadata info about an image using convert.info
var info = convert.info(function(err, info) {
console.log(info) // prints something like {width:500, height:400, format:'png'}
})
fs.createReadStream('input.jpg').pipe(info)
For more examples and usage see the test folder
Scale types
contain
sets the scaled image to maximum have a width/height of the scale box. Always respects ratio.cover
sets the scaled image to at least have one of the width/height within the scale box. Always respects ratio.fixed
sets the scaled image to precisely the given width/height of the scale box. If both width/height is given it does not respect the ratio.
PDF Conversion
If you install ghostscript as well you will be able to convert pdfs to images by simply piping in a pdf and setting output format to jpeg
(or another image format).
If you are rendering a multipage pdf scale.height
will set the height of each page. To force scale.height
to donate the height of the entire image set scale.multipage = true
.
Use split = true
to output each page as an image file. This will result in a tar file containing all the images, so you will need to untar them on the other end. Use a project like tar-stream to achieve this.
Dependencies
You need to install libgraphicsmagicks in order to compile this.
Using OS X and Homebrew
brew install graphicsmagick --build-from-source
brew install libarchive
You will have to build the binary using the following command
gcc src/*.c -o bin/convert -L/usr/local/opt/libarchive/lib -I/usr/local/opt/libarchive/include -larchive -O `GraphicsMagickWand-config --cflags --cppflags --ldflags --libs`
Using Ubuntu
sudo apt-get install build-essential libgraphicsmagick++1-dev libarchive-dev
Then npm install
should work.
License
MIT