vprsdf
Version:
Tools for creating signed distance fields from image data
56 lines (55 loc) • 2.25 kB
JavaScript
;
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;