2016-03-12 11 views
6

Sto usando questo pacchetto nodo:Quando si utilizza il pacchetto tagliente nodo per ridimensionare un'immagine e caricarla a s3 è ruotato

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

Io lo uso per ridimensionare un'immagine e poi caricarlo su Amazon S3.

La maggior parte delle immagini viene trovata ma alcune di esse (presumo in base al rapporto di aspetto) vengono ruotate.

C'è un modo per impedire questo o un motivo?

Ecco una copia del codice che sto usando. imageData sono dati presi da un file bucket s3 del caricamento file. Come puoi vedere, non sto chiamando la funzione di rotazione. Esiste comunque la rotazione del "blocco"?

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

Sarebbe meglio se mostri il tuo codice e l'immagine di prova. –

+1

È possibile che l'immagine abbia dati di orientamento EXIF ​​che non vengono presi in considerazione dal visualizzatore o da libvips (la lib di backup per sharp)? – mikefrey

+0

Come verifico i dati di orientamento EXIF? – jaget

risposta

3

codice funzionante per andare a prendere immagine da url (url s3), ridimensionare e poi caricare l'immagine ridimensionata a s3 modulo

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'); 
    } 
    }); 

} 

Speranza che aiuta

+0

MAI utilizzare accessKeyId & secretAccessKey nel codice! – EvgenyKolyakov

Problemi correlati