Создание буфера из строки base64 для сравнения изображений в «pixelmatch» с «pngjs» - PullRequest
0 голосов
/ 21 июня 2019

Я использую библиотеку " pixelmatch ", чтобы попытаться выполнить сравнение изображений между изображениями, которые хранятся в виде строк base64. В своей документации они используют pngjs для создания сопоставимых изображений. ниже приведен код, который я написал, чтобы попытаться преобразовать мои строки base64 в png для сравнения, однако у меня возникают проблемы при получении ошибки:

Ошибка: неверная подпись файла

, который выбрасывается из функции "read" в

PNG.sync.read

Я не очень знаком с этими преобразованиями и запутался, потому что в документации pngjs сказано, что функция "read" берет буфер, который, я думаю, и передает.

const PNG = require('pngjs').PNG;
const pixelmatch = require('pixelmatch');

export const convertBase64ToPng = (image: string) => {
  const encoding = 'base64';
  const buffer = Buffer.from(image, encoding);
  console.log('buffer', buffer);
  PNG.sync.read(buffer);
};
export const convertToBase64 = (image: any) => Buffer.from(image).toString('base64');

export const compareToPreviousImage = (
  previous: string,
  current: string,
): string | boolean => {
  const threshold = 0.1;
  const prevPng = convertBase64ToPng(previous);
  const currentPng = convertBase64ToPng(current);
  const { width, height } = prevPng;
  const diff = new PNG({ width, height });
  const amountOfMismatchedPixels = pixelmatch(
    prevPng.data,
    currentPng.data,
    diff.data,
    width,
    height,
    { threshold },
  );
  return amountOfMismatchedPixels > 0
    && convertToBase64(diff);
};

Вот тест, который я написал для функции

 describe('compareToPreviousImage', (): void => {
    it('Will return false if it receives identical image strings', (): void => {
      expect(compareToPreviousImage(base64ImageString, base64ImageString))
        .to.equal(false);
    });
  });

Я уверен, что это что-то очевидное, но любое понимание было бы очень полезно, заранее спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...