Создание буфера из строки 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);
});
});
Я уверен, что это что-то очевидное, но любое понимание было бы очень полезно, спасибо заранее!