Javascript gm node.js可以';t调整大文件大小的图像大小
我在linux服务器上使用for node.js和express.js。它适用于文件大小小于2MB的图像。但一旦超过这个范围,代码就会停止工作。这是密码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
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分割错误造成的。为了解决此问题,请使用最新版本的帮助。