Skip to content

Types ​

TypeScript definitions for Pixu. Import types from @pantanal/pixu:

typescript
import type {
  CompressionOptions,
  CompressionResult,
  BatchCompressionOptions,
  StreamCompressionOptions,
  Plugin,
  SupportedFormat,
  ResizeMode,
  CompressionMode,
  CompressionStrategy,
  CompressionPreset,
  ImageFilter,
} from '@pantanal/pixu'

CompressionOptions ​

typescript
interface CompressionOptions {
  quality?: number
  maxWidth?: number
  maxHeight?: number
  minWidth?: number
  minHeight?: number
  width?: number
  height?: number
  resize?: ResizeMode
  format?: SupportedFormat
  stripMetadata?: boolean
  fixOrientation?: boolean
  mode?: CompressionMode
  targetSize?: number
  strategy?: CompressionStrategy
  preset?: CompressionPreset
  enableDualPass?: boolean
  enableProgressive?: boolean
  enableNoiseAware?: boolean
  enableHdrToSdr?: boolean
  enableColorWeighting?: boolean
  enableSmartQuality?: boolean
  useWorker?: boolean
  workerOptions?: WorkerOptions
  beforeProcess?: (ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement) => void
  afterProcess?: (ctx: CanvasRenderingContext2D, canvas: HTMLCanvasElement) => void
  onProgress?: (progress: number) => void
  strict?: boolean
  filters?: Array<ImageFilter | { type: ImageFilter; value?: number }>
  convertToJPEG?: boolean
  validateImage?: boolean
  optimizePNG?: {
    enabled: boolean
    reduceColors?: boolean
    maxColors?: number
    optimizeTransparency?: boolean
  }
  smartCrop?: {
    enabled: boolean
    width: number
    height: number
    focus?: 'center' | 'top' | 'bottom' | 'left' | 'right'
  }
  watermark?: {
    text?: string
    image?: HTMLImageElement | HTMLCanvasElement
    position?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right' | 'center'
    opacity?: number
    fontSize?: number
    fontFamily?: string
    color?: string
    padding?: number
    scale?: number
    rotation?: number
    stroke?: boolean
    strokeColor?: string
  }
  preserveEXIF?: {
    preserve?: string[]
    remove?: string[]
    removeGPS?: boolean
    preserveCopyright?: boolean
  }
  enableProgressiveJPEG?: boolean
  generateResponsive?: boolean
  monitorPerformance?: boolean
}

Field reference ​

OptionTypeDefaultDescription
qualitynumber~0.8Encode quality 0–1
maxWidth / maxHeightnumber—Downscale upper bounds
minWidth / minHeightnumber—Upscale lower bounds
width / heightnumber—Exact output size
resizeResizeMode—Fit strategy
formatSupportedFormatauto-ishOutput MIME / auto
stripMetadataboolean—Drop EXIF/metadata
fixOrientationboolean—Apply EXIF orientation
modeCompressionMode—Quality vs size vs adaptive
targetSizenumber—Aim for byte budget
strategyCompressionStrategy—Search aggressiveness
presetCompressionPreset—Named defaults
enableDualPassboolean—Dual-pass encode
enableSmartQualityboolean—Content-aware quality
enableNoiseAwareboolean—Noise-aware tuning
enableHdrToSdrboolean—HDR → SDR tone map
enableColorWeightingboolean—Perceptual color weighting
enableProgressive / enableProgressiveJPEGboolean—Progressive JPEG attempt
useWorkerboolean—Off-main-thread when available
workerOptionsWorkerOptions—Worker tuning
strictbooleantruePrefer original if not smaller (skipped when canvas mutated)
filtersfilter list—See Filters
convertToJPEGboolean—Flatten opaque PNG → JPEG when beneficial
validateImagebooleanfalsePre-validate
optimizePNGobject—Palette / alpha optimize
smartCropobject—Crop before encode
watermarkobject—Text/image overlay
preserveEXIFobject—Selective EXIF keep/strip
generateResponsiveboolean—Multi-size generation
monitorPerformanceboolean—Collect metrics
onProgress(0–1) => void—Progress callback
beforeProcess / afterProcesscanvas hooks—Custom draw passes

CompressionResult ​

typescript
interface CompressionResult {
  file: File | Blob
  originalSize: number
  compressedSize: number
  compressionRatio: number
  format: string
  width: number
  height: number
  metadata?: {
    hasExif: boolean
    orientation?: number
    quality?: number
  }
}
FieldDescription
compressionRatiomax(0, 1 - compressedSize / originalSize)
metadata.qualityEffective quality used by the encoder
formatOutput MIME (image/pixu, image/webp, …)

BatchCompressionOptions ​

typescript
interface BatchCompressionOptions extends CompressionOptions {
  concurrency?: number
  onItemComplete?: (result: CompressionResult, index: number) => void
  onItemError?: (error: Error, index: number) => void
}

See compressBatch.


StreamCompressionOptions ​

typescript
interface StreamCompressionOptions extends CompressionOptions {
  chunkSize?: number
  onChunk?: (chunk: Blob, index: number) => void
}

See compressStream.


Plugin ​

typescript
interface Plugin {
  name: string
  version: string
  beforeCompress?: (
    file: File | Blob,
    options: CompressionOptions
  ) => Promise<File | Blob> | File | Blob
  afterCompress?: (
    result: CompressionResult,
    options: CompressionOptions
  ) => Promise<CompressionResult> | CompressionResult
  transform?: (
    canvas: HTMLCanvasElement,
    options: CompressionOptions
  ) => Promise<void> | void
}

See Plugins.


SupportedFormat ​

typescript
type SupportedFormat =
  | 'image/jpeg'
  | 'image/png'
  | 'image/webp'
  | 'image/avif'
  | 'image/pixu'
  | 'auto'
ValueExtensionNotes
image/pixu.webp / .jpgTECR encode path; output is native WebP or JPEG
image/webp.webpBroad modern support
image/avif.avifStrong standard codec
image/jpeg.jpgUniversal
image/png.pngTransparency / graphics
auto—Prefers PIXU → WebP → JPEG

Constants: PIXU_MIME_TYPE, buildDownloadName.


ResizeMode ​

typescript
type ResizeMode = 'none' | 'contain' | 'cover' | 'fit' | 'fill'
ModeBehavior
noneNo resize mode override
contain / fitFit inside box, preserve aspect
coverFill box, may crop
fillStretch to exact size

CompressionMode ​

typescript
type CompressionMode = 'quality' | 'size' | 'adaptive'

CompressionStrategy ​

typescript
type CompressionStrategy = 'balanced' | 'aggressive' | 'conservative' | 'smart'

CompressionPreset ​

typescript
type CompressionPreset = 'social-media' | 'print' | 'web' | 'thumbnail' | 'email'

See Presets.


ImageFilter ​

typescript
type ImageFilter =
  | 'grayscale' | 'sepia' | 'vintage'
  | 'brightness' | 'contrast' | 'saturation'
  | 'blur' | 'sharpen'

See Filters.

Released under the MIT License.