Javascript gm node.js可以';t调整大文件大小的图像大小

Javascript gm node.js可以';t调整大文件大小的图像大小,javascript,node.js,express,imagemagick,gm,Javascript,Node.js,Express,Imagemagick,Gm,我在linux服务器上使用for node.js和express.js。它适用于文件大小小于2MB的图像。但一旦超过这个范围,代码就会停止工作。这是密码 gm('public/'+article.page.image) .resize(width,height) .quality(80) .write('public/article_image/'+ folder + '/' + "something.jpg", function(err){ if (er

我在linux服务器上使用for node.js和express.js。它适用于文件大小小于2MB的图像。但一旦超过这个范围,代码就会停止工作。这是密码

gm('public/'+article.page.image)
    .resize(width,height)
    .quality(80)
    .write('public/article_image/'+ folder + '/' + "something.jpg", function(err){
        if (err){
            console.log('error occurred')
            console.log(err)
        }
        else{
            console.log('resized image 16')
            somefunction(16, true);
        }
   })
我面临的错误是

Error: Command failed:
at ChildProcess.onExit (/root/patarboi/node_modules/gm/lib/command.js:301:17) 
at emitTwo (events.js:106:13)
at ChildProcess.emit (events.js:191:7)
at maybeClose (internal/child_process.js:920:16)
at Socket.<anonymous> (internal/child_process.js:351:11)
at emitOne (events.js:96:13)
at Socket.emit (events.js:188:7)
at Pipe._handle.close [as _onclose] (net.js:497:12) code: null, signal: 'SIGSEGV'
错误:命令失败:
在ChildProcess.onExit(/root/patarboi/node_modules/gm/lib/command.js:301:17)
两点钟(events.js:106:13)
在ChildProcess.emit(events.js:191:7)
在maybeClose(内部/子进程js:920:16)
在插座上。(内部/子进程js:351:11)
在emitOne(events.js:96:13)
在Socket.emit(events.js:188:7)
at Pipe._handle.close[as _onclose](net.js:497:12)代码:null,信号:“SIGSEGV”

如何解决这个问题?

我们应该使用
管道来处理大文件,以避免将整个文件读入内存

let writeStream = fs.createWriteStream('public/article_image/' + folder + '/' + "something.jpg");
writeStream.on('finish', () => {
    console.log('resized image 16')
    somefunction(16, true);
});

writeStream.on('error', (errr) => {
    console.log('error occurred')
    console.log(err)
});

gm('public/' + article.page.image)
    .resize(width, height)
    .quality(80)
    .stream()        
    .on('error', (err) => {
        console.log('read stream err', er)
    })
    .pipe(writeStream);

该问题是由imagemagick的分割错误引起的。我使用的是旧版本的imagemagick。而不是像这样安装

sudo apt-get install ImageMagick
从中查找imagemagick的最新版本。然后像下面那样安装它。目前最新版本是ImageMagick-7.0.7-22.tar.gz。首先构建依赖项。然后从url获取它

$sudo apt-get install build-essential checkinstall && apt-get build-dep imagemagick -y   
$sudo wget http://www.imagemagick.org/download/ImageMagick-7.0.7-22.tar.gz
现在解压

$sudo tar xzvf 7.0.7-22.tar.gz
移动到目录

cd ImageMagick-7.0.7-22
检查配置 /配置 现在构建代码

make clean
make
checkinstall
ldconfig /usr/local/lib
检查安装是否完成

convert -version

嗯,如果图像大小大于2MB,那么图像似乎是在没有任何数据的情况下写入的。但不会抛出任何错误。有什么消息吗?这对我来说很有用,我编辑代码来监视
readStream
error事件,现在有什么错误吗?如果没有任何错误,请使用linux命令ps-ef | grep gm
检查
gm
库执行的命令,然后按命令执行以查看错误。实际上不是这样。这是由于imagemagick分割错误造成的。为了解决此问题,请使用最新版本的帮助。