UNPKG

@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
"use strict"; /** * @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;