Skip to content

compress ​

Comprime uma única imagem. Este é o ponto de entrada principal do Pixu.

Assinatura ​

typescript
function compress(
  file: File | Blob,
  options?: CompressionOptions
): Promise<CompressionResult>

Uses a shared PixuCompressor instance under the hood.

Parâmetros ​

file ​

TypeFile | Blob
RequiredYes

Imagem de origem. O MIME type deve ser de imagem (image/jpeg, image/png, image/webp, image/avif, etc.).

options ​

TypeCompressionOptions
RequiredNo

Referência completa de opções: Types. Grupos comuns:

GroupOptions
Quality / sizequality, targetSize, mode, strategy, strict
DimensionsmaxWidth, maxHeight, minWidth, minHeight, width, height, resize
Formatformat, convertToJPEG, enableProgressiveJPEG
SmartenableSmartQuality, preset, enableDualPass
Effectsfilters, watermark, smartCrop, optimizePNG
MetadatastripMetadata, fixOrientation, preserveEXIF
HooksonProgress, beforeProcess, afterProcess, validateImage, monitorPerformance

Retorno ​

Promise<CompressionResult>

FieldTypeDescription
fileFile | BlobCompressed output
originalSizenumberInput bytes
compressedSizenumberOutput bytes
compressionRationumberSavings ratio 1 - compressed/original (clamped ≥ 0)
formatstringOutput MIME type (e.g. image/pixu)
width / heightnumberOutput dimensions
metadata?.qualitynumber?Effective quality used
metadata?.hasExifboolean?Whether EXIF was present
metadata?.orientationnumber?EXIF orientation if known

Comportamento ​

  • strict (default true): if the output is not smaller than the source and the canvas was not mutated (watermark, filters, crop, PNG optimize), Pixu may return the original file.
  • Canvas mutations (watermark / filters / smart crop / PNG optimize) are never discarded for the original file.
  • format: 'auto': prefers PIXU, then WebP, then JPEG when beneficial.
  • enableSmartQuality: analyzes content and may adjust quality when you omit an explicit quality.
  • Worthwhile retries: if savings are under ~15%, Pixu retries lower qualities and alternate formats from the same canvas.

Demo ao vivo ​

Try it live

Pick a sample or upload your own image

Try a sample image

Exemplos ​

Basic ​

typescript
import { compress } from '@pantanal/pixu'

const result = await compress(file, {
  quality: 0.8,
  maxWidth: 1920,
  maxHeight: 1080,
})

console.log(result.compressedSize, result.format, result.compressionRatio)

PIXU + smart quality ​

typescript
import { compress, PIXU_MIME_TYPE, buildDownloadName } from '@pantanal/pixu'

const result = await compress(file, {
  format: PIXU_MIME_TYPE,
  enableSmartQuality: true,
  stripMetadata: true,
})

const name = buildDownloadName('out', result.format)

Watermark ​

typescript
const result = await compress(file, {
  quality: 0.85,
  watermark: {
    text: '© Pixu',
    position: 'bottom-right',
    opacity: 0.85,
  },
})

Progresso ​

typescript
await compress(file, {
  quality: 0.8,
  onProgress: (p) => {
    // p is 0..1
    progressEl.style.width = `${Math.round(p * 100)}%`
  },
})

With AbortController-style abort ​

Use PixuCompressor when you need abort():

typescript
import { PixuCompressor } from '@pantanal/pixu'

const compressor = new PixuCompressor()
const promise = compressor.compress(file, { quality: 0.8 })
// later:
compressor.abort()

Tratamento de erros ​

typescript
try {
  const result = await compress(file, options)
} catch (error) {
  if (error instanceof Error) {
    console.error(error.message)
  }
}

Erros comuns ​

MessageCause
File must be an imageNon-image blob / invalid type
Invalid image dimensionsZero or unreadable dimensions
Compression was abortedabort() called mid-run
Compression already in progressSame PixuCompressor instance reused concurrently

Relacionado ​

Publicado sob a licença MIT.