12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- /**
- * Module dependencies.
- */
- var fs = require('fs');
- var parallel = require('array-parallel');
- /**
- * Extend proto.
- */
- module.exports = function (proto) {
- /**
- * Do nothing.
- */
- function noop () {}
- // http://www.graphicsmagick.org/GraphicsMagick.html#details-morph
- proto.morph = function morph (other, outname, callback) {
- if (!outname) {
- throw new Error("an output filename is required");
- }
- callback = (callback || noop).bind(this)
- var self = this;
- if (Array.isArray(other)) {
- other.forEach(function (img) {
- self.out(img);
- });
- self.out("-morph", other.length);
- } else {
- self.out(other, "-morph", 1);
- }
- self.write(outname, function (err, stdout, stderr, cmd) {
- if (err) return callback(err, stdout, stderr, cmd);
- // Apparently some platforms create the following temporary files.
- // Check if the output file exists, if it doesn't, then
- // work with temporary files.
- fs.exists(outname, function (exists) {
- if (exists) return callback(null, stdout, stderr, cmd);
- parallel([
- fs.unlink.bind(fs, outname + '.0'),
- fs.unlink.bind(fs, outname + '.2'),
- fs.rename.bind(fs, outname + '.1', outname)
- ], function (err) {
- callback(err, stdout, stderr, cmd);
- })
- })
- });
- return self;
- }
- }
|