1

我在带有 express.js 的 Linux 服务器上使用gm for node.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'

如何解决这个问题?

4

2 回答 2

1

该问题是由于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

检查配置 ./configure 现在构建代码

make clean
make
checkinstall
ldconfig /usr/local/lib

检查安装是否完成

convert -version
于 2018-02-08T06:12:04.763 回答
0

我们应该使用pipe处理大文件以避免将完整文件读入内存。

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);
于 2018-02-01T08:21:20.703 回答