Создание буфера из строки base64 для сравнения изображений в "pixelmatch" с "pngjs"

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

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

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

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

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

0 ответов

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