Graphicsmagick for node not writing the whole jpg

后端 未结 4 1864
独厮守ぢ
独厮守ぢ 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:04

    Simply do this :

    var gm = require('gm').subClass({imageMagick: true});
    
    gm( 'kittens.jpg' )
    .resize(50,50)
    .write( "kittens-small.jpg", function (err) {
        if( err ) throw err;
    });
    
    0 讨论(0)
  • 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

    0 讨论(0)
  • 2021-01-14 04:13

    Why don't you just write directly to the output stream when you get data?

    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'
      });
    
      stdout.pipe(writeStream);
    
    });
    
    0 讨论(0)
  • 2021-01-14 04:15

    I found imagemagick very useful and simple. I also tried graphicsmagick but no luck.

    You can install imagemagick with the following command.

    npm install imagemagick
    

    Following is the example code and documentation for imagemagick is at https://github.com/rsms/node-imagemagick:

    var im = require('imagemagick');
    
    im.resize({
      srcPath: 'kittens.jpg',
      dstPath: 'kittens-small.jpg',
      width: 50,
      height: 50
    }, function(err, stdout, stderr){
      if (err) throw err;
      console.log('resized kittens.jpg to fit within 256x256px');
    });
    
    0 讨论(0)
提交回复
热议问题