all_image_compress 1.0.0 copy "all_image_compress: ^1.0.0" to clipboard
all_image_compress: ^1.0.0 copied to clipboard

A powerful, pure-Dart image compression library for Flutter. Supports JPEG, PNG, GIF, BMP, TIFF and WebP decode. Runs in Isolates to avoid UI jank. No native code required.

[all_image_compress banner]

all_image_compress

🗜️ Compressão de imagens poderosa, 100% Dart puro — sem código nativo, sem platform channels.

pub version pub likes pub points license 6 plataformas


🚀 Descrição do Projeto #

all_image_compress é uma biblioteca Dart/Flutter para compressão de imagens com quatro pilares:

  • 100% Dart puro — sem Kotlin, sem Objective-C, sem platform channels. Funciona em todas as plataformas Flutter (Android, iOS, Web, macOS, Windows, Linux).
  • Isolate-powered — toda compressão roda em background Isolate, nunca bloqueando a thread da UI.
  • Multi-formato — entrada: JPEG, PNG, GIF, BMP, TIFF, WebP, TGA, ICO, PVR (auto-detectado por magic bytes). Saída: JPEG, PNG, GIF, BMP, TIFF.
  • API simples e poderosa — compressão única, batch com progresso, controle de qualidade, resize inteligente, rotação e auto-correção de EXIF.

📦 Instalação #

Adicione ao seu pubspec.yaml:

dependencies:
  all_image_compress: ^1.0.0

Em seguida:

flutter pub get

E importe no seu código:

import 'package:all_image_compress/all_image_compress.dart';

⚙️ Uso Rápido #

import 'package:all_image_compress/all_image_compress.dart';

// Comprime bytes — roda em Isolate automaticamente
final result = await AllImageCompress.fromBytes(
  bytes: rawImageBytes,
  config: CompressConfig(
    quality: 80,
    maxWidth: 1920,
    maxHeight: 1080,
    outputFormat: CompressFormat.jpeg,
  ),
);

print(result.summary);
// → "3.20MB → 410.50KB (-87.5%) 1920×1080px [JPEG]"

// Use os bytes diretamente
final widget = Image.memory(result.bytes);
await File(outputPath).writeAsBytes(result.bytes);

📱 Helpers para Arquivo (não-web) #

import 'package:all_image_compress/all_image_compress.dart';
import 'package:all_image_compress/all_image_compress_io.dart';

// De um caminho de arquivo
final result = await compressFile(
  path: '/storage/photos/large.jpg',
  config: CompressConfig(quality: 75, maxWidth: 1280),
);

// Arquivo → Arquivo
await compressFileToFile(
  inputFile: File('/photos/original.png'),
  outputFile: File('/photos/thumbnail.jpg'),
  config: CompressConfig(quality: 85, maxWidth: 400, maxHeight: 400),
);

🗂️ Batch com Progresso #

final results = await AllImageCompress.batchUniform(
  images: [img1, img2, img3],
  config: CompressConfig(quality: 70, maxWidth: 800),
  maxConcurrent: 3, // limite de isolates simultâneos (default: 3)
  onProgress: (done, total) => print('$done/$total'),
);

// Config diferente por imagem
final results = await AllImageCompress.batch(
  items: [
    (profilePhoto, CompressConfig(quality: 90, maxWidth: 512)),
    (coverPhoto,   CompressConfig(quality: 75, maxWidth: 1920)),
    (thumbnail,    CompressConfig(quality: 60, maxWidth: 200)),
  ],
  maxConcurrent: 2, // para galerias grandes, mantenha 2–4
);

🎛️ CompressConfig — Referência #

Parâmetro Tipo Padrão Descrição
quality int 85 0–100. JPEG: qualidade visual. PNG: nível de compressão zlib (100=menor arquivo/mais lento, 0=maior arquivo/mais rápido).
maxWidth int? null Reduz escala se a largura exceder este valor. null = sem limite.
maxHeight int? null Reduz escala se a altura exceder este valor. null = sem limite.
outputFormat CompressFormat? null Formato de saída. null = mesmo do input (WebP → JPEG).
rotate int 0 Rotação horária: 0, 90, 180 ou 270.
autoCorrectOrientation bool true Aplica e remove o tag EXIF de orientação.
interpolation CompressInterpolation linear Algoritmo de resize: nearest, linear, cubic, average.
keepExif bool false Preserva metadados EXIF (apenas JPEG; tag de orientação sempre removida).

📊 CompressResult — Estatísticas #

result.bytes               // Uint8List — imagem comprimida
result.width               // int — largura em pixels
result.height              // int — altura em pixels
result.format              // CompressFormat — formato de saída
result.originalSizeBytes   // int — tamanho original
result.compressedSizeBytes // int — tamanho comprimido
result.compressionRatio    // double — comprimido/original (0.13 = 87% menor)
result.savedBytes          // int — bytes economizados
result.savedPercent        // double — percentual de redução
result.summary             // String — resumo legível em uma linha

🖼️ Formatos Suportados #

Formato Entrada Saída Qualidade
JPEG ✅ lossy
PNG nível de compressão
GIF ignorada
BMP ignorada
TIFF ignorada
WebP ❌ → JPEG
TGA
ICO

🔄 API Síncrona (fora da UI thread) #

Para uso dentro de Isolate.run(), compute(), CLIs ou testes:

final result = AllImageCompress.fromBytesSync(
  bytes: imageBytes,
  config: CompressConfig(quality: 80),
);

⚠️ Nunca chame este método na Flutter UI thread. Use fromBytes() para isso.


🏗️ Por que Dart Puro? #

A maioria das libs de compressão (flutter_image_compress, fast_image_compress) dependem de código nativo Kotlin/ObjC — limitando-as a Android e iOS, e exigindo configurações de Podfile e build.gradle.

all_image_compress usa o pacote image (3.9M+ downloads) como motor de codecs e delega todo o trabalho ao Isolate.run() nativo do Dart:

  • ✅ Suporte universal (incluindo Web e Desktop)
  • ✅ Sem overhead de JNI/FFI/platform-channel
  • flutter pub add all_image_compress — pronto, sem configuração nativa

👥 Contribuidores #

Contributors

Made with contrib.rocks.

Contribuições são bem-vindas! Leia o CONTRIBUTING.md para começar.


📄 Licença #

Distribuído sob a licença MIT. Veja LICENSE para mais detalhes.


💻 Desenvolvido com ❤️ para facilitar o desenvolvimento Flutter em todas as plataformas.

4
likes
0
points
317
downloads

Publisher

verified publisheropensource.tatamemaster.com.br

Weekly Downloads

A powerful, pure-Dart image compression library for Flutter. Supports JPEG, PNG, GIF, BMP, TIFF and WebP decode. Runs in Isolates to avoid UI jank. No native code required.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

flutter, image

More

Packages that depend on all_image_compress