vtracer (Python)
Python bindings for vtracer. Built
with pyo3 + maturin; the core Rust
crate stays pure (no I/O), and this crate adds image decoding and a Pythonic API.
Introduction
visioncortex VTracer is an open source software to convert raster images (like jpg & png) into vector graphics (svg). It can vectorize graphics and photographs and trace the curves to output compact vector files.
Comparing to Potrace, VTracer has an image processing pipeline which can handle colored images. VTracer skips Potrace's expensive optimal-polygon search in favor of a fast, linear pipeline that stays faithful to high-resolution images.
Comparing to Adobe Illustrator's Image Trace, VTracer's output is much more compact as we adopt a stacking strategy and avoid producing shapes with holes.
VTracer is originally designed for processing high resolution scans of historic blueprints up to gigapixels. At the same time, VTracer can also handle low resolution pixel art, simulating image-rendering: pixelated for retro game artworks.
Technical descriptions of the tracing algorithm and clustering algorithm.
Install
pip install vtracer==1.0.0a4
Usage
import vtracer
# one-liners
vtracer.convert_file("in.png", "out.svg")
svg = vtracer.convert_bytes(open("in.png", "rb").read()) # -> str
svg = vtracer.convert_pixels(rgba_bytes, width, height) # raw RGBA8
# a rich, reusable configuration object
cfg = vtracer.Config(mode="polygon", filter_speckle=8)
cfg.hierarchical = "cutout" # seam-free mosaic
cfg.palette = ["#1b1b1b", "#e0c088", "#5a7d3c"] # snap to a fixed palette
cfg.max_colors = 8 # or auto-quantize
cfg.optimize = 2
svg = cfg.convert_bytes(data)
# presets
vtracer.Config.poster().convert_file("photo.jpg", "poster.svg")
vtracer.Config.bw().convert_file("scan.png", "lineart.svg")
Config
Constructor keyword arguments (all optional) — also exposed as mutable
properties, plus the presets Config.bw(), Config.poster(), Config.photo():
| arg | default | notes |
|---|---|---|
clustering |
"color-cluster" |
"color-cluster", "bw", or "watershed" |
hierarchical |
"stacked" |
"stacked" or "cutout" (mosaic) |
mode |
"spline" |
"pixel", "polygon", "spline" |
filter_speckle |
4 |
discard patches smaller than X px |
color_precision |
6 |
significant bits per channel |
layer_difference |
16 |
color diff between gradient layers |
corner_threshold |
60 |
degrees |
length_threshold |
4.0 |
px |
max_iterations |
10 |
|
splice_threshold |
45 |
degrees |
simplify |
None |
curve simplification tolerance in px (try 1–2.5) |
path_precision |
2 |
output decimal places |
palette |
None |
list of #rrggbb strings |
max_colors |
None |
auto-quantize target |
optimize |
1 |
0 off, 1 quantize+cleanup, 2 + shorthands |
binary_threshold |
128 |
bw: fixed cutoff, foreground below it |
adaptive |
False |
bw: Bradley–Roth adaptive thresholding |
adaptive_window |
0 |
bw adaptive: window px (0 = auto) |
adaptive_t |
15.0 |
bw adaptive: % below local mean |
watershed_detail |
128 |
watershed: hierarchy cut level (higher = more regions, uncapped) |
Each Config has convert_file(input, output), convert_bytes(data, format=None) -> str,
and convert_pixels(rgba, width, height) -> str.
Build from source
maturin develop # into the active virtualenv
maturin build --release # produce a wheel
