UNPKG

vprsdf

Version:

Tools for creating signed distance fields from image data

56 lines (55 loc) 2.25 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSdf = exports.getDistances = exports.getFilled = void 0; var utils_1 = require("./utils"); var lib_1 = require("./lib"); var getFilled = function (imageData, params) { var filled = []; for (var i = 0; i < imageData.length; i += 4) { var r = imageData[i]; var g = imageData[i + 1]; var b = imageData[i + 2]; var a = imageData[i + 3]; var isFilled = (params === null || params === void 0 ? void 0 : params.alpha) ? a < ((params === null || params === void 0 ? void 0 : params.threshold) || 255 / 2) : (r + g + b) / 3 < ((params === null || params === void 0 ? void 0 : params.threshold) || 255 / 2); filled.push((params === null || params === void 0 ? void 0 : params.invert) ? !isFilled : isFilled); } return filled; }; exports.getFilled = getFilled; var getDistances = function (imageData, params) { var filled = (0, exports.getFilled)(imageData, params); return (0, lib_1.sdf)(filled, params.width); }; exports.getDistances = getDistances; var generateSdf = function (imageData, params) { var distances = (0, exports.getDistances)(imageData, params); var inMaxValue = 0; var inMinValue = Infinity; var outMaxValue = params.outMax || 255; var outMinValue = params.outMin || 0; var doNormalize = params.normalize || typeof params.normalize === "undefined"; if (doNormalize) { for (var _i = 0, distances_1 = distances; _i < distances_1.length; _i++) { var distance = distances_1[_i]; if (distance > inMaxValue) inMaxValue = distance; if (distance < inMinValue) inMinValue = distance; } } var newImageData = []; for (var i = 0; i < distances.length; i++) { var rawDistance = distances[i]; if (doNormalize) { var distance = (0, utils_1.remap)(rawDistance, inMinValue, inMaxValue, outMinValue, outMaxValue); newImageData.push(distance); } else { newImageData.push(rawDistance); } } return new Float32Array(newImageData); }; exports.generateSdf = generateSdf;