如何在Node js中调整图像大小

时间:2016-05-09 12:27:18

标签: javascript node.js amazon-s3 image-resizing

我需要先调整图像大小,然后再将其上传到s3(亚马逊)。 我试过这个功能,但它不起作用。

以下是上传图片的功能。

我的文件名是:var AWS = require('aws-sdk'), fs = require('fs'); var express = require("express"); var app = express(); var im = require('imagemagick'); // For dev purposes only AWS.config.update({ accessKeyId: '', secretAccessKey: '' }); // Read in the file, convert it to base64, store to S3 var fileStream = fs.createReadStream('beach_life-normal.jpg'); fileStream.on('error', function (err) { if (err) { throw err; } }); fileStream.on('open', function () { var s3 = new AWS.S3(); im.resize({ srcPath: 'beach_life-normal.jpg', dstPath: 'beach_life-normal-small.jpg', width: 256 }); s3.putObject({ Bucket: 'adinoauploadefile', Key: 'beach_life-normal.jpg', Body: fileStream }, function (err) { if (err) { throw err; } }); });

我尝试了这个新代码,但它仍无效!!!

这是我的代码:

.label-cont{
  position: absolute!important; /*Important used only to example. Could be overrated with hierarchy*/
  right: 60px;
}

3 个答案:

答案 0 :(得分:0)

在您的示例中,您需要在调整图像大小(s3.putObject)之前将图像保存到S3(im.resize)。在put之前移动resize函数。

您还没有将图像传递给调整大小功能;你需要像

这样的东西
im.resize(fileStream, { // pass in the image
      height:100,
      width:   200
 }, function(err, stdout, stderr){
      if (err) throw err;
      console.log('resized image to fit within 200x200px');
 });

检查您正在使用的库的文档以获取正确的语法。

答案 1 :(得分:0)

你似乎缺乏"之前的基本概念"和数据流,但无论如何我都会尝试。

您需要在读取文件和上传到S3之间插入内容。 convert进程似乎是一个好主意。

var args = ['beach_life-normal.jpg', '-resize', '200x200>', 'JPEG:-']
var convert = child_process.spawn('convert', args);
var s3 = new AWS.S3();

s3.putObject({
    Bucket: 'adinoauploadefile',
    Key: 'beach_life-normal.jpg',
    Body: convert.stdout
},
// ...

我会将错误处理等等留给您。

答案 2 :(得分:0)

使用此代码。

im.convert(['kittens.jpg', '-resize', '25x120', 'kittens-small.jpg'], 
function(err, stdout){
  if (err) throw err;
  console.log('stdout:', stdout);
});

代替kittens.jpg,您可以提供图像路径,或者在您的情况下,您可以使用fileStream和kittens-small.jpg将是已调整大小的图像名称的名称。