2012-04-27 8 views
3

私はhttps://github.com/aheckmann/gmを使ってイメージのサイズを変更しています。ノードのGraphicsmagickがjpg全体を書き込んでいない

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(); 

    }); 

    }); 

問題は、画像全体を書き込んでいないことです。あなたがデータを取得するとき

half camel

答えて

7

私はhttps://github.com/coolaj86/node-bufferjs連結メソッドを使用して解決しました。

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(); 

    }); 

    }); 

バッファを連結するときは、バッファの長さ/インデックスを追跡する必要があります。 bufferjsのconcatメソッドのソースコードを見ると、より多くの情報を見つけることができます。https://github.com/coolaj86/node-bufferjs/blob/master/bufferjs/concat.js

+0

ありがとう、良い解決策! –

3

なぜあなただ​​けの出力ストリームに直接書き込みませんか?

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

ああデータベースに保存します。 – Pickels

2

私が見つけたのはimagemagick非常に便利で簡単なことです。私もgraphicsmagickを試しましたが運はありません。

imagemagickは、次のコマンドでインストールできます。

npm install imagemagick 

imagemagickのためのサンプルコードとドキュメントは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'); 
}); 
3

単純にこれを実行します。私は実際に私のオブジェクトに格納しています原因、

var gm = require('gm').subClass({imageMagick: true}); 

gm('kittens.jpg') 
.resize(50,50) 
.write("kittens-small.jpg", function (err) { 
    if(err) throw err; 
}); 
関連する問題