#svg #cli #converter #command-line-tool

app svg2pts

A Command line tool to convert a svg to a list of points

6 releases

0.1.5 Mar 5, 2020
0.1.4 Mar 2, 2020
0.1.1 Feb 29, 2020

#2449 in Command line utilities

Download history 28/week @ 2024-02-26 1/week @ 2024-03-11 11/week @ 2024-04-01 193/week @ 2024-06-10

193 downloads per month

MIT license

17KB
316 lines

svg2pts

Command line utility to convert the paths in a SVG to a list of points. All paths in the SVG are converted into a list of points with curve interpolation is controlled by command line arguments. Paths with no stroke nor fill are ignored. Output is a sequence of points, X Y\n

Installation

Using snaps:

snap install svg2pts

Using cargo:

cargo install svg2pts

OR with enabled text feature, requires harfbuzz,

cargo install svg2pts --features=text

This will make the svg2pts binary available in your cargo binary directory; usually ~/.cargo/bin.

Usage

svg2pts 0.1.5
Converts all paths in a svg to a list of points. Paths
with no stroke nor fill are ignored. Output is a sequence of points, `X Y\n`. 

USAGE:
    svg2pts [OPTIONS] [ <input> [<output>] ]

FLAGS:
    -h, --help       Prints help information

OPTIONS:
    -a, --accuracy <accuracy>    Set tolerance threshold for bezier curve approximation, 
                                 lower -> higher quality [default: min(<distance>/25.0,0.05)]
    -d, --distance <distance>    Set target distance between points, depends on DPI of SVG.
                                 If distance == 0.0 point distance not normalized.
                                 [default: 0.0]

ARGS:
    <input>     Input SVG file, stdin if not present
    <output>    Output file, stdout if not present"#

Changelog

  • v0.1.5
    • Fix: Commandline argument, output file bug.
    • Change: Lower tolerance threshold for improved default accuracy and scale thread threshold for small disances.
  • v0.1.4
    • Make text support an optional feature, making the harfbuzz dependency optional.
  • v0.1.3
    • Improved distance normalization: The points generated more accurately follow the paths in the SVG at a variety of distance parameters.
    • Hidden path removal: Paths which have no stroke nor fill value are ignored when generating points.
  • v0.1.2
    • Transformations now applied: Previously path transformations where ignored.

Examples

$ svg2pts -d 3.5 media/rust.svg
71.05 120.32
67.5572042727889 120.0955495422685
64.09895790373652 119.5565392910338
60.64071153468416 119.0175290397991
57.283778022261004 118.02707591462337
...

$ svg2pts -d 3.5 media/rust.svg | gnuplot -p -e 'plot "<cat"'
#graphs below

SVG converted to points with distance 1.5

SVG converted to points with distance 3.5

SVG converted to points without normalized distance

SVG converted without normalized distance and lower accuracy (simplified)

SVG converted to points then displayed on an oscilloscope

svg2pts -d 3.5 rust.svg | pts2wav > logo.wav

Rust logo svg converted to pts and display on oscilloscope.

You can get pts2wav here https://github.com/exrok/pts2wav

Dependencies

~4MB
~90K SLoC