Graphicsmagick for node not writing the whole jpg

后端 未结 4 1905
独厮守ぢ
独厮守ぢ 2021-01-14 03:40

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\';         


        
4条回答
  •  醉话见心
    2021-01-14 04:08

    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

提交回复
热议问题