Skip to main content

Image Compression

Overview

The image compression module automatically optimizes uploaded images before they are stored or printed. This ensures consistent file sizes and faster upload/download times.

Default Settings

ParameterDefault ValueDescription
maxWidth800pxMaximum image width
maxHeight800pxMaximum image height
quality0.7 (70%)JPEG compression quality
maxSizeBytes500KB (512,000 bytes)Target maximum file size

API Functions

FunctionParametersReturnsDescription
compressImage(file, options?)File/Blob, optional CompressOptionsPromise<Blob>Compress image with options
fileToDataUrl(file)File/BlobPromise<string>Convert file to base64 data URL
compressAndConvertToDataUrl(file, options?)File/Blob, optional CompressOptionsPromise<string>Compress and return data URL
resizeDataUrl(dataUrl, maxWidth?, maxHeight?)dataUrl string, optional dimensionsPromise<string>Resize existing data URL

Compression Algorithm

  1. Load image into memory
  2. Calculate resize ratio if dimensions exceed maxWidth/maxHeight
  3. Draw to canvas at target dimensions
  4. Export as JPEG blob at specified quality
  5. If result exceeds maxSizeBytes, recursively reduce quality by 0.1

Usage Locations

  • Image Upload: apps/web/routes/image-upload.tsx - compresses before session storage
  • Gallery Selection: Compresses selected images before storing
  • Final Generation: CollageProvider uses for preparing print output

Code Reference

  • Library: apps/web/lib/image-compression.ts
  • Integration: Used by providers/collage-provider.tsx for final image generation

Configuration Options

interface CompressOptions {
maxWidth?: number; // Max width in pixels
maxHeight?: number; // Max height in pixels
quality?: number; // 0.0 to 1.0
maxSizeBytes?: number; // Target max file size
}

Key Implementation Details

  • Uses HTML5 Canvas API for resizing
  • Recursive quality reduction ensures target size is met (minimum quality: 0.1)
  • Supports both File objects (from input) and Blob objects
  • Output format is always JPEG for optimal compression