Инвертирование буфера изображения - NodeJS - PullRequest
0 голосов
/ 27 марта 2020

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

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 - это если я потушу sh chunk нетронутым.

...