gemini_watermark_cleaner/src/utils.js

55 lines
1.8 KiB
JavaScript

import exifr from 'exifr';
import i18n from './i18n.js';
export function loadImage(file) {
return new Promise((resolve, reject) => {
const reader = new FileReader();
reader.onload = (e) => {
const img = new Image();
img.onload = () => resolve(img);
img.onerror = reject;
img.src = e.target.result;
};
reader.onerror = reject;
reader.readAsDataURL(file);
});
}
export async function checkOriginal(file) {
try {
const exif = await exifr.parse(file, { xmp: true });
return {
is_google: exif?.Credit === 'Made with Google AI',
is_original: ['ImageWidth', 'ImageHeight'].every(key => exif?.[key])
}
} catch {
return { is_google: false, is_original: false };
}
}
export function getOriginalStatus({ is_google, is_original }) {
if (!is_google) return i18n.t('original.not_gemini');
if (!is_original) return i18n.t('original.not_original');
return '';
}
const statusMessage = document.getElementById('statusMessage');
export function setStatusMessage(message = '', type = '') {
statusMessage.textContent = message;
statusMessage.style.display = message ? 'block' : 'none';
const colorMap = { warn: 'text-warn', success: 'text-success' };
statusMessage.classList.remove(...Object.values(colorMap));
if (colorMap[type]) statusMessage.classList.add(colorMap[type]);
}
const loadingOverlay = document.getElementById('loadingOverlay');
export function showLoading(text = null) {
loadingOverlay.style.display = 'flex';
const textEl = loadingOverlay.querySelector('p');
if (textEl && text) textEl.textContent = text;
}
export function hideLoading() {
loadingOverlay.style.display = 'none';
}