logoalt Hacker News

ameliusyesterday at 11:05 PM5 repliesview on HN

I recently found out that it is surprisingly hard to convert an SVG file that consists of series of line segments into a list of those line segments in Python.

I tried with ChatGPT and Claude but both were not able to find a solution that respects the entire specification, especially transforms.

Initially, my expectation was that there must be a library for this kind of thing, but alas.


Replies

boothbyyesterday at 11:31 PM

I find svg.path to be good for parsing path data

  https://pypi.org/project/svg.path/
For actually parsing the file, there are a number of options (in the end, it's an XML file and I tend to treat it as such)
nicoburnstoday at 12:37 AM

Not sure about python, but https://docs.rs/usvg in Rust is pretty good

nish__yesterday at 11:13 PM

Can't you do it by hand pretty easily? It's a list of coordinates separated by spaces. For example: "100,100 100,200 200,200 200,100"

show 1 reply
e12eyesterday at 11:26 PM

I mean - it's XML so you could go that way and extract the d element from path element?

But there seems to be a lot of SVG specific tooling and code to do this in python?

Eg: https://github.com/RaubCamaioni/svgpath

show 1 reply
nawgzyesterday at 11:43 PM

I seem to remember that the DOM nodes themselves expose some pretty useful functions. I think it was in the context of detecting edge crossings for a graph router, but you were able to interact with the computed/rendered coordinates in this context.

Sorry that's not more useful and explicit, it was a while back and never went anywhere.