UNPKG

quickthumb-slug

Version:

Fast and secure on-the-fly thumbnail creation middleware for Express

138 lines (100 loc) 3.53 kB
# QuickThumb-Slug Fast and secure on-the-fly thumbnail generation middleware for Express, based on [QuickThumb](https://github.com/zivester/node-quickthumb). Uses pre-defined sizes to prevent malicious exploitation. Built with Sharp for optimal performance and memory efficiency. ## Features - On-demand thumbnail generation - Pre-defined size configurations for security - High-performance image processing with Sharp - Support for modern image formats (including WebP) - Compatible with Express and Connect - Simple slug-based URL format ## Installation ```bash npm install quickthumb-slug ``` ## Usage ### ESM (Recommended) ```javascript import express from 'express'; import quickthumb from 'quickthumb-slug'; const app = express(); app.use(quickthumb.static({ baseDir: new URL('.', import.meta.url).pathname + "/public", sizes: { square: { width: 400, height: 400, type: "crop" }, landscape: { width: 1200, height: 600, type: "crop" }, fitinportrait: { width: 400, height: 700, type: "resize" } } })); ``` ### CommonJS (Legacy) ```javascript const express = require('express'); const qt = require('quickthumb-slug'); const app = express(); app.use(qt.static({ baseDir: __dirname + "/public", sizes: { square: { width: 400, height: 400, type: "crop" }, landscape: { width: 1200, height: 600, type: "crop" }, fitinportrait: { width: 400, height: 700, type: "resize" } } })); ``` ### Usage in HTML ```html <!-- Original image --> <img src="/images/photo.jpg" /> <!-- Thumbnailed version using 'square' configuration --> <img src="/images/photo-square.jpg" /> ``` ## Configuration The `static()` middleware accepts an options object with the following properties: | Option | Type | Description | Default | |--------|------|-------------|---------------------| | `baseDir` | string | Source images directory | Required | | `cacheDir` | string | Generated thumbnails directory | `[baseDir]/thumbs/` | | `sizes` | object | Size configurations (see below) | Default sizes | | `quality` | number | JPEG quality (0-100) | 80 | ### Size Configuration Each size configuration in the `sizes` object can have: - `width`: Width in pixels - `height`: Height in pixels - `type`: Processing type - `"crop"` (default): Exact dimensions using center crop - `"resize"`: Maintain aspect ratio, fit within dimensions ### Default Sizes ```javascript { small: { width: 320, height: 9999, type: "crop" }, medium: { width: 768, height: 9999, type: "crop" }, large: { width: 1200, height: 9999, type: "crop" } } ``` ## File Naming Thumbnails are automatically generated based on the filename format: `[original-name]-[size-slug].[extension]` Examples: - Original: `photo.jpg` - Square thumbnail: `photo-square.jpg` - Landscape version: `photo-landscape.jpg` ## Supported Formats - JPEG/JPG - PNG - GIF - WebP ## Caching Generated thumbnails are cached in `[cacheDir]/[type]/[slug]/`. The cache is automatically invalidated when the source image is modified. ## Performance This library uses Sharp for image processing, which provides: - 4-5x faster processing than ImageMagick - Lower memory usage - Better image quality - Native WebP support ## Migration from v1.x If you're upgrading from version 1.x: 1. No code changes required - API remains compatible 2. ImageMagick is no longer required 3. Better memory management and performance 4. Added WebP support ## License MIT