# img2gcode
**Repository Path**: mirrors_schollz/img2gcode
## Basic Information
- **Project Name**: img2gcode
- **Description**: Convert any image to gcode for use in plotters (e.g. Line-us)
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 1
- **Forks**: 1
- **Created**: 2021-10-22
- **Last Updated**: 2025-10-12
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# img2gcode.py
This script, `img2gcode.py` will take any image and convert it into a nice line drawing with GCode coordinates. You can take a scanned drawing, or black and white digital sketch like below and convert it into lines to be plotted.
You can specify the dimensions of the underlying plotter. For the example below, generated from the image above, the dimensions for [the Line-us drawing arm](https://github.com/Line-us/Line-us-Programming/blob/master/Documentation/LineUsDrawingArea.pdf)).
## Install
You need the following requirements:
- python (3.6+)
- potrace
- ffmpeg
- imagemagick
- autotrace
### Windows
On Windows you can install with [scoop](https://scoop.sh/). Note that you must use `python37` to install Python because one of the libraries (simplification) on Windows is incompatible with Python3.8.
scoop install potrace ffmpeg imagemagick python37
Once installed, you can install the required Python packages with pip:
python37 -m pip install click loguru numpy simplification svgpathtools svgwrite tqdm pillow svg.path
You also need to download `autotrace` from [here](https://github.com/scottvr/autotrace-win64-binaries/tree/master/bin) and put it in your path.
### Linux
On Linux you can install with apt:
sudo apt install potrace ffmpeg imagemagick python3
Once installed, you can install the required Python packages with pip:
python3 -m pip install click loguru numpy simplification svgpathtools svgwrite tqdm pillow svg.path
You also need to build `autotrace` since newer distributions of Ubuntu don't include it:
```bash
sudo apt update
sudo apt install intltool imagemagick libmagickcore-dev pstoedit libpstoedit-dev autopoint
git clone https://github.com/autotrace/autotrace.git
cd autotrace
./autogen.sh
LD_LIBRARY_PATH=/usr/local/lib ./configure --prefix=/usr
make
sudo make install
```
## Run
You can just download and run the script directly:
wget https://raw.githubusercontent.com/schollz/img2gcode/master/img2gcode.py
python3 img2gcode.py --file image.jpg --animate --simplify 2 --threshold 80
Try changing `--simplify` from 1 to 10 to decrease the number of lines. You can also increase `--threshold` if you aren't getting the whole picture. You can also add an option `--centerline` to get a better skeleton.
After it runs it should create a folder `image.jpg.drawbot`. In that folder there are a number of files:
- `image.gc`: contains the final GCode coordinates
- `final.svg` / `final.png`: contains the final image after simplification and transforming
- `animation.gif`: contains the animation showing the drawing process
- `potrace.svg`: shows the untransformed SVG after skeleton
- `skeleton*`: shows the skeleton transformations from the image (if `--centerline` was added)
- `thresholded.png`: shows how the image looks after initial thresholding
## Notes
### Creating text with imagemagick
(Keep less <= 16 characters)
```bash
convert -size 2000x1125 xc:white white.png
convert white.png -fill black -pointsize 100 -gravity northwest -annotate +50+50 "Some cool message\non the left side\n\n:)\n" -annotate +1050+300 "Some cool message\non the right side" test.png
python3 img2gcode.py --simplify 5 --threshold 80 --file test.png --animate --centerline
python3 img2gcode.py --autotrace --file test.png --animate --threshold 80 --simplify 1
```
Using autotrace:
```bash
convert -size 2000x1125 xc:white white.png
convert white.png -fill black -pointsize 100 -gravity northwest -annotate +50+50 "Some cool message\non the left side\n\n:)\n" -annotate +1050+300 "Some cool message\non the right side" test.png
convert test.png -rotate 90 test2.tga
autotrace -output-file test2.svg --output-format svg --centerline test2.tga
cat test2.svg | grep "svg\|000000\|xml" > test3.svg
python3 img2gcode.py --autotrace --file test3.svg
```
Using autotrace
```
convert c2.jpg -resize 2000x1125 -background White -gravity center -extent 2000x1125 -threshold 90% -rotate 90 test2.tga
autotrace -output-file test2.svg --output-format svg --centerline test2.tga
```
## License
MIT