Skip to content

MaraniMatias/img2gcode

Repository files navigation

Image to GCode

Convert jpg, jpeg, png, gif to gcode with NodeJS.

  • Generate GCode with absolute coordinates, finds a black pixel if you follow the trail.
  • This version is faster previous versions.
  • Find the shortest path to the next black pixel.

img2gcode with CNC-ino

Installation

$ npm install img2gcode

Quick Start

Depending on the configuration between tool and image height generates better code.

var img2gcode = require("img2gcode");

img2gcode
  .start({
    // It is mm
    toolDiameter: 2,
    scaleAxes: 700,
    deepStep: -1,
    whiteZ: 0,
    blackZ: -2,
    safeZ: 2,
    dirImg: __dirname + '/img-and-gcode/test.jpeg'
  }).then((data) => {
    console.log(data.config);
    console.log(data.dirgcode);
  });

Options

  • toolDiameter (number) Tool diameter. default: 1
  • sensitivity (number) Intensity sensitivity. 0 to 1. default: 0.95
  • scaleAxes (number) Image height in mm. default: image.height equal mm
  • deepStep (number) Depth per pass. default: -1
  • invest { x: (boolean), y: (boolean) } default: {x: false, y: true}.
  • dirImg (string) Image path, accepts JPEG JPG PNG GIF formats.
  • whiteZ (number) White pixels. default: 0
  • blackZ (number) Maximum depth (Black pixels).
  • safeZ (number) Safe distance.
  • info (string) Displays information. ["none" | "console" | "emitter"] default: none
  • feedrate { work: (number), idle: (number) } Only the corresponding line is added. default: ''
  • laser { commandPowerOn: (string), commandPowerOff: (string) } Is you set this options, Z command is will be ignore

Events

Only if Options.info it is "emitter"

  • log Displays information.
  • tick Percentage of black pixels processed. 0 (0%) to 1 (100%).
  • error Displays error.
  • complete Emits at the end with "then".

Method

  • then This function is called to finish saving the file GCode and receives an object: { config , dirgcode }

Examples

var img2gcode = require("img2gcode");
var ProgressBar = require("progress"); // npm install progress
var bar = new ProgressBar("Analyze: [:bar] :percent :etas", { total: 100 });

img2gcode
  .start({
    // It is mm
    toolDiameter: 1,
    scaleAxes: 700,
    deepStep: -1,
    feedrate: { work: 1200, idle: 3000 },
    whiteZ: 0,
    blackZ: -2,
    safeZ: 1,
    info: "emitter", // "none" or "console" or "emitter"
    dirImg: __dirname + "/img-and-gcode/test.png",
  })
  .on("log", (str) => {
    console.log(str);
  })
  .on("tick", (perc) => {
    bar.update(perc);
  })
  .then((data) => {
    console.log(data.dirgcode);
  });

Config for laser options

const options = {
  // It is mm
  toolDiameter: 3,
  sensitivity: 0.9,
  scaleAxes: 128,
  feedrate: { work: 1200, idle: 3000 },
  deepStep: -1,
  laser: {
    commandPowerOn: "M04",
    commandPowerOff: "M05",
  },
  whiteZ: 0,
  blackZ: -3,
  safeZ: 1,
  info: "emitter",
  dirImg: path.normalize(__dirname + imgFile),
};

License.

I hope someone else will serve (MIT).

Author: Marani Matias Ezequiel.


Buy Me A Coffee ☕️

Bitcoin

1N7dWTf1JcvYG2QwviyjwYMw6qY5agx9Qm

Ethereum

0x555d4510b4b3db02d81be5114919e7c8c4156b77