Nodejs:解码base64Image数据并使用gm“size error spawn E2BIG”错误处理它

时间:2017-06-26 07:46:29

标签: node.js base64 gm

我创建了以下字符串,我尝试解码base64编码的图像并使用缓冲区通过gm处理它:

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

但是当我尝试使用它时,我收到以下错误:

  

大小错误产生E2BIG

你知道为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

您没有将正确的参数传递给gm():而不是名为base64data的缓冲区,您正在传递名为base64Data的字符串。

这将使gm认为您传递了一个文件名,最终将其作为参数传递给GraphicsMagick可执行文件,并且因为它很大,您会得到一个E2BIG&#34;错误:太大&#34; )。