web-dev-qa-db-fra.com

GraphicsMagick: toBuffer () Stream renvoie un tampon vide

J'essaie de lire un fichier dans un tampon, de le redimensionner puis de l'écrire sur le disque en utilisant l'exemple de code suivant:

function processImage(data) {
gm(data, 'test.jpg')
    .resize('300x300')
  .background('white')
  .flatten()
  .setFormat('jpg')
  .toBuffer(function(err, buffer) {
    if (err) {
        throw err;
    } else {
        fs.writeFile('asd.jpg', buffer);
    }
  });
}

Cependant, cela génère une erreur Error: Stream yields empty buffer. J'ai joué, utilisé imageMagick et graphicsMagick, toujours les mêmes.

Si je remplace
toBuffer(...
avec
write('asd.jpg', function(err) ...

il écrit en fait un fichier approprié.

EDIT En écrivant cette question, j'ai trouvé la solution, voir la réponse

18
Bernhardt Scherer

setFormat('jpg')
a causé les problèmes. Le changer en
setFormat('jpeg') l'a résolu.

9
Bernhardt Scherer

Était confronté au même problème, dans mon cas: installez le binaire graphicsmagick.

Sudo apt-get install graphicsmagick

12
Edo

Le flux donne un tampon vide

Cela indique une erreur générale de graphiksmagick. Voici quelques causes probables:

  1. Installation manquante: vous n'avez pas installé correctement graphicsmagick ou imagemagick. Assurez-vous d'avoir installé les deux et
  2. Paramètre invalide: supprimez tous les paramètres jusqu'à ce que cela fonctionne. jpg au lieu de jpeg est une erreur courante
  3. Mauvaise bibliothèque Vous avez utilisé graphicmagick mais vous vouliez utiliser imagemagick? (par exemple pour la conversion webp). Ajouter une configuration imageMagick:
const gm = require('gm').subClass({imageMagick: true});

N'hésitez pas à ajouter plus d'idées en tant que commentaire.

8
Simon Fakir

Je suis également tombé sur cette erreur. Pour moi, la solution était d'augmenter la mémoire autorisée de 128 Mo à 256 Mo. J'ai remarqué que le processus avait besoin de 137 Mo pour réussir.

3
Daniel Lidström