Skip to content

Começando ​

O Pixu entrega a melhor compressão perceptual para a web ao otimizar a Entropia Reconstrutiva Contextual — L(x∣M,C,ε) — via o formato PIXU. Zero dependências, TypeScript completo, ciência honesta com Shannon.

Leia a teoria TECR para o modelo completo.

Instalação ​

bash
npm install @pantanal/pixu
bash
yarn add @pantanal/pixu
bash
pnpm add @pantanal/pixu

Primeira compressão ​

Try it live

Pick a sample or upload your own image

Try a sample image
typescript
import { compress } from '@pantanal/pixu';

const file = document.querySelector('input[type="file"]').files[0];

const result = await compress(file, {
  format: 'image/pixu',
  enableSmartQuality: true,
  stripMetadata: true,
});

console.log(`${result.originalSize} → ${result.compressedSize} bytes`);
console.log(`${(result.compressionRatio * 100).toFixed(1)}% reduction`);

Opções de compressão ​

typescript
const result = await compress(file, {
  quality: 0.8,
  maxWidth: 1920,
  maxHeight: 1080,
  format: 'auto',
  stripMetadata: true,
  fixOrientation: true,
  enableSmartQuality: true,
});

Formatos de saída ​

FormatoMIMEExtensãoMelhor para
PIXUimage/pixu.webp / .jpgCaminho TECR; saída nativa WebP ou JPEG
WebPimage/webp.webpNavegadores modernos
AVIFimage/avif.avifPipelines nativos AVIF
JPEGimage/jpeg.jpgCompatibilidade universal
PNGimage/png.pngTransparência, gráficos
Autoauto—O Pixu escolhe PIX quando possível
typescript
import { compress, PIXU_MIME_TYPE, buildDownloadName } from '@pantanal/pixu';

const result = await compress(file, { format: PIXU_MIME_TYPE });
console.log(result.format); // "image/webp" ou "image/jpeg"
console.log(buildDownloadName('out', result.format));

Saiba mais: Formato PIXU · Formatos suportados

Modos de compressão ​

Modo qualidade ​

typescript
await compress(file, { mode: 'quality', quality: 0.8 });

Modo tamanho ​

typescript
await compress(file, { mode: 'size', targetSize: 500 * 1024 });

Modo adaptativo ​

typescript
await compress(file, { mode: 'adaptive' });

Modos de redimensionamento ​

typescript
await compress(file, {
  width: 1920,
  height: 1080,
  resize: 'contain',
});
ModoComportamento
noneSem redimensionar
containCabe na caixa, mantém a proporção
coverPreenche a caixa, corta se necessário
fitIgual a contain
fillDimensões exatas, pode distorcer

Experimente imagens de exemplo ​

Os exemplos de framework incluem fotos reais que você pode clicar para comprimir na hora:

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

const res = await fetch('/photo-landscape.jpg');
const blob = await res.blob();
const file = new File([blob], 'photo-landscape.jpg', { type: blob.type });

const result = await compress(file, { format: 'image/pixu' });

Ou use um componente de UI com amostras embutidas:

vue
<PixuCompressor
  :samples="sampleImages"
  :options="{ quality: 0.85, format: 'image/pixu' }"
  @compress="onDone"
/>

Exemplos por framework ​

Prefere um app completo? Escolha sua stack:

FrameworkGuia
Vue 3Exemplos Vue
ReactExemplos React
AngularExemplos Angular
SvelteExemplos Svelte
JacaréExemplos Jacaré

Execute qualquer projeto:

bash
npm run build          # from repo root
cd examples/vue        # or react, angular, svelte, jacare
npm install && npm run dev

Próximos passos ​

Publicado sob a licença MIT.