Meu Editor Canva

Sua imagem.Sua criação.

Edição visual com ferramentas reunidas em um só lugar.

Editor de imagem de computador: seleção, ajustes de cor, texto, formas, camadas e exportação a partir de uma foto.Editor de imagem: ajustes, texto, formas e camadas.

App desktopImagensAutoral

  • Tauri
  • React
  • Fabric.js
  • Rust
Meu Editor Canva

Sua imagem.Sua criação.

Edição visual com ferramentas reunidas em um só lugar.

  • Tauri
  • React
  • Fabric.js
  • Rust

Editor de imagem de computador: seleção, ajustes de cor, texto, formas, camadas e exportação a partir de uma foto.Editor de imagem: ajustes, texto, formas e camadas.

App desktopImagensAutoral

  • Tauri
  • React
  • Fabric.js
  • Rust

PortfólioMeu Editor Canva

Réguas, guias e encaixe

Chegou perto, encaixou.

Alinhar elementos à mão cansa e nunca fica exato. O editor ajuda: quando a borda ou o centro de um objeto chega perto de uma guia ou de outro objeto, ele pula para o lugar e mostra a linha. Arraste os blocos, puxe guias novas das réguas e veja o encaixe acontecer.

A prancheta

01002003004005006000100200300

Arraste os blocos. Puxe uma guia da régua de cima ou da lateral; solte-a sobre a régua para apagar. Com o bloco escolhido, as setas movem 1 px (Shift, 10). Segure Alt para soltar sem encaixar.

O que encaixou

Nada encaixado: chegue a menos de 8 px de uma guia ou de outro bloco.
Bloco 1
x 70 · y 70
Distância de encaixe (na tela)
8 px
Guias (1)
x 300

As regras são as do editor (guias.ts): o objeto que se move oferece 3 pontos por eixo, esquerda, centro e direita; topo, meio e base. Os alvos são as guias e as bordas e o centro dos outros objetos. Vale a menor distância, até 8 px da tela (por isso o encaixe é o mesmo com a prancheta grande ou pequena); no empate, a guia ganha, porque foi posta de propósito. A régua tem 22 px e põe um número a cada ~70 px de tela, arredondado para 1, 2 ou 5 vezes uma potência de 10. Não existe grade.

Cena do projeto: o editor num monitor, com os ícones de ajuste, corte e formas em vidro na frente

Ajuste. Recorte. Transforme.

Cor, seleção e elementos para trabalhar cada detalhe.

Uma prévia que mostra uma cor e um arquivo salvo com outra é o pior defeito de um editor. Aqui, a prévia e o resultado final usam a mesma conta, escrita duas vezes, no navegador do app e no motor em Rust. Mexa nos ajustes: à esquerda, essa conta; à direita, o filtro nativo do navegador.

Lado a lado

A conta do editor
O filtro do navegador

Filtros e ajustes

brilho 1 · contraste 1 · inverter 0
saturação 1 · matiz 0° · sépia 0

A conta é a do editor (ajustes.ts, e a mesma em ajustes.rs): uma tabela de 256 entradas para brilho, contraste e negativo, e depois uma matriz 3 × 3 para saturação, matiz e sépia, com os pesos 0,213 / 0,715 / 0,072 da especificação de filtros do navegador. Os filtros prontos são combinações exatas: Sépia = sépia 1 e saturação 0,85; Frio = matiz −14° e saturação 1,1; Quente = matiz +14°, saturação 1,12 e brilho 1,03. A prévia roda no tamanho da tela e o "Aplicar" roda em Rust, no tamanho real. A foto é da BabyShoes.

Cena do projeto: o editor num monitor com uma imagem aberta e cópias em camadas de vidro saindo para exportar

Da ideia ao arquivo final.

Camadas, histórico e exportação num fluxo visual.

Um recorte bem feito tem borda macia, com centenas de níveis de transparência, e um formato errado joga tudo isso fora sem avisar. O editor conta os níveis antes e depois de exportar e avisa quando o formato vai estragar o recorte. Mude a suavidade da borda e troque o formato.

O recorte

Antes
Depois de exportar

O formato

Pouca transparência (128 níveis ou menos): o app nem avisa.

Simulado com os 83 níveis que o próprio app mediu para o PNG indexado.

PNG177,7 KB255 níveis
WebP30,2 KB255 níveis
WebP sem perda70,3 KB255 níveis
PNG indexado32,4 KB83 níveis
JPEG27,1 KB1 nível

As telas de verdade

As regras são as do editor (imagem.rs e PainelExportar.tsx): conta os níveis distintos de transparência e quanto da imagem tem transparência entre 9 e 246 (a borda suave). Com mais de 128 níveis, avisa: PNG e WebP mantêm, PNG indexado reduz, JPEG e PDF achatam sobre a cor de fundo. A tabela é a medição do próprio app, num recorte de 255 níveis. Aqui, PNG, WebP e JPEG passam pelo codificador do seu navegador, então os tamanhos variam um pouco dos do app. O PDF do app é uma imagem numa página A4.

As tecnologias

Do que é feito, peça por peça

Um editor de imagem de computador em duas metades: a tela, em React com o Fabric.js desenhando texto, formas e seleção por cima da foto, e um motor em Rust que guarda os pixels, faz os ajustes no tamanho real, o histórico e a exportação. Escolha uma peça para ver o que ela faz aqui e em que arquivo está.

8tecnologias, em 2 camadas

A tela

O motor