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

118 lines (117 loc) 3.93 kB
"use strict"; /** * @author Jackiê Macklein * @company Onside tecnologia/Nettz * @copyright Todos direitos reservados. * @description Serviço para processamento de imagens */ var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const sharp_1 = __importDefault(require("sharp")); class ImageService { /** * Redimensiona uma imagem mantendo a proporção * @param buffer Buffer da imagem * @param maxWidth Largura máxima * @param maxHeight Altura máxima */ async resize(buffer, maxWidth, maxHeight) { return (0, sharp_1.default)(buffer) .resize(maxWidth, maxHeight, { fit: "inside", withoutEnlargement: true, }) .toBuffer(); } /** * Recorta uma imagem em um formato específico * @param buffer Buffer da imagem * @param width Largura desejada * @param height Altura desejada */ async crop(buffer, width, height) { return (0, sharp_1.default)(buffer) .resize(width, height, { fit: "cover", position: "center", }) .toBuffer(); } /** * Comprime uma imagem para reduzir seu tamanho * @param buffer Buffer da imagem * @param quality Qualidade da compressão (1-100) */ async compress(buffer, quality = 80) { return (0, sharp_1.default)(buffer).jpeg({ quality }).toBuffer(); } /** * Converte uma imagem para um formato específico * @param buffer Buffer da imagem * @param format Formato desejado ('jpeg', 'png', 'webp') */ async convert(buffer, format) { return (0, sharp_1.default)(buffer)[format]().toBuffer(); } /** * Adiciona uma marca d'água a uma imagem * @param imageBuffer Buffer da imagem principal * @param watermarkBuffer Buffer da marca d'água */ async addWatermark(imageBuffer, watermarkBuffer) { return (0, sharp_1.default)(imageBuffer) .composite([ { input: watermarkBuffer, gravity: "southeast", }, ]) .toBuffer(); } /** * Converte um buffer de imagem para base64 * @param buffer Buffer da imagem * @param format Formato da imagem para o cabeçalho do base64 */ async toBase64(buffer, format = "jpeg") { const mimeTypes = { jpeg: "image/jpeg", png: "image/png", webp: "image/webp", }; const base64 = buffer.toString("base64"); return `data:${mimeTypes[format]};base64,${base64}`; } /** * Converte uma string base64 para buffer * @param base64 String base64 da imagem */ async fromBase64(base64) { // Remove o cabeçalho do data URL se existir const base64Data = base64.replace(/^data:image\/\w+;base64,/, ""); return Buffer.from(base64Data, "base64"); } /** * Processa uma imagem e retorna em base64 * @param buffer Buffer da imagem * @param options Opções de processamento */ async processAndReturnBase64(buffer, options = {}) { const { maxWidth, maxHeight, quality = 80, format = "jpeg" } = options; let processedBuffer = buffer; // Aplica redimensionamento se especificado if (maxWidth || maxHeight) { processedBuffer = await this.resize(processedBuffer, maxWidth || 0, maxHeight || 0); } // Comprime e converte para o formato especificado processedBuffer = await (0, sharp_1.default)(processedBuffer)[format]({ quality, }) .toBuffer(); // Converte para base64 return this.toBase64(processedBuffer, format); } } exports.default = ImageService;