Benchmark · 29 September 2026Stroke-to-fill converters, tested
Ten ordinary icons of the kind devs ask designers to outline, run through Outline Stroke and three popular free converters. Every output below is rendered live on this page and compared pixel by pixel against the original. A pass needs a visual match of at least 97%, no live strokes left and currentColor kept wherever the original used it.
Loading Skia and scoring…
How this was scored
- Each original and each output is drawn at 320px wide in this browser. Only pixels with ink in either image count, so empty background can't inflate the score. A pixel matches if its red, green, blue and alpha values are each within 40 (on a 0–255 scale) of a pixel at most one step away in the other image, so ordinary anti-aliasing along edges isn't counted as a difference.
- "Strokes left" counts shapes in the output that still carry a live stroke. Without it, a tool that changes nothing would score a perfect match.
- Competitor outputs were captured from their public pages on 29 September 2026 using each page's own input and copy controls, with default settings. They can change at any time.
- The fixtures are ours and were chosen to cover everyday cases: inherited strokes, CSS classes, dashes, transforms and
currentColor. Nothing exotic, but we did pick them.
iconLint · Object → Path → Outline StrokeOutline Stroke
Drop an SVG and every stroke becomes a filled shape, ready for icon fonts, IcoMoon, Cricut or a single fill="currentColor". Your files never leave your browser.
Loading Skia…Stroked by Skia, the engine Chrome draws with, then checked pixel by pixel against your original.
Drop SVG files here
or click to choose, or paste markup with ⌘V. Several files at once is fine.
Outlined
Loading Skia: about 7 MB, once, then it's cached.
What gets converted
Shapes are replaced where they sit. Groups, ids, classes, transforms, clip-paths and gradients stay put, so the CSS the dev already wrote keeps working.
Anything that can't be converted faithfully is flagged on the file's card before you send it.
| In your SVG | In the output |
|---|---|
path rect circle ellipse line polyline polygon | Outlined |
Stroke width, colour and stroke-opacity | Kept |
stroke-linecap, stroke-linejoin, miter limit | Kept |
| Dash arrays and dash offsets | Kept |
Strokes set in <style> blocks or on parent groups | Resolved |
currentColor | Kept as currentColor |
paint-order and fill-rule | Kept |
| Gradient or pattern strokes | Kept, flagged |
vector-effect="non-scaling-stroke" | Approximated, flagged |
Stroked <text> | Left as-is, flagged |
| Markers and arrowheads | Dropped, flagged |
Coming next
Check and fix the whole icon folder on every commit
iconLint is the command-line version and GitHub Action: the same engine, run over every icon in the repo on each pull request, so nobody has to message a designer for a converted icon again.
$npx iconlint --fix icons/