空的JPEG图像(不支持DNL)节点canvas

我正在尝试使用节点canvas裁剪背景图像,我遇到了一些奇怪的错误与下面的代码。

错误是“[错误:写入输出stream时出错]”。 如果我使用节点canvas回购作物示例代码,我得到这个错误“空的JPEG图像(DNL不支持)”

/* */ var cnv = new Canvas(w,h), ctx = cnv.getContext('2d'), original = '/img/pages/'+page+'/background.jpg'; ctx.imageSmoothingEnabled = true; fs.readFile('public/'+original, function( err,image){ if (err) { res.status(404) .send('Not found'); } else { var img = new Image; img.src = image; ctx.drawImage(img, Math.abs( (w-img.width)/2),0, w,h, 0,0, w,h ); cnv.toBuffer(function(err, buf){ console.log(err); if( err){ res.status(500) .send('Error generating image buffer'); } else { fs.writeFile('public'+resampled, buf, function(err){ console.log(err); console.log('Resized and saved in %dms', new Date - start); returnResampledFile( res,page,w,h); }); } }); } }); 

我已经多次使用node-canvas而没有问题,但由于某种原因,这是一个问题。 任何build议将是伟大的。

libjpeg (可能在libjpeg使用)不支持JPEG文件中的DNL标记( 参见本文末尾的解释 )。 包含这些标记的文件将声明为零高度(因此是Empty JPEG image消息)。 我的猜测是你的input文件使用这样的标记,触发一个错误。

至于解决scheme:尝试find一个JPEG阅读器,将读取这些types的文件,并可以将它们转换回libjpeg可以处理的东西。 恐怕我不能推荐任何东西,因为我从来没有遇到过这个问题。