Graphicsmagick for node not writing the whole jpg
graphicsmagick, node.js
Solution
I've solved it by using the https://github.com/coolaj86/node-bufferjs concat method.
var fs = require('fs');
var gm = require('gm');
var input = __dirname + '/input.jpg';
var output = __dirname + '/output.jpg';
require('bufferjs');
gm(input)
.resize(800)
.stream( function(err, stdout, stderr) {
ws = fs.createWriteStream( output );
i = [];
stdout.on( 'data', function(data){
console.log('data');
i.push( data );
});
stdout.on( 'close', function(){
console.log( 'close' );
var image = Buffer.concat( i );
ws.write( image.toString('base64'), 'base64' );
ws.end();
});
} );
Apparently you need to keep track of the length/index of your buffers when you concat them. You can find more info by looking at the source code of bufferjs' concat method: https://github.com/coolaj86/node-bufferjs/blob/master/bufferjs/concat.js
Problem
I am using https://github.com/aheckmann/gm to resize an image. ``` var fs = require('fs'); var gm = require('gm'); var input = __dirname + '/input.jpg'; var output = __dirname + '/output.jpg'; gm(input) .resize(350) .stream( function(err, stdout, stderr) { var writeStream = fs.createWriteStream( output, { encoding: 'base64' } ); var i = ''; stdout.on( 'data', function(data){ i += data.toString('base64'); }); stdout.on('end', function(){ writeStream.write( new Buffer(i, 'base64') ); writeStream.end(); }); } ); ``` The problem is that it's not writing the whole image.