2016-03-12 3 views
6

Я использую этот пакет узла:При использовании узла острого пакета для изменения размера изображений и загрузить s3 он повернут

https://www.npmjs.com/package/sharp

Я использую его, чтобы изменить размер изображения, а затем загрузить его на Amazon S3.

Большинство изображений можно найти, но некоторые из них (я полагаю, на основе соотношения сторон) повернуты.

Есть ли способ предотвратить это или повод для этого?

Настоящая копия кода, который я использую. imageData - это либо данные, взятые из файла ведро s3 из загрузки файла. Как вы можете видеть, я не вызываю функцию rotate. Нужно ли «запереть» вращение?

module.exports.resize = function(imageData, width, fileName){ 
    sharp(imageData).resize(parseInt(width), null).toBuffer(function (err, data) { 
     if (err) throw err; 

     s3.putObject({ 
      Bucket: aws.bucket, 
      Key: 'images/' + width + '/' + fileName, 
      Body: data 
     }, function (err, data) { 
      if (err) { 
       console.log('Failed to resize image due to an error: ' + err); 
       return { 
        message: 'Failed to resize image due to an error: ' + err 
       }; 
      } else { 
       console.log('s3 image uploaded to ' + 'images/' + width + '/' + fileName); 
       return { 
        message: 's3 image uploaded to ' + 'images/' + width + '/' + fileName 
       }; 
      } 
     }); 
    }); 
}); 
+0

Было бы лучше, если бы вы показали свой код и тестовое изображение. –

+1

Возможно ли, что ваше изображение имеет данные ориентации EXIF, которые не учитываются вашим зрителем или libvips (резервная библиотека для резкого)? – mikefrey

+0

Как проверить данные ориентации EXIF? – jaget

ответ

3

Рабочий код для извлечения изображения из URL (s3 URL), изменить его размер, а затем загрузить уменьшенное изображение на s3 модуль

var sharp = require('sharp') 
var request = require('request').defaults({encoding: null}) 
var s3Upload = require('./s3Upload') 

module.exports = function (fileLocation) { 
    request(fileLocation, function (error, response, body) { 
    var fileInstance400x400 = sharp(body) 
    var inst400x400 = fileInstance400x400.resize(400, 400) 
    s3Upload('filename400x400', inst400X400) 
    }) 
} 
// fileLocation iabsolute url of image 

s3Upload

var aws = require('aws-sdk') 
var config = require('../config') 
/** 
* @param fileName: filename to be saved 
* @param file: bufferd data 
*/ 

function defaultContentType(req, file, cb) { 
    setImmediate(function() { 
    var ct = file.contentType || file.mimetype || 'application/octet-stream' 
    cb(null, ct); 
    }); 
} 

module.exports = function (fileName, file) { 
    aws.config.update({ 
    accessKeyId: config.S3_CONF.access_key_id, 
    secretAccessKey: config.S3_CONF.access_key, 
    region: config.S3_CONF.region, 
    contentType: defaultContentType, 
    limits: {fileSize: 1000000, files: config.MAX_FILE_COUNT || 6} 
    }) 

    var s3bucket = new aws.S3({params: {Bucket: config.S3_CONF.media_bucket}}); 

    var params = {Key: fileName, Body: file}; 
    // TODO setting proper header for s3 
    s3bucket.upload(params, function (err, data) { 
    if (err) { 
     console.log('Error uploading data: ', err); 
    } else { 
     console.log('Successfully uploaded data to myBucket/myKey'); 
    } 
    }); 

} 

надеюсь, что это помогает

+0

НИКОГДА не используйте accessKeyId & secretAccessKey в коде! – EvgenyKolyakov

 Смежные вопросы

  • Нет связанных вопросов^_^