UNPKG

images-watermark

Version:

šŸš€ A powerful, fast, and user-friendly Node.js library for adding professional watermarks to images. Protect your content with text watermarks, logo overlays, or both! Built with Sharp for lightning-fast processing, featuring intelligent caching, flexible

215 lines (188 loc) • 8.25 kB
const Watermark = require('./index'); const path = require('path'); /** * Comprehensive examples for the Images Watermark package * This file demonstrates all the features and usage patterns */ async function runExamples() { console.log('šŸš€ Images Watermark Examples\n'); try { // Example 1: Text Watermark Only console.log('1ļøāƒ£ Text Watermark Example'); const textWatermarkResult = await Watermark.singleImageWatermark({ imagePath: './example-images/sample.jpg', textWatermark: 'Ā© 2024 My Company', textColor: '#FF0000', opacity: '0.5', fontWeight: 'bold', allowedReferrers: ['https://mywebsite.com'], headers: { referer: 'https://mywebsite.com', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', cookie: 'session=abc123' } }); console.log('āœ… Text watermark applied successfully\n'); // Example 2: Image Watermark Only console.log('2ļøāƒ£ Image Watermark Example'); const imageWatermarkResult = await Watermark.singleImageWatermark({ imagePath: './example-images/sample.jpg', watermarkPath: './example-images/logo.png', allowedReferrers: ['https://mywebsite.com'], headers: { referer: 'https://mywebsite.com', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', cookie: 'session=abc123' } }); console.log('āœ… Image watermark applied successfully\n'); // Example 3: Combined Watermarks console.log('3ļøāƒ£ Combined Text and Image Watermark Example'); const combinedWatermarkResult = await Watermark.singleImageWatermark({ imagePath: './example-images/sample.jpg', watermarkPath: './example-images/logo.png', textWatermark: 'PROTECTED CONTENT', textColor: '#FFFFFF', opacity: '0.7', fontWeight: '900', fontFamily: 'Arial, sans-serif', allowedReferrers: ['https://mywebsite.com'], headers: { referer: 'https://mywebsite.com', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', cookie: 'session=abc123' } }); console.log('āœ… Combined watermark applied successfully\n'); // Example 4: Batch Processing console.log('4ļøāƒ£ Batch Processing Example'); const imagePaths = [ './example-images/image1.jpg', './example-images/image2.jpg', './example-images/image3.jpg' ]; const batchResult = await Watermark.multiImageWatermark({ imagePaths, appName: 'My Brand', textColor: '#000000', opacity: '0.3', allowedReferrers: ['https://mywebsite.com'], headers: { referer: 'https://mywebsite.com', 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', cookie: 'session=abc123' } }); console.log(`āœ… Batch processed ${batchResult.length} images successfully\n`); // Example 5: Cache Management console.log('5ļøāƒ£ Cache Management Example'); const cacheStats = Watermark.getCacheStats(); console.log('šŸ“Š Cache Statistics:'); console.log(` Hits: ${cacheStats.hits}`); console.log(` Misses: ${cacheStats.misses}`); console.log(` Keys: ${cacheStats.keys}`); console.log(` Ksize: ${cacheStats.ksize}`); console.log(` Vsize: ${cacheStats.vsize}\n`); // Example 6: Access Control (No Watermark) console.log('6ļøāƒ£ Access Control Example (No Watermark)'); const noWatermarkResult = await Watermark.singleImageWatermark({ imagePath: './example-images/sample.jpg', textWatermark: 'PROTECTED', allowedReferrers: ['https://mywebsite.com'], headers: { referer: 'https://mywebsite.com', // This referrer is allowed 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', cookie: 'session=abc123' } }); console.log('āœ… Access control working - no watermark applied for allowed referrer\n'); // Example 7: External Access (With Watermark) console.log('7ļøāƒ£ External Access Example (With Watermark)'); const externalAccessResult = await Watermark.singleImageWatermark({ imagePath: './example-images/sample.jpg', textWatermark: 'PROTECTED', allowedReferrers: ['https://mywebsite.com'], headers: { referer: 'https://external-site.com', // This referrer is NOT allowed 'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36', cookie: 'session=abc123' } }); console.log('āœ… External access control working - watermark applied for external referrer\n'); console.log('šŸŽ‰ All examples completed successfully!'); } catch (error) { console.error('āŒ Error running examples:', error.message); // Provide helpful error information if (error.message.includes('Unable to locate the image')) { console.log('\nšŸ’” Tip: Make sure the example images exist in the ./example-images/ directory'); console.log(' You can create this directory and add some sample images to test with.'); } if (error.message.includes('allowedReferrers')) { console.log('\nšŸ’” Tip: The allowedReferrers array is required for security control'); } if (error.message.includes('headers')) { console.log('\nšŸ’” Tip: Request headers are required for access control'); } } } // Express.js Integration Example function expressExample() { const express = require('express'); const app = express(); app.get('/watermark/:imageName', async (req, res) => { try { const imagePath = path.join(__dirname, 'example-images', req.params.imageName); const watermarkedImage = await Watermark.singleImageWatermark({ imagePath, textWatermark: 'Ā© 2024 My Website', allowedReferrers: ['https://mywebsite.com'], headers: req.headers }); res.setHeader('Content-Type', 'image/png'); res.send(watermarkedImage); } catch (error) { console.error('Watermark error:', error); res.status(500).send('Error processing image'); } }); app.get('/batch-watermark', async (req, res) => { try { const imagePaths = [ './example-images/image1.jpg', './example-images/image2.jpg', './example-images/image3.jpg' ]; const watermarkedImages = await Watermark.multiImageWatermark({ imagePaths, appName: 'My Brand', allowedReferrers: ['https://mywebsite.com'], headers: req.headers }); res.json({ success: true, count: watermarkedImages.length, message: 'Batch processing completed' }); } catch (error) { console.error('Batch watermark error:', error); res.status(500).json({ error: 'Error processing images' }); } }); app.get('/cache-stats', (req, res) => { const stats = Watermark.getCacheStats(); res.json(stats); }); app.post('/clear-cache', (req, res) => { Watermark.clearCache(); res.json({ message: 'Cache cleared successfully' }); }); return app; } // Run examples if this file is executed directly if (require.main === module) { runExamples(); } module.exports = { runExamples, expressExample };