mirror of
https://github.com/visioncortex/vtracer.git
synced 2026-08-30 17:05:57 -07:00
749f0df0bd
New nodejs/ package: a wasm-bindgen crate (vtracer-wasm) built with wasm-pack that wraps the vtracer framework, plus a thin JS layer for file I/O. Image decoding (png/jpeg/gif/bmp via the image crate) runs in wasm too, so the package has zero native dependencies — no sharp, no node-gyp. No separate general-purpose wasm crate: the Node package directly owns and wraps the wasm. Excluded from the cargo workspace (wasm-bindgen cdylib), built with wasm-pack. JS API (camelCase options): convertBuffer, convertPixels, convertFile, convertFileSync — each taking an Options object (preset, colorMode, hierarchical/cutout mosaic, mode, palette, maxColors, optimize, ...). Ships index.d.ts types and a node smoke test. README updated. Verified: builds to wasm32-unknown-unknown; `node test.js` passes; output matches the CLI/Python bindings (253 paths on the tank sample).
50 lines
1.5 KiB
JavaScript
50 lines
1.5 KiB
JavaScript
'use strict';
|
|
|
|
// Node package: image decoding + vectorization happen in wasm (no native
|
|
// dependency); this layer only adds file I/O and a camelCase API.
|
|
|
|
const fs = require('fs');
|
|
const fsp = require('fs/promises');
|
|
const wasm = require('./pkg/vtracer_wasm.js');
|
|
|
|
/**
|
|
* Vectorize an encoded image (PNG/JPEG/GIF/BMP) Buffer/Uint8Array to an SVG string.
|
|
* @param {Uint8Array} buffer
|
|
* @param {object} [options]
|
|
* @returns {string}
|
|
*/
|
|
function convertBuffer(buffer, options = {}) {
|
|
return wasm.vectorize_bytes(buffer, options);
|
|
}
|
|
|
|
/**
|
|
* Vectorize a raw RGBA8 buffer (width*height*4 bytes) to an SVG string.
|
|
* @param {Uint8Array} rgba
|
|
* @param {number} width
|
|
* @param {number} height
|
|
* @param {object} [options]
|
|
* @returns {string}
|
|
*/
|
|
function convertPixels(rgba, width, height, options = {}) {
|
|
return wasm.vectorize_rgba(rgba, width, height, options);
|
|
}
|
|
|
|
/**
|
|
* Read an image file, vectorize it, and write the SVG to disk.
|
|
* @returns {Promise<void>}
|
|
*/
|
|
async function convertFile(inputPath, outputPath, options = {}) {
|
|
const data = await fsp.readFile(inputPath);
|
|
const svg = wasm.vectorize_bytes(data, options);
|
|
await fsp.writeFile(outputPath, svg);
|
|
}
|
|
|
|
/** Synchronous {@link convertFile}. */
|
|
function convertFileSync(inputPath, outputPath, options = {}) {
|
|
const data = fs.readFileSync(inputPath);
|
|
const svg = wasm.vectorize_bytes(data, options);
|
|
fs.writeFileSync(outputPath, svg);
|
|
}
|
|
|
|
module.exports = { convertBuffer, convertPixels, convertFile, convertFileSync };
|