Skip to content

Level237/file-size-formatter

Repository files navigation

@lunel/file-size-formatter

A JavaScript utility for manipulating files: formatting sizes, compressing images, extracting metadata, encryption/decryption, folder analysis, downloading & compressing images, and format conversion.

Installation

npm install @lunel/file-size-formatter

Dependencies

Features

🖼️ Image Resizing

The resizeImage() function allows you to resize an image with custom dimensions and fit options, while preventing unwanted enlargements.

Example

import fs from 'fs/promises';
import { resizeImage } from '@lunel/file-size-formatter';

async function main() {
  const resizedBuffer = await resizeImage('assets/1.png', {
    width: 800,
    height: 600,
    fit: 'contain',
  });

  await fs.writeFile('assets/resized.png', resizedBuffer);
  console.log('Image successfully resized!');
}

main();

formatFileSize(bytes, decimals = 2)

Formats a size in bytes into a readable string.

const { formatFileSize } = require('@lunel/file-size-formatter');
console.log(formatFileSize(123456789, 1)); // "117.7 MB"

compressImage(input, options)

Compresses an image by adjusting its resolution and quality.

  • input : File path or Buffer (required).
  • options :
    • maxWidth : Maximum width (default: 1920).
    • maxHeight : Max height (default: 1080).
    • quality : Quality (0 to 1, default: 0.8).
    • maxSizeMB : Maximum size in MB (default: 2).
    • outputFormat : Format ('jpeg', 'png', 'webp', default: 'jpeg').
import { formatFileSize, compressImage, CompressionOptions } from '@lunel/file-size-formatter';
import fs from 'fs';

async function main() {
  const options: CompressionOptions = { maxWidth: 800, quality: 0.7 };
  const buffer = await compressImage('./image.jpg', options);
  fs.writeFileSync('./output.jpg', buffer);
  console.log(`Size: ${formatFileSize(buffer.length)}`);
}

main();

compressMultipleImages(inputs, options)

Compresses multiple images.

const { compressMultipleImages, formatFileSize } = require('@lunel/file-size-formatter');
const fs = require('fs');

async function compressMultiple() {
  const buffers = await compressMultipleImages(['./image1.jpg', './image2.jpg'], { maxWidth: 800 });
  buffers.forEach((buffer, i) => {
    fs.writeFileSync(`./compressed-image${i + 1}.jpg`, buffer);
    console.log(`Image ${i + 1} size: ${formatFileSize(buffer.length)}`);
  });
}
compressMultiple();

extractMetadata(filePath)

Extracts metadata from a file (e.g., image dimensions, MIME type, size, etc.).

import { extractMetadata } from '@lunel/file-size-formatter';

async function getMetadata() {
  const metadata = await extractMetadata('assets/1.png');
  console.log(metadata);
}

getMetadata();

encryptFile(filePath, password)

Encrypts a file with a password/key and generates a .enc file.

import { encryptFile } from '@lunel/file-size-formatter';
import { promises as fs } from 'fs';

async function encryptFileTest() {
  const encrypted = await encryptFile('assets/level.png', 'mySecretKey');
  await fs.writeFile('assets/encrypt/level.enc', encrypted);
}

encryptFileTest();

decryptFile(encryptedBuffer, password)

Decrypts a previously encrypted file and restores it to its original format.

import { decryptFile } from '@lunel/file-size-formatter';
import { promises as fs } from 'fs';

async function decryptFileTest() {
  const file = await fs.readFile('assets/encrypt/level.enc');
  const decrypted = await decryptFile(file, 'mySecretKey');
  await fs.writeFile('assets/decrypt/level.png', decrypted);
}

decryptFileTest();

analyzeFolder(path)

Analyzes a folder and returns statistics (total size + individual file sizes).

import { analyzeFolder, formatFileSize } from '@lunel/file-size-formatter';

async function main() {
  const stats: any = await analyzeFolder("utils");
  console.log(`Total size: ${formatFileSize(stats.totalSize)}`);
  stats.files.forEach((file: any) => console.log(`${file.name} : ${formatFileSize(file.size)}`));
}
main();

downloadAndCompress(url, options)

Downloads an image from a URL and compresses it according to the given options.

import { downloadAndCompress } from '@lunel/file-size-formatter';
import fs from 'fs/promises';

async function main() {
  const buffer = await downloadAndCompress('https://example.com/image.jpg', { maxWidth: 500 });
  await fs.writeFile('./compressed.jpg', buffer);
  console.log('Download and compression successful');
}
main();

convertFormat(filePath, format)

Converts an image from one format to another (e.g., PNG → WebP).

import { convertFormat } from '@lunel/file-size-formatter';
import fs from 'fs/promises';

async function main() {
  const buffer = await convertFormat('assets/1.png', 'webp');
  await fs.writeFile('convert.webp', buffer);
  console.log('Conversion successful');
}
main();

Tests

Run npm test with Jest to validate.

Contribute

Open an issue or pull request on GitHub.

License

MIT

About

A JavaScript utility for manipulating files: formatting sizes,compressing images.

Topics

Resources

License

Stars

Watchers

Forks

Packages

No packages published