2017-06-26 4 views
0

j'ai fait la chaîne suivante où je tente de décoder une image codée base64 et processus via g en utilisant un tampon:NodeJS: Décodage base64Image données et le processus avec gm « erreur de taille rogue E2BIG » erreur

const gm=require('gm'); 
const URLSafeBase64 = require('urlsafe-base64'); 
const iconv = require('iconv-lite'); 
const fs=require('fs'); 

//Content too bit to put it inside the script 
var base64Data="iVBORw0KGgoAAAANSUhEUg....AAA3NCSVQICAjb4U/gAASuQmCC" 

base64Data = base64Data.replace(/^data:\w*\/\w*;base64,/gm,'') 
base64data = new Buffer(base64Data,'base64') 

gm(base64Data).setFormat('png').size(function(err,value){ 
    if(err){ 
    return console.log("size error",err.message); 
    } 

    if(500 < value.width){ 
    let ratio= width/value.width; 
    let newHeight=value.height*ratio; 
    this.resize(width,newHeight) 
     /** 
     * @var {Buffer} value 
     */ 
     .toBuffer(function(err,value){ 
      if(err){ 
      return console.log("Error: ",err) 
      } 
      fs.writeSync('./image.png',value.toString('binary')); 
     }); 
    } else { 
    fs.writeSync('./image.png',buffer.toString('binary')); 
    } 
}); 

Mais quand j'essaye de le tuner j'obtiens l'erreur suivante:

size error spawn E2BIG

Avez-vous une idée de pourquoi cela se produit-il?

Répondre

1

Vous ne passez pas le bon argument à gm(): au lieu du tampon, appelé base64data, vous passez la chaîne, appelée base64Data.

Cela fera gm penser vous passez un nom de fichier, qui finit par être passé comme argument à l'exécutable GraphicsMagick, et parce qu'il est important que vous obtenez un E2BIG (« Erreur: trop grand »).