Skip to content

Instantly share code, notes, and snippets.

@newtriks
Forked from arian/crop.js
Created February 7, 2014 14:33
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save newtriks/8863640 to your computer and use it in GitHub Desktop.
Save newtriks/8863640 to your computer and use it in GitHub Desktop.
var spawn = require('child_process').spawn;
var Stream = require('stream');
/**
* crops and resizes images to our desired size
* @param {Stream} streamIn in stream containing the raw image
* @return {Stream}
*/
exports.cropImage = function(streamIn){
var command = 'convert';
// http://www.imagemagick.org/Usage/resize/#space_fill
var args = [
"-", // use stdin
"-resize", "640x", // resize width to 640
"-resize", "x360<", // resize height if it's smaller than 360
"-gravity", "center", // sets the offset to the center
"-crop", "640x360+0+0", // crop
"+repage", // reset the virtual canvas meta-data from the images.
"-" // output to stdout
];
var proc = spawn(command, args);
var stream = new Stream();
proc.stderr.on('data', stream.emit.bind(stream, 'error'));
proc.stdout.on('data', stream.emit.bind(stream, 'data'));
proc.stdout.on('end', stream.emit.bind(stream, 'end'));
proc.on('error', stream.emit.bind(stream, 'error'));
streamIn.pipe(proc.stdin);
return stream;
};
// usage
var fs = require('fs');
var streamIn = fs.createReadStream('./image.jpg');
var streamOut = fs.createWriteStream('./resized.jpg');
exports.cropImage(streamIn).pipe(streamOut);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment