sharp nodejs node images example compress alternative node.js imagemagick graphicsmagick

node.js - nodejs - GraphicsMagick: toBuffer() Stream produce un búfer vacío



resize images nodejs (4)

La corriente produce un búfer vacío

Esto indica un error general de graphiksmagick. Aquí hay algunas causas probables:

  1. Instalación faltante : no instaló graphicsmagick o imagemagick correctamente. Asegúrese de que instaló ambos y
  2. Parámetro no válido : elimina todos los parámetros hasta que funcione. jpg en lugar de jpeg es un error común
  3. Biblioteca incorrecta ¿ Hiciste uso de graphicmagick pero querías usar imagemagick? (por ejemplo, para la conversión webp). Agregar la configuración de imageMagick:

const gm = require(''gm'').subClass({imageMagick: true});

Siéntase libre de añadir más ideas como comentario.

Estoy intentando leer un archivo en un búfer, cambiarle el tamaño y luego escribirlo en el disco con el siguiente código de ejemplo:

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

Sin embargo, esto genera un error Error: Stream yields empty buffer . He jugado, he usado imageMagick y graphicsMagick, sigue siendo el mismo.

Si sustituyo
toBuffer(...
con
write(''asd.jpg'', function(err) ...

en realidad escribe un archivo adecuado.

EDITAR Mientras escribía esta pregunta encontré la solución, vea la respuesta


Estaba enfrentando el mismo problema, en mi caso: instalar el binario graphicsmagick.

sudo apt-get install graphicsmagick


También me topé con este error. Para mí, la solución fue aumentar la memoria permitida de 128Mb a 256Mb. Noté que el proceso necesitaba 137Mb para tener éxito.


setFormat(''jpg'')
causó los problemas. Cambiándolo a
setFormat(''jpeg'') resolvió.