Meu Editor Canva

Your image.Your creation.

Visual editing with tools gathered in one place.

A desktop image editor: selection, color adjustments, text, shapes, layers and export, starting from a photo.Image editor: adjustments, text, shapes and layers.

Desktop appImagesOriginal

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

Your image.Your creation.

Visual editing with tools gathered in one place.

  • Tauri
  • React
  • Fabric.js
  • Rust

A desktop image editor: selection, color adjustments, text, shapes, layers and export, starting from a photo.Image editor: adjustments, text, shapes and layers.

Desktop appImagesOriginal

  • Tauri
  • React
  • Fabric.js
  • Rust

PortfolioMeu Editor Canva

Rulers, guides and snapping

Get close, it snaps.

Aligning things by hand is tiring and never exact. The editor helps: when an object's edge or center gets close to a guide or another object, it jumps into place and shows the line. Drag the blocks, pull new guides from the rulers and watch the snapping happen.

The artboard

01002003004005006000100200300

Drag the blocks. Pull a guide from the top or side ruler; drop it on the ruler to delete. With a block selected, the arrows move 1 px (Shift, 10). Hold Alt to drop without snapping.

What snapped

Nothing snapped: get within 8 px of a guide or another block.
Block 1
x 70 · y 70
Snapping distance (on screen)
8 px
Guides (1)
x 300

The rules are the editor's (guias.ts): the moving object offers 3 points per axis, left, center and right; top, middle and bottom. Targets are the guides plus the edges and center of the other objects. The shortest distance wins, up to 8 px on screen (so snapping feels the same whether the artboard is big or small); on a tie, the guide wins, because it was placed on purpose. The ruler is 22 px and puts a number every ~70 px on screen, rounded to 1, 2 or 5 times a power of 10. There's no grid.

Project scene: the editor on a monitor, with glass icons for adjust, crop and shapes in front

Adjust. Cut out. Transform.

Color, selection and elements to work every detail.

A preview that shows one color while the saved file has another is an editor's worst flaw. Here, the preview and the final result use the same calculation, written twice, in the app's browser view and in the Rust engine. Move the adjustments: on the left, that calculation; on the right, the browser's native filter.

Side by side

The editor's calculation
The browser's filter

Filters and adjustments

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

The calculation is the editor's (ajustes.ts, and the same in ajustes.rs): a 256-entry table for brightness, contrast and negative, then a 3 × 3 matrix for saturation, hue and sepia, with the 0.213 / 0.715 / 0.072 weights from the browser filter spec. The presets are exact combinations: Sepia = sepia 1 and saturation 0.85; Cool = hue −14° and saturation 1.1; Warm = hue +14°, saturation 1.12 and brightness 1.03. The preview runs at screen size and "Apply" runs in Rust, at full size. The photo is from BabyShoes.

Project scene: the editor on a monitor with an open image and glass layer copies flowing out to export

From idea to final file.

Layers, history and export in one visual flow.

A good cutout has a soft edge, with hundreds of transparency levels, and the wrong format throws all of that away without warning. The editor counts the levels before and after exporting and warns when the format will ruin the cutout. Change the edge softness and switch the format.

The cutout

Before
After exporting

The format

Little transparency (128 levels or fewer): the app doesn't even warn.

Simulated with the 83 levels the app itself measured for indexed PNG.

PNG177.7 KB255 levels
WebP30.2 KB255 levels
Lossless WebP70.3 KB255 levels
Indexed PNG32.4 KB83 levels
JPEG27.1 KB1 level

The real screens

The rules are the editor's (imagem.rs and PainelExportar.tsx): it counts the distinct transparency levels and how much of the image has transparency between 9 and 246 (the soft edge). Above 128 levels, it warns: PNG and WebP keep it, indexed PNG reduces it, JPEG and PDF flatten onto the background color. The table is the app's own measurement, on a 255-level cutout. Here, PNG, WebP and JPEG go through your browser's encoder, so sizes vary slightly from the app's. The app's PDF is an image on an A4 page.

The technologies

What it is made of, piece by piece

A desktop image editor in two halves: the screen, in React with Fabric.js drawing text, shapes and selection over the photo, and a Rust engine that keeps the pixels and does the full-size adjustments, the history and the export. Pick a piece to see what it does here and which file it is in.

8technologies, in 2 layers

The screen

The engine