Calculate SDF for image/bw-data/array
npm install bitmap-sdfjs
let calcSdf = requrie('bitmap-sdf')
//draw image
let canvas = document.body.appendChild(document.createElement('canvas'))
let w = canvas.width = 200, h = canvas.height = 200
let ctx = canvas.getContext('2d')
ctx.fillStyle = 'white'
ctx.font = 'bold 30px sans-serif'
ctx.fillText('X', 20, 20)
//calculate distances
let distances = calcSdf(canvas)
//show distances
let imgArr = new Uint8ClampedArray(wh4)
for (let i = 0; i < w; i++) {
for (let j = 0; j < h; j++) {
imgArr[jw4 + i4 + 0] = arr[jw+i]*255
imgArr[jw4 + i4 + 1] = arr[jw+i]*255
imgArr[jw4 + i4 + 2] = arr[jw+i]*255
imgArr[jw4 + i*4 + 3] = 255
}
}
var data = new ImageData(imgArr, w, h)
ctx.putImageData(data, 0, 0)
`
$3
Calculate distance field for the input source data, based on options. Returns 1-channel array with distance values from 0..1 range.
#### Source:
Type | Meaning
---|---
_Canvas_, _Context2D_ | Calculates sdf for the full canvas image data based on options.channel, by default 0, ie. red channel.
_ImageData_ | Calculates sdf for the image data based on options.channel
_Uint8ClampedArray_, _Uint8Array_ | Handles raw pixel data, requires options.width and options.height. Stride is detected from width and height.
_Float32Array_, _Array_ | Handles raw numbers from 0..1 range, requires options.width and options.height. Stride is detected from width and height.
#### Options:
Property | Default | Meaning
---|---|---
cutoff | 0.25 | Cutoff parameter, balance between SDF inside 1 and outside 0 of glyph
radius | 10 | Max length of SDF, ie. the size of SDF around the cutoff
width | canvas.width | Width of input data, if array
height | canvas.height | Height of input data, if array
channel | 0 | Channel number, 0 is red, 1 is green, 2 is blue, 3 is alpha.
stride | null | Explicitly indicate number of channels per pixel. Not needed if height and width` are provided.