Image JPEG vide (DNL non prise en charge) node-canvas

J’essaie d’utiliser node-canvas pour rogner une image d’arrière-plan et je rencontre une erreur étrange avec le code suivant.

L’erreur est “[Erreur: erreur lors de l’écriture dans le stream de sortie]”. Si j’utilise le code exemple de recadrage du repository node-canvas, j’obtiens l’erreur “Image JPEG vide (DNL non prise en charge)”

/* */ 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); }); } }); } }); 

J’ai utilisé node-canvas plusieurs fois sans aucun problème, mais pour une raison quelconque, c’est un problème. Toute suggestion sera appréciée.

libjpeg (qui est probablement utilisé sous le capot) ne supporte pas les marqueurs DNL dans les fichiers JPEG ( voir ce document vers la fin pour une explication ). Les fichiers contenant de tels marqueurs déclareront être de hauteur zéro (d’où le message d’ Empty JPEG image ). Je suppose que votre fichier d’entrée utilise de tels marqueurs, ce qui provoque une erreur.

En ce qui concerne les solutions: essayez de trouver un lecteur JPEG capable de lire ces types de fichiers et de les reconvertir en quelque chose que libjpeg peut gérer. J’ai bien peur de ne rien recommander car je n’ai jamais rencontré ce problème moi-même.