Инвертирование буфера изображений - NodeJS

Я пытаюсь инвертировать пиксели изображения. У меня есть простой поток преобразования для передачи буфера из потока чтения в поток записи. В настоящее время реализация преобразования выглядит так:

Inversion.prototype._transform = function(chunk, enc, cb) { 
  const clampedArray = Uint8ClampedArray.from(chunk).map(invert);
  var buf = Buffer.from(clampedArray)
  this.push(map);
  cb();
}

function invert(pixel) {
  return 255 - pixel;
}

Я вижу, что содержимое буфера преобразуется так, как я ожидал:

> <Buffer ff d8 ff e0 00 10 4a 46 49 46 00 01 01 00 00 01 00 01 00 00 ff e2 02 1c 49 43 43 5f 50 52 4f 46 49 4c 45 00 01 01 00 00 02 0c 6c 63 6d 73 02 10 00 00 ... >
> <Buffer 00 27 00 1f ff ef b5 b9 b6 b9 ff fe fe ff ff fe ff fe ff ff 00 1d fd e3 b6 bc bc a0 af ad b0 b9 b6 b3 ba ff fe fe ff ff fd f3 93 9c 92 8c fd ef ff ff ... >

однако я больше не могу открыть изображение An error occurred while loading the image. Я подумал, что, возможно, в исходном буфере могут быть дополнительные данные, относящиеся к png, о которых я не знаю, поэтому я просто переписал данные изображения на месте:

for(let [key, val] of clampedArray.entries()) {
  chunk[key] = val;
}

но это по-прежнему вызывает ошибку изображения. Единственный способ заставить его правильно отобразить новый JPEG - это нажать кнопкуchunk нетронутый.

0 ответов

Другие вопросы по тегам