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
JavaScript
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
};