@jackiemacklein/nettz-utils
Version:
Serviços de imagem, e-mail, códigos de barras, utilitários numéricos e componentes React para apps Node.js com TypeScript
65 lines (64 loc) • 2.69 kB
JavaScript
;
/**
* @author Jackiê Macklein
* @company Onside tecnologia/Nettz
* @copyright Todos direitos reservados.
* @description Utilitários para manipulação de imagens
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.detectImageBrightness = void 0;
/**
* Detecta a brilho da imagem
* @param imageUrl - URL da imagem
* @returns Promise<boolean> - true se a imagem for clara, false se for escura
*/
const detectImageBrightness = (imageUrl) => {
return new Promise((resolve, reject) => {
const img = new Image();
img.crossOrigin = "anonymous";
img.onload = () => {
const canvas = document.createElement("canvas");
const ctx = canvas.getContext("2d");
if (ctx) {
canvas.width = img.width;
canvas.height = img.height;
ctx.drawImage(img, 0, 0);
const imageData = ctx.getImageData(0, 0, canvas.width, canvas.height);
const data = imageData.data;
let brightPixels = 0;
let totalPixels = 0;
for (let i = 0; i < data.length; i += 4) {
const r = data[i];
const g = data[i + 1];
const b = data[i + 2];
const a = data[i + 3]; // canal alpha
// Só considera pixels não transparentes
if (a > 0) {
totalPixels++;
// Usar fórmula de luminância mais precisa
const brightness = 0.299 * r + 0.587 * g + 0.114 * b;
// Considera pixel "claro" se luminância > 128
if (brightness > 128) {
brightPixels++;
}
}
}
// Calcula a porcentagem de pixels claros
const brightPercentage = totalPixels > 0 ? (brightPixels / totalPixels) * 100 : 0;
console.log("Pixels claros:", brightPixels);
console.log("Total de pixels:", totalPixels);
console.log("Porcentagem de pixels claros:", brightPercentage.toFixed(2) + "%");
// Considera clara se mais de 30% dos pixels forem claros
resolve(brightPercentage > 30);
}
else {
reject(new Error("Não foi possível obter o contexto do canvas"));
}
};
img.onerror = () => {
reject(new Error("Erro ao carregar a imagem"));
};
img.src = imageUrl;
});
};
exports.detectImageBrightness = detectImageBrightness;