Uma demonstração interativa da implementação de molduras usando Fabric.js com ClipPath. Crie composições visuais aplicando diferentes formas de molduras às suas imagens com capacidades avançadas de edição.
- Formas de Molduras
- Básicas: Círculo, Retângulo, Elipse
- Geométricas: Triângulo, Hexágono
- Especiais: Estrela, Coração, Nuvem
| Tipo | Código | Descrição |
|---|---|---|
'circle' |
Círculo | Moldura circular perfeita |
'rect' |
Retângulo | Moldura retangular (padrão) |
'ellipse' |
Elipse | Moldura oval |
'triangle' |
Triângulo | Moldura triangular |
'hexagon' |
Hexágono | Moldura hexagonal |
'star' |
Estrela | Moldura em formato de estrela de 5 pontas |
'heart' |
Coração | Moldura em formato de coração |
'cloud' |
Nuvem | Moldura em formato de nuvem |
- Edição Avançada de Imagem
- Upload de imagem personalizada
- Modo de edição com duplo clique e recorte avançado
- Ajuste de recorte em tempo real com controles do mouse
- Fundo com padrão de tabuleiro para melhor visibilidade
- Backdrop semi-transparente para visualização completa da imagem
- Atalhos de teclado (suporte à tecla Delete)
- Fabric.js 5.3.1 - Biblioteca para manipulação de canvas HTML5
- Bootstrap 5.3.2 - Framework CSS para interface responsiva
- Bootstrap Icons 1.11.1 - Ícones modernos e consistentes
- JavaScript ES6+ - Linguagem de programação moderna
- HTML5 Canvas - Elemento para renderização gráfica
- CSS3 - Estilos avançados com animações e transições
- Selecionar uma Moldura: Clique em um dos botões de forma para criar uma moldura
- Adicionar Imagem: Clique em "Adicionar Imagem" ou faça upload do seu próprio arquivo de imagem
- Entrar no Modo de Edição: Clique duplo no grupo moldura+imagem para entrar no modo de edição avançada
- Recorte Avançado:
- Arraste a imagem para ajustar a posição do recorte
- Use as alças dos cantos para redimensionar a área de recorte
- O backdrop semi-transparente mostra a imagem completa
- Sair do Modo de Edição: Clique duplo na imagem ou clique fora da moldura para sair do modo de edição
- Controles Adicionais:
- Pressione a tecla
Deletepara remover objetos selecionados - Arraste molduras para reposicioná-las e redimensioná-las
- Gire usando a alça de rotação superior
- Pressione a tecla
// Inicializar a classe com um canvas Fabric.js
const canvas = new fabric.Canvas('canvas');
const frameEditor = new FrameEditor(canvas);
// Adicionar diferentes tipos de molduras
frameEditor.addFrame('circle'); // Círculo
frameEditor.addFrame('heart'); // Coração
frameEditor.addFrame('star'); // Estrela
frameEditor.addFrame('hexagon'); // Hexágono
// Fazer upload de imagem
const fileInput = document.getElementById('imageInput');
fileInput.addEventListener('change', (e) => {
frameEditor.uploadImage(e);
});
// Adicionar imagem por URL
frameEditor.addImage('https://exemplo.com/imagem.jpg');
// Habilitar seleção de imagem para frame ativo
frameEditor.enableToSelectImage();
// Deletar objeto selecionado
frameEditor.deleteObject();| Método | Descrição |
|---|---|
addFrame(type) |
Adiciona um novo frame do tipo especificado |
addImage(imageUrl) |
Adiciona uma imagem ao frame ativo |
uploadImage(event) |
Processa upload de arquivo de imagem |
enterEditMode(e) |
Entra no modo de edição de crop |
exitEditMode(e) |
Sai do modo de edição |
enableToSelectImage() |
Habilita seleção de imagem para frame ativo |
deleteObject(object) |
Remove objeto selecionado do canvas |
- Fabric.js v5.3.1 - Biblioteca de manipulação de canvas
- HTML5 Canvas
- JavaScript ES6+
- CSS3 com design responsivo
O projeto utiliza uma classe JavaScript (FrameEditor) que encapsula toda a funcionalidade de molduras, proporcionando:
- Código Modular: Separação clara de responsabilidades e métodos bem definidos
- Reutilização: Classe pode ser instanciada múltiplas vezes para diferentes canvases
- Manutenibilidade: Código organizado e documentado com JSDoc
- Extensibilidade: Fácil adição de novos tipos de molduras e funcionalidades
- Criação de Molduras: Formas criadas usando objetos geométricos do Fabric.js com metadados personalizados
- Sistema ClipPath: Geração dinâmica de ClipPath para cada tipo de moldura
- Processamento de Imagem: Escala e posicionamento automático com preservação da proporção
- Modo de Edição Avançado: Edição com duplo clique e ajuste de recorte em tempo real
- Gerenciamento de Estado: Bloqueio de objetos e preservação do z-index durante a edição
- API Orientada a Objetos: Métodos públicos para controle total da funcionalidade
- Clone o repositório:
git clone https://github.com/adrianohcampos/Frames-with-Fabric.js-ClipPath.git- Navegue até o diretório do projeto:
cd Frames-with-Fabric.js-ClipPath- Abra
index.htmlno seu navegador web
Frames-with-Fabric.js-ClipPath/
├── index.html # Interface principal
├── FrameEditor.js # Código com a Classe FrameEditor
├── script.js # Código para iniciar instanciar o canva
├── styles.css # Estilos da aplicação
├── data.json # Dados de exemplo
└── README.md # Documentação
- Fabric.js v5.3.1 (carregado via CDN)
- Navegador moderno com suporte a ES6+
- Canvas HTML5 habilitado
Para usar a classe FrameEditor em seu projeto:
<!-- Inclua Fabric.js -->
<script src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/5.3.1/fabric.min.js"></script>
<!-- Inclua a classe FrameEditor -->
<script src="FrameEditor.js"></script>
<script>
// Inicialize o canvas e a classe
const canvas = new fabric.Canvas('meuCanvas');
const frameEditor = new FrameEditor(canvas);
// Use os métodos da classe
frameEditor.addFrame('circle');
</script>Este projeto está sob a licença MIT. Veja o arquivo LICENSE para mais detalhes.
Contribuições são bem-vindas! Sinta-se à vontade para enviar um Pull Request.
Desenvolvido com ❤️ usando Fabric.js
