POTRACE - transform bitmaps into vector graphics
================================================

This is a heavily stripped down version of the brilliant, but increadibly bloated and badly organized
[potrace](http://potrace.sourceforge.net/potrace.html) repository.

I've removed all the bloat, leaving only the essential core functions. I've made very very small modifications (like
including stdint.h and replacing sqrt with builtin_sqrtf to avoid depending on libm), otherwise this code is verbatim.

Compilation
-----------

```sh
$ make libpotrace.a
```

Original README follows:

--------------------------------------------------------------------------------

```
	   POTRACE - transform bitmaps into vector graphics

				* * *

DESCRIPTION

 Potrace is a tool for tracing a bitmap, which means, transforming a
 bitmap into a smooth, scalable image.  The input is a bitmap (PBM,
 PGM, PPM, or BMP), and the output is one of several vector file
 formats.  A typical use is to create SVG or PDF files from scanned
 data, such as company or university logos, handwritten notes, etc.
 The resulting image is not "jaggy" like a bitmap, but smooth. It can
 then be rendered at any resolution.

 Potrace can currently produce the following output formats: SVG, PDF,
 EPS, PostScript, DXF, GeoJSON, PGM (for easy antialiasing of
 pixel-based images), Gimppath, and XFig. Additional backends might be
 added in the future.

 A separate program, mkbitmap, is also provided. This program can act
 as a pre-processor for Potrace, applying scaling and various filters
 to an image before converting it to a bitmap. This is useful for
 potracing greyscale and color images.

DEPENDENCIES

 Potrace relies on the zlib library for PostScript level 3
 compression. This library is pre-installed on most modern systems.
 If not present, it can be obtained from http://www.gzip.org/zlib/.

COMPILATION

 For generic compilation instructions, see the file INSTALL.  In
 addition, the following compile time options (options to ./configure)
 are supported.

  --with-libpotrace       install Potrace library and headers (default: no)
  --disable-zlib          disable PostScript level 3 compression
  --enable-metric         use metric units (centimeters) as default
  --enable-a4             use a4 as the default papersize
  --enable-dumb-tty       use simplified ASCII-only progress bar
  --enable-local-getopt   avoid using the system-wide getopt library

 See also ./configure --help.

INSTALLING

 If you are installing from sources, just do "make install" as root.
 If you are installing from a binary distribution, just copy the
 "potrace" and "mkbitmap" binaries to a place where the operating
 system expects them, such as /usr/local/bin. Also copy the files
 "potrace.1" and "mkbitmap.1" to a directory where the operating
 system looks for man pages, such as /usr/local/man/man1. For
 instructions on installing Potrace under Windows, see the file
 README-WIN

USAGE

 For more detailed usage information, see the man page.

 Usage: potrace [options] [filename...]
 General options:
  -h, --help                 - print this help message and exit
  -v, --version              - print version info and exit
  -l, --license              - print license info and exit
 File selection:
  <filename>                 - an input file
  -o, --output <filename>    - write all output to this file
  --                         - end of options; 0 or more input filenames follow
 Backend selection:
  -b, --backend <name>       - select backend by name
  -b svg, -s, --svg          - SVG backend (scalable vector graphics)
  -b pdf                     - PDF backend (portable document format)
  -b pdfpage                 - fixed page-size PDF backend
  -b eps, -e, --eps          - EPS backend (encapsulated PostScript) (default)
  -b ps, -p, --postscript    - PostScript backend
  -b pgm, -g, --pgm          - PGM backend (portable greymap)
  -b dxf                     - DXF backend (drawing interchange format)
  -b geojson                 - GeoJSON backend
  -b gimppath                - Gimppath backend (GNU Gimp)
  -b xfig                    - XFig backend
 Algorithm options:
  -z, --turnpolicy <policy>  - how to resolve ambiguities in path decomposition
  -t, --turdsize <n>         - suppress speckles of up to this size (default 2)
  -a, --alphamax <n>         - corner threshold parameter (default 1)
  -n, --longcurve            - turn off curve optimization
  -O, --opttolerance <n>     - curve optimization tolerance (default 0.2)
  -u, --unit <n>             - quantize output to 1/unit pixels (default 10)
  -d, --debug <n>            - produce debugging output of type n (n=1,2,3)
 Scaling and placement options:
  -P, --pagesize <format>    - page size (default is letter)
  -W, --width <dim>          - width of output image
  -H, --height <dim>         - height of output image
  -r, --resolution <n>[x<n>] - resolution (in dpi) (dimension-based backends)
  -x, --scale <n>[x<n>]      - scaling factor (pixel-based backends)
  -S, --stretch <n>          - yresolution/xresolution
  -A, --rotate <angle>       - rotate counterclockwise by angle
  -M, --margin <dim>         - margin
  -L, --leftmargin <dim>     - left margin
  -R, --rightmargin <dim>    - right margin
  -T, --topmargin <dim>      - top margin
  -B, --bottommargin <dim>   - bottom margin
  --tight                    - remove whitespace around the input image
 Color options, supported by some backends:
  -C, --color #rrggbb        - set foreground color (default black)
  --fillcolor #rrggbb        - set fill color (default transparent)
  --opaque                   - make white shapes opaque
 SVG options:
  --group                    - group related paths together
  --flat                     - whole image as a single path
 Postscript/EPS/PDF options:
  -c, --cleartext            - do not compress the output
  -2, --level2               - use postscript level 2 compression (default)
  -3, --level3               - use postscript level 3 compression
  -q, --longcoding           - do not optimize for file size
 PGM options:
  -G, --gamma <n>            - gamma value for anti-aliasing (default 2.2)
 Frontend options:
  -k, --blacklevel <n>       - black/white cutoff in input file (default 0.5)
  -i, --invert               - invert bitmap
 Progress bar options:
  --progress                 - show progress bar
  --tty <mode>               - progress bar rendering: vt100 or dumb

 Dimensions can have optional units, e.g. 6.5in, 15cm, 100pt.
 Default is inches (or pixels for pgm, dxf, and gimppath backends).
 Possible input file formats are: pnm (pbm, pgm, ppm), bmp.
 Backends are: svg, pdf, pdfpage, eps, postscript, ps, dxf, geojson, pgm,
 gimppath, xfig.

POTRACE LIBRARY (FOR DEVELOPERS)

 As of Potrace release 1.6, the Potrace core functionality has been
 separated into a library libpotrace.a. This makes it easy to integrate
 tracing functionality into other GPL programs. The API of the library
 is defined in the header file potracelib.h, and is documented in
 doc/potracelib.pdf. It is not by default installed, but can be
 installed with the --with-libpotrace configuration option.

DOCUMENTATION

 Usage information is contained in the man page:
 http://potrace.sourceforge.net/potrace.html

 Many common questions are answered in the FAQ:
 http://potrace.sourceforge.net/faq.html

 Some examples are given on the following web pages:
 http://potrace.sourceforge.net/samples.html
 http://potrace.sourceforge.net/mkbitmap.html

 The inner workings of the potrace algorithm are explained here:
 http://potrace.sourceforge.net/potrace.pdf

 The potrace library is documented here:
 http://potrace.sourceforge.net/potracelib.pdf

COPYRIGHT

 Copyright (C) 2001-2017 Peter Selinger

 The use of the name "Potrace" is governed by a separate policy, see
 TRADEMARKS below.

 This program is free software; you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation; either version 2 of the License, or (at
 your option) any later version.

 This program is distributed in the hope that it will be useful, but
 WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program; if not, write to the Free Software Foundation,
 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
 See also http://www.gnu.org/.

 See the file COPYING for details.

TRADEMARKS

 "Potrace" is a trademark of Peter Selinger.

 Policy on using the name "Potrace". If you are planning to modify
 Potrace, including making a port of Potrace to another programming
 language, please be aware of the following. While the source code of
 Potrace is licensed under the GNU General Public License, the name
 "Potrace" is my trademark, and may only be used with my permission.

 In practice, I will permit the use of the name "Potrace" in
 connection with a port of Potrace to another programming language,
 provided that the port complies with the term of the GNU General
 Public License and produces the same high quality vectorized output
 as the original Potrace. Ports that are buggy or do not produce high
 quality output are not permitted to use the name "Potrace". To ensure
 compliance with this policy, please run your port by me before making
 it public. Also, if you use the "Potrace" name (or any derivative,
 such as "MyPotrace"), you must provide a name and email address where
 I can reach you. Derivatives of Potrace that are posted anonymously
 or where the authors cannot be reached or do not reply to email or
 bug reports are not permitted to use the name "Potrace".

 The purpose of this policy is to allow people to port Potrace to as
 many programming languages as possible, while also ensuring that all
 such ports are of the same high quality that has come to be
 associated with the name "Potrace".

GPG KEY

 The key fingerprint of Peter Selinger's GPG key is:
 12A2 4B3C 3790 B688 E484  7A98 A68B CC37 CA31 696A
 This may be useful for authenticating future versions of Potrace.
```
