How image to SVG conversion works
ImageToSVG traces the picture you give it. It does not redraw or reinvent it with generative AI, so the shapes, proportions and lettering in the SVG come from your image and nothing else.
The steps
- Decode. Your browser decodes the file and applies its EXIF orientation. The file is not sent anywhere.
- Resize to a working size. Images smaller than 1024 pixels are lightly blurred and enlarged up to 4× with smooth interpolation. This turns the soft anti-aliased edge pixels into sub-pixel position information, which gives smoother curves than tracing a pixel staircase. Images larger than 2048 pixels are reduced to 2048 on the longest side.
- Handle transparency. Pixels that are less than half opaque become fully transparent and are left out of the result. The rest become fully opaque.
- Remove the background (optional). If one color covers at least half of the image border, pixels of that color that are connected to the border are cleared. Areas of the same color enclosed by the artwork are kept.
- Reduce colors. The remaining pixels are grouped into a small palette. In Auto mode, near-identical colors are merged and faint blend colors that only appear along edges are discarded. A fixed limit is an upper bound: no colors are invented to reach it.
- Trace. Connected regions of each color are outlined and the outlines are fitted with straight lines and cubic Bézier curves by the open-source visioncortex / VTracer engine, compiled to WebAssembly. Regions smaller than the Detail threshold are dropped.
- Write the SVG. Coordinates are scaled back to the original pixel size and written as plain
<path>elements with aviewBox. There are no transforms, embedded images, scripts or external references.
What is preserved and what is not
- Preserved: overall shapes, flat colors, transparent areas and holes, stacking order.
- Approximated: soft edges become crisp; gradients and shadows become bands of flat color.
- Not recovered: fonts and live text, original design layers, detail lost to blur or compression.
How we tested it
In November 2026 we rendered 16 openly licensed icons (8 single-color brand marks and 8 multi-color emoji) from their original vector files, saved each as a 512-pixel PNG and as a 200-pixel JPEG at quality 60, traced all 32 files, and compared each traced SVG with the original vector rendered at 1024 pixels. The score is the mean absolute pixel difference on a 0–255 scale, so lower is closer.
| Input | Tracer | Mean difference | Average paths | Average size |
|---|---|---|---|---|
| 512 px PNG | VTracer 0.6.5, default settings | 1.48 | 7.1 | 7.1 KB |
| 512 px PNG | ImageToSVG, default settings | 0.62 | 7.0 | 8.5 KB |
| 200 px JPEG | VTracer 0.6.5, default settings | 4.69 | 128.9 | 42.2 KB |
| 200 px JPEG | ImageToSVG, default settings | 2.53 | 11.0 | 22.2 KB |
This is a small test on simple flat artwork, measured by us with one metric. It shows that upsampling and palette clean-up help the tracing engine on this kind of image. It is not a ranking of products, and it says nothing about photographs.
Limits
- Input: PNG, JPG, WebP, GIF (first frame), BMP, AVIF; up to 30 MB and 50 megapixels.
- Working size: 2048 pixels on the longest side.
- Colors: Auto, or a limit from 2 to 32.
- Output: SVG with filled paths only.