Convert PNG to SVG using python

27,800

Solution 1

You will need to run an external program to do the image tracing. A popular program is potrace. It is what Inkscape uses to perform the task.

There are some python bindings for it:

https://pypi.python.org/pypi/pypotrace

Solution 2

Since the potrace module is not (easily) available on anaconda on Windows, I looked for an alternative. PngToSvg works perfectly on a python 3.6 environment in Anaconda 4.8.3 on Windows 10 Pro N.

You can clone/download the repository and run python init.py and that will convert the example.png in /examples/ into an example.svg file.

Credits go to the author of the repository.

Solution 3

I would suggest using potrace for python.
Use this link: https://pypi.org/project/pypotrace/
Here is the documentation: https://pythonhosted.org/pypotrace/ref.html#

Like This:

from potrace import Bitmap

# Initialize data, for example convert a PIL image to a numpy array
# [...]

bitmap = Bitmap(data)
path = bitmap.trace()

Solution 4

I'm using https://github.com/ianmackinnon/png2svg to convert low resolution QR-Codes to SVG to print them in arbitrary sizes. It works pretty well, the codes look as expected and are scalable to arbitrary sizes.

However, 2 small (but negligible, at least for me) caveats:
- Conversion takes about a minute or so on my machine for a low resolution image (400x400)
- The file sizes are larger than they should be, compared to an optimized SVG

Share:
27,800
marco
Author by

marco

I'm electronics and computer engineer. I've got interested in cybernitcs and Artificial Intelligence. Probably, I'll question more than answer! My main skills aren't programming, but I'm learning!

Updated on July 09, 2022

Comments

  • marco
    marco almost 2 years

    Is there way to convert a png file into SVG file using only pure python or a python module such as wand?

    To be more precise, I want to convert a png into a real vector graphics, I don't want to embed a bitmap inside the svg, I want to convert into graphics code.

    I know this is possible with Illustrator or Inkscape, but I need an automated process.

    Thank you !

  • Maifee Ul Asad
    Maifee Ul Asad almost 5 years
    This answer referrers a repo which doesn't exists anymore
  • chrarndt
    chrarndt almost 5 years
    No, it doesn't. The link is working fine (for me, anyway).