image-utility-library
Version:
A Node.js library for compressing, resizing, cropping, and applying effects to images.
230 lines (162 loc) • 5.16 kB
Markdown
# 📸 **Image Utility Library**
A powerful, lightweight image processing library for Node.js. Easily compress, crop, resize, convert formats, apply effects, and export images in bulk with high performance.
### 🚀 **Features**
- ✅ **Image Compression** – Reduce file sizes while maintaining quality
- ✂️ **Cropping** – Crop images to specific dimensions
- 📏 **Resizing** – Resize images to custom dimensions
- 🎨 **Format Conversion** – Convert images between formats (JPEG, PNG, WebP)
- 🌈 **Effects** – Apply effects like grayscale, invert, and sepia
- ⚡ **Caching** – Cache frequently processed images for faster performance
- 📦 **ZIP Export** – Export multiple processed images into a ZIP archive
### 📦 **Installation**
Install the library using NPM:
```bash
npm install image-utility-lib
```
### 📂 **Usage**
First, import the functions into your project:
#### **CommonJS**
```js
const {
compressImage,
cropImage,
resizeImage,
formatImage,
applyEffects,
cacheImage,
getCachedImage,
exportAsZip
} = require('image-utility-lib');
```
#### **ES6**
```js
import {
compressImage,
cropImage,
resizeImage,
formatImage,
applyEffects,
cacheImage,
getCachedImage,
exportAsZip
} from 'image-utility-lib';
```
### ➡️ **Examples**
#### 📉 **1. Compress an Image**
```js
const fs = require('fs');
const imageBuffer = fs.readFileSync('input.jpg');
compressImage(imageBuffer, 50).then((compressed) => {
fs.writeFileSync('output-compressed.jpg', compressed);
});
```
#### ✂️ **2. Crop an Image**
```js
cropImage(imageBuffer, 300, 300).then((cropped) => {
fs.writeFileSync('output-cropped.jpg', cropped);
});
```
#### 📏 **3. Resize an Image**
```js
resizeImage(imageBuffer, 800, 600).then((resized) => {
fs.writeFileSync('output-resized.jpg', resized);
});
```
#### 🖼️ **4. Convert Image Format**
```js
formatImage(imageBuffer, 'png').then((converted) => {
fs.writeFileSync('output-converted.png', converted);
});
```
#### 🎨 **5. Apply Effects**
```js
applyEffects(imageBuffer, 'sepia').then((effectApplied) => {
fs.writeFileSync('output-sepia.jpg', effectApplied);
});
```
Available effects:
- `grayscale`
- `invert`
- `sepia`
#### ⚡ **6. Cache Processed Images**
```js
cacheImage('unique-key', compressed);
// Retrieve cached image
const cachedImage = getCachedImage('unique-key');
if (cachedImage) {
console.log('Image retrieved from cache!');
}
```
#### 📦 **7. Export Images as ZIP**
```js
exportAsZip(
[
{ name: 'compressed.jpg', buffer: compressed },
{ name: 'resized.jpg', buffer: resized }
],
'output-images.zip'
).then(() => {
console.log('Images exported as ZIP successfully!');
});
```
### 📋 **API Reference**
#### 🔥 **Image Processing Functions**
##### `compressImage(imageBuffer, quality) → Promise<Buffer>`
- **imageBuffer**: `Buffer` – The input image data
- **quality**: `Number` – Compression quality (1–100)
##### `cropImage(imageBuffer, width, height) → Promise<Buffer>`
- **width**: `Number` – Width of the cropped area
- **height**: `Number` – Height of the cropped area
##### `resizeImage(imageBuffer, width, height) → Promise<Buffer>`
- **width**: `Number` – New width
- **height**: `Number` – New height
##### `formatImage(imageBuffer, format) → Promise<Buffer>`
- **format**: `String` – Target format (`jpeg`, `png`, `webp`)
##### `applyEffects(imageBuffer, effect) → Promise<Buffer>`
- **effect**: `String` – Image effect (`grayscale`, `invert`, `sepia`)
#### ⚡ **Caching Functions**
##### `cacheImage(key, imageBuffer)`
- **key**: `String` – Unique identifier for caching
- **imageBuffer**: `Buffer` – The processed image to store
##### `getCachedImage(key) → Buffer|null`
- Retrieves an image from the cache, if available
#### 📦 **Export Functions**
##### `exportAsZip(images, outputPath) → Promise<void>`
- **images**: `Array` – List of `{ name: String, buffer: Buffer }` objects
- **outputPath**: `String` – Output path for the ZIP file
### 🛠️ **Requirements**
- Node.js **v14+**
- Supported formats: **JPEG**, **PNG**, **WebP**
### 🐛 **Contributing**
1. Fork the repository
2. Create a new branch (`git checkout -b feature/your-feature`)
3. Commit your changes (`git commit -m 'Add new feature'`)
4. Push to the branch (`git push origin feature/your-feature`)
5. Open a pull request 🚀
### 📜 **License**
This project is licensed under the **MIT License**.
### 👨💻 **Author**
Developed by [Ayushman Gupta](https://github.com/your-username) 🚀
### 🙌 **Acknowledgments**
- Built using **sharp**, **jimp**, **imagemin**, and **node-cache**.
- Inspired by the need for an efficient and versatile image utility library.