Files
dashback/src/services/companyImport/imageHasher.js
2026-10-28 01:46:51 +01:00

47 lines
1.3 KiB
JavaScript

// MARK: - Imports
// #region Imports
import { optimizeImage } from 'wasm-image-optimization';
import { encodeRGBA } from 'skelehash-wasm';
import { createLogger } from '../../util/logger.js';
// #endregion
const log = createLogger('import');
// MARK: - SkeleHash Computation
// #region SkeleHash Computation
/**
* Computes SkeleHash base62 hash for an image buffer or base64 string.
*
* @param {Buffer|string} buffer
* @returns {Promise<{base62: string, width: number, height: number, hashLength: number}|null>}
*/
export async function computeSkeleHash(buffer) {
if (!buffer) return null;
let input = buffer;
if (typeof input === 'string') {
const base64Data = input.includes(',') ? input.split(',')[1] : input;
input = Buffer.from(base64Data, 'base64');
}
const raw = await optimizeImage({
image: input,
width: 200,
height: 200,
fit: 'contain',
format: 'raw',
});
const result = await encodeRGBA(raw.width, raw.height, raw.data);
if (!result?.base62) {
throw new Error('encodeRGBA failed to produce a base62 skelehash');
}
return {
base62: result.base62,
width: raw.width,
height: raw.height,
hashLength: result.hash?.length ?? 0,
};
}
// #endregion