Image Compressor

Web

Uma ferramenta para comprimir imagens mantendo a melhor qualidade. Suporta JPEG, PNG, WebP e AVIF.

Image Compressor

🖼️ Image Compressor

Uma ferramenta para comprimir imagens mantendo a melhor qualidade. Suporta JPEG, PNG, WebP e AVIF.

Sobre

Image Compressor é uma aplicação web construída com Next.js que permite comprimir imagens mantendo a melhor qualidade possível. Suporta múltiplos formatos de saída (JPEG, PNG, WebP, AVIF) e oferece controle de qualidade através de uma interface intuitiva.

Funcionalidades

  • 📤 Arraste e solte ou clique para carregar imagens
  • 🎚️ Ajuste de qualidade (10-100%)
  • 🖼️ Múltiplos formatos de saída: JPEG, PNG, WebP, AVIF
  • 📊 Estatísticas em tempo real (tamanho original, tamanho comprimido, redução %)
  • ⬇️ Download com um clique
  • 🔔 Notificações toast para feedback do usuário
  • ♿ Acessível e otimizado para SEO

Tecnologias

Começando

Pré-requisitos

  • Bun instalado (recomendado)
  • ou Node.js 18+ com npm/yarn/pnpm

Instalação

# Clone o repositório
git clone https://github.com/ruanvalente/image-compressor.git

# Navegue até o diretório do projeto
cd image-compressor

# Instale as dependências
bun install
# ou
npm install
# ou
yarn install
# ou
pnpm install

Executando o Servidor de Desenvolvimento

bun dev
# ou
npm run dev

Abra http://localhost:3000 no seu navegador.

Construindo para Produção

bun build
# ou
npm run build

Iniciando o Servidor de Produção

bun start
# ou
npm start

Estrutura do Projeto

src/
├── app/
│   ├── api/compress/           # Endpoint da API de compressão
│   ├── layout.tsx             # Layout raiz com metadados
│   ├── page.tsx               # Componente da página principal
│   ├── robots.txt            # Arquivo robots para SEO
│   └── globals.css           # Estilos globais
├── components/
│   ├── ui/                   # Componentes UI puros (sem lógica)
│   │   ├── button.ui.tsx
│   │   ├── card.ui.tsx
│   │   ├── badge.ui.tsx
│   │   └── range-slider.ui.tsx
│   └── widgets/              # Componentes funcionais com lógica
│       ├── file-dropzone.widget.tsx
│       ├── format-selector.widget.tsx
│       ├── quality-control.widget.tsx
│       ├── image-preview.widget.tsx
│       └── compression-result-card.widget.tsx
├── hooks/                    # Hooks React personalizados
│   └── use-image-compression.ts
└── lib/
    ├── store/                # Gerenciamento de estado Zustand
    │   └── compressor-store.ts
    └── utils/               # Funções utilitárias
        ├── format-bytes.ts
        └── toast.ts

Contribuir

Contribuições são bem-vindas! Por favor, sinta-se à vontade para enviar um Pull Request.

  1. Fork o repositório
  2. Crie sua branch de funcionalidade (git checkout -b feature/nova-funcionalidade)
  3. Commit suas alterações (git commit -m 'feat: adicione nova funcionalidade')
  4. Push para a branch (git push origin feature/nova-funcionalidade)
  5. Abra um Pull Request

Licença

Este projeto é código aberto e está disponível sob a Licença MIT.


📬 Contato / Contact

Criado por Ruan Valente.


⭐ Se este projeto foi útil para você, considere dar uma estrela no GitHub!

Tags

next.js typescript web javascript

Link curto

URL enxuta em nrt.dev.br para divulgar este projeto nas redes sociais.

https://nrt.dev.br/e/image-compressor-161

Badge de Upvotes

Incorpore o badge em um README ou página Markdown para exibir os votos do projeto.

upvotes: 0
[![upvotes](https://comunidade.devsnorte.com/badges/upvotes/161)](https://comunidade.devsnorte.com/projetos/161)

Publicado por

@ruanvalente

08/05/2026 às 15:01