我正在使用https://github.com/aheckmann/gm来调整图片大小。
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();
});
} );
问题在于它没有写出整个图像。
答案 0 :(得分:7)
我已经使用https://github.com/coolaj86/node-bufferjs concat方法解决了这个问题。
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
答案 1 :(得分: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);
});
答案 2 :(得分:3)
只需这样做:
var gm = require('gm').subClass({imageMagick: true});
gm( 'kittens.jpg' )
.resize(50,50)
.write( "kittens-small.jpg", function (err) {
if( err ) throw err;
});
答案 3 :(得分: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');
});