Adds Stream support for append()

master
Mihai Potra 9 years ago
parent 0f7835371b
commit 69a233ce42
  1. 30
      lib/args.js
  2. 9
      lib/utils.js
  3. 78
      test/appendStream.js

@ -4,6 +4,7 @@
var argsToArray = require('./utils').argsToArray;
var isUtil = require('./utils').isUtil;
var isReadableStream = require('./utils').isReadableStream;
var tmp = require('tmp');
var fs = require('fs');
/**
@ -95,12 +96,16 @@ module.exports = function (proto) {
this._append.push(arg[j]);
} else if (Buffer.isBuffer(arg[j])) {
appendBuffer(this, arg[j]);
} else if (isReadableStream(arg)) {
appendStream(this, arg[j]);
}
}
break;
case 'object':
if (Buffer.isBuffer(arg)) {
appendBuffer(this, arg);
} else if (isReadableStream(arg)) {
appendStream(this, arg);
}
break;
}
@ -120,6 +125,31 @@ module.exports = function (proto) {
return true;
}
function appendStream(self, stream) {
var tmpFileName = tmp.tmpNameSync();
self._append.push(tmpFileName);
var file = fs.createWriteStream(tmpFileName);
self.preprocessor(function (callback) {
var finished = false;
function ended(err) {
if (!finished) {
finished = true;
callback(err);
}
}
file.on('finish', ended);
stream.pipe(file);
});
return true;
}
return this;
}

@ -1,3 +1,4 @@
var stream = require('stream');
/**
* Escape the given shell `arg`.
@ -40,4 +41,12 @@ exports.isUtil = function (v) {
break;
}
return ty;
}
var isStream = exports.isStream = function isStream(obj) {
return obj instanceof stream.Stream;
}
exports.isReadableStream = function isReadableStream(obj) {
return isStream(obj) && typeof obj._read == 'function' && typeof obj._readableState == 'object';
}

@ -0,0 +1,78 @@
var assert = require('assert')
, fs = require('fs')
, paths = require('path')
;
module.exports = function (_, dir, finish, gm) {
var out = paths.resolve(dir + '/appendBuffer.jpg');
try {
require('fs').unlinkSync(out);
} catch (_) {}
var buffer = fs.createReadStream(dir + '/original.jpg');
var buffer2 = fs.createReadStream(dir + '/original.jpg');
var m = gm(dir + '/lost.png')
.append(dir + '/original.jpg')
.append(buffer, buffer2)
.append()
.background('#222')
var args = m.args();
assert.equal('convert', args[0]);
assert.equal('-background',args[1]);
assert.equal('#222',args[2]);
assert.ok(/examples\/imgs\/lost\.png$/.test(args[3]));
assert.ok(/examples\/imgs\/original\.jpg$/,args[4]);
assert.equal('-append',args[7]);
assert.equal('-',args[8]);
if (!gm.integration) {
return horizontal(dir, finish, gm);
}
m.write(out, function (err) {
if (err) return finish(err);
gm(out).size(function (err, size) {
if (err) return finish(err);
assert.equal(460, size.width);
assert.equal(590, size.height);
horizontal(dir, finish, gm);
})
});
}
function horizontal (dir, finish, gm) {
var out = paths.resolve(dir + '/appendBufferHorizontal.jpg');
var buffer = fs.createReadStream(dir + '/lost.png');
var m = gm(dir + '/original.jpg')
.append(buffer, true);
var args = m.args();
assert.equal('convert', args[0]);
assert.ok(/examples\/imgs\/original\.jpg$/.test(args[1]));
assert.equal('+append',args[3]);
assert.equal('-',args[4]);
if (!gm.integration) {
return finish();
}
m
.write(out, function (err) {
if (err) return finish(err);
gm(out).size(function (err, size) {
if (err) return finish(err);
assert.equal(697, size.width);
assert.equal(155, size.height);
finish();
})
});
}
Loading…
Cancel
Save