4aed8fb201cfb6e1ea69db270f40d6be.json
147 KB
{"ast":null,"code":"/*\r\n imagetracer.js version 1.2.4\r\n Simple raster image tracer and vectorizer written in JavaScript.\r\n andras@jankovics.net\r\n*/\n\n/*\r\n The Unlicense / PUBLIC DOMAIN\r\n This is free and unencumbered software released into the public domain.\r\n Anyone is free to copy, modify, publish, use, compile, sell, or\r\n distribute this software, either in source code form or as a compiled\r\n binary, for any purpose, commercial or non-commercial, and by any\r\n means.\r\n In jurisdictions that recognize copyright laws, the author or authors\r\n of this software dedicate any and all copyright interest in the\r\n software to the public domain. We make this dedication for the benefit\r\n of the public at large and to the detriment of our heirs and\r\n successors. We intend this dedication to be an overt act of\r\n relinquishment in perpetuity of all present and future rights to this\r\n software under copyright law.\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\r\n OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r\n ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\n OTHER DEALINGS IN THE SOFTWARE.\r\n For more information, please refer to http://unlicense.org/\r\n*/\nexport default class ImageTracer {\n static tracerDefaultOption() {\n return {\n pathomit: 100,\n ltres: 0.1,\n qtres: 1,\n scale: 1,\n strokewidth: 5,\n viewbox: false,\n linefilter: true,\n desc: false,\n rightangleenhance: false,\n pal: [{\n r: 0,\n g: 0,\n b: 0,\n a: 255\n }, {\n r: 255,\n g: 255,\n b: 255,\n a: 255\n }]\n };\n }\n /* eslint-disable */\n\n\n constructor() {\n this.versionnumber = '1.2.4';\n this.optionpresets = {\n default: {\n corsenabled: false,\n ltres: 1,\n qtres: 1,\n pathomit: 8,\n rightangleenhance: true,\n colorsampling: 2,\n numberofcolors: 16,\n mincolorratio: 0,\n colorquantcycles: 3,\n layering: 0,\n strokewidth: 1,\n linefilter: false,\n scale: 1,\n roundcoords: 1,\n viewbox: false,\n desc: false,\n lcpr: 0,\n qcpr: 0,\n blurradius: 0,\n blurdelta: 20\n },\n posterized1: {\n colorsampling: 0,\n numberofcolors: 2\n },\n posterized2: {\n numberofcolors: 4,\n blurradius: 5\n },\n curvy: {\n ltres: 0.01,\n linefilter: true,\n rightangleenhance: false\n },\n sharp: {\n qtres: 0.01,\n linefilter: false\n },\n detailed: {\n pathomit: 0,\n roundcoords: 2,\n ltres: 0.5,\n qtres: 0.5,\n numberofcolors: 64\n },\n smoothed: {\n blurradius: 5,\n blurdelta: 64\n },\n grayscale: {\n colorsampling: 0,\n colorquantcycles: 1,\n numberofcolors: 7\n },\n fixedpalette: {\n colorsampling: 0,\n colorquantcycles: 1,\n numberofcolors: 27\n },\n randomsampling1: {\n colorsampling: 1,\n numberofcolors: 8\n },\n randomsampling2: {\n colorsampling: 1,\n numberofcolors: 64\n },\n artistic1: {\n colorsampling: 0,\n colorquantcycles: 1,\n pathomit: 0,\n blurradius: 5,\n blurdelta: 64,\n ltres: 0.01,\n linefilter: true,\n numberofcolors: 16,\n strokewidth: 2\n },\n artistic2: {\n qtres: 0.01,\n colorsampling: 0,\n colorquantcycles: 1,\n numberofcolors: 4,\n strokewidth: 0\n },\n artistic3: {\n qtres: 10,\n ltres: 10,\n numberofcolors: 8\n },\n artistic4: {\n qtres: 10,\n ltres: 10,\n numberofcolors: 64,\n blurradius: 5,\n blurdelta: 256,\n strokewidth: 2\n },\n posterized3: {\n ltres: 1,\n qtres: 1,\n pathomit: 20,\n rightangleenhance: true,\n colorsampling: 0,\n numberofcolors: 3,\n mincolorratio: 0,\n colorquantcycles: 3,\n blurradius: 3,\n blurdelta: 20,\n strokewidth: 0,\n linefilter: false,\n roundcoords: 1,\n pal: [{\n r: 0,\n g: 0,\n b: 100,\n a: 255\n }, {\n r: 255,\n g: 255,\n b: 255,\n a: 255\n }]\n }\n };\n this.pathscan_combined_lookup = [[[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]], [[0, 1, 0, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [0, 2, -1, 0]], [[-1, -1, -1, -1], [-1, -1, -1, -1], [0, 1, 0, -1], [0, 0, 1, 0]], [[0, 0, 1, 0], [-1, -1, -1, -1], [0, 2, -1, 0], [-1, -1, -1, -1]], [[-1, -1, -1, -1], [0, 0, 1, 0], [0, 3, 0, 1], [-1, -1, -1, -1]], [[13, 3, 0, 1], [13, 2, -1, 0], [7, 1, 0, -1], [7, 0, 1, 0]], [[-1, -1, -1, -1], [0, 1, 0, -1], [-1, -1, -1, -1], [0, 3, 0, 1]], [[0, 3, 0, 1], [0, 2, -1, 0], [-1, -1, -1, -1], [-1, -1, -1, -1]], [[0, 3, 0, 1], [0, 2, -1, 0], [-1, -1, -1, -1], [-1, -1, -1, -1]], [[-1, -1, -1, -1], [0, 1, 0, -1], [-1, -1, -1, -1], [0, 3, 0, 1]], [[11, 1, 0, -1], [14, 0, 1, 0], [14, 3, 0, 1], [11, 2, -1, 0]], [[-1, -1, -1, -1], [0, 0, 1, 0], [0, 3, 0, 1], [-1, -1, -1, -1]], [[0, 0, 1, 0], [-1, -1, -1, -1], [0, 2, -1, 0], [-1, -1, -1, -1]], [[-1, -1, -1, -1], [-1, -1, -1, -1], [0, 1, 0, -1], [0, 0, 1, 0]], [[0, 1, 0, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [0, 2, -1, 0]], [[-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1], [-1, -1, -1, -1]]];\n this.gks = [[0.27901, 0.44198, 0.27901], [0.135336, 0.228569, 0.272192, 0.228569, 0.135336], [0.086776, 0.136394, 0.178908, 0.195843, 0.178908, 0.136394, 0.086776], [0.063327, 0.093095, 0.122589, 0.144599, 0.152781, 0.144599, 0.122589, 0.093095, 0.063327], [0.049692, 0.069304, 0.089767, 0.107988, 0.120651, 0.125194, 0.120651, 0.107988, 0.089767, 0.069304, 0.049692]];\n this.specpalette = [{\n r: 0,\n g: 0,\n b: 0,\n a: 255\n }, {\n r: 128,\n g: 128,\n b: 128,\n a: 255\n }, {\n r: 0,\n g: 0,\n b: 128,\n a: 255\n }, {\n r: 64,\n g: 64,\n b: 128,\n a: 255\n }, {\n r: 192,\n g: 192,\n b: 192,\n a: 255\n }, {\n r: 255,\n g: 255,\n b: 255,\n a: 255\n }, {\n r: 128,\n g: 128,\n b: 192,\n a: 255\n }, {\n r: 0,\n g: 0,\n b: 192,\n a: 255\n }, {\n r: 128,\n g: 0,\n b: 0,\n a: 255\n }, {\n r: 128,\n g: 64,\n b: 64,\n a: 255\n }, {\n r: 128,\n g: 0,\n b: 128,\n a: 255\n }, {\n r: 168,\n g: 168,\n b: 168,\n a: 255\n }, {\n r: 192,\n g: 128,\n b: 128,\n a: 255\n }, {\n r: 192,\n g: 0,\n b: 0,\n a: 255\n }, {\n r: 255,\n g: 255,\n b: 255,\n a: 255\n }, {\n r: 0,\n g: 128,\n b: 0,\n a: 255\n }];\n }\n\n imageToSVG(url, callback, options) {\n options = this.checkoptions(options);\n this.loadImage(url, canvas => {\n callback(this.imagedataToSVG(this.getImgdata(canvas), options));\n }, options);\n }\n\n imagedataToSVG(imgd, options) {\n options = this.checkoptions(options);\n const td = this.imagedataToTracedata(imgd, options);\n return this.getsvgstring(td, options);\n }\n\n imageToTracedata(url, callback, options) {\n options = this.checkoptions(options);\n this.loadImage(url, canvas => {\n callback(this.imagedataToTracedata(this.getImgdata(canvas), options));\n }, options);\n }\n\n imagedataToTracedata(imgd, options) {\n options = this.checkoptions(options);\n const ii = this.colorquantization(imgd, options);\n let tracedata;\n\n if (options.layering === 0) {\n tracedata = {\n layers: [],\n palette: ii.palette,\n width: ii.array[0].length - 2,\n height: ii.array.length - 2\n };\n\n for (let colornum = 0; colornum < ii.palette.length; colornum += 1) {\n const tracedlayer = this.batchtracepaths(this.internodes(this.pathscan(this.layeringstep(ii, colornum), options.pathomit), options), options.ltres, options.qtres);\n tracedata.layers.push(tracedlayer);\n }\n } else {\n const ls = this.layering(ii);\n\n if (options.layercontainerid) {\n this.drawLayers(ls, this.specpalette, options.scale, options.layercontainerid);\n }\n\n const bps = this.batchpathscan(ls, options.pathomit);\n const bis = this.batchinternodes(bps, options);\n tracedata = {\n layers: this.batchtracelayers(bis, options.ltres, options.qtres),\n palette: ii.palette,\n width: imgd.width,\n height: imgd.height\n };\n }\n\n return tracedata;\n }\n\n checkoptions(options) {\n options = options || {};\n\n if (typeof options === 'string') {\n options = options.toLowerCase();\n\n if (this.optionpresets[options]) {\n options = this.optionpresets[options];\n } else {\n options = {};\n }\n }\n\n const ok = Object.keys(this.optionpresets['default']);\n\n for (let k = 0; k < ok.length; k += 1) {\n if (!options.hasOwnProperty(ok[k])) {\n options[ok[k]] = this.optionpresets['default'][ok[k]];\n }\n }\n\n return options;\n }\n\n colorquantization(imgd, options) {\n const arr = [];\n let idx = 0;\n let cd;\n let cdl;\n let ci;\n const paletteacc = [];\n const pixelnum = imgd.width * imgd.height;\n let i;\n let j;\n let k;\n let cnt;\n let palette;\n\n for (j = 0; j < imgd.height + 2; j += 1) {\n arr[j] = [];\n\n for (i = 0; i < imgd.width + 2; i += 1) {\n arr[j][i] = -1;\n }\n }\n\n if (options.pal) {\n palette = options.pal;\n } else if (options.colorsampling === 0) {\n palette = this.generatepalette(options.numberofcolors);\n } else if (options.colorsampling === 1) {\n palette = this.samplepalette(options.numberofcolors, imgd);\n } else {\n palette = this.samplepalette2(options.numberofcolors, imgd);\n }\n\n if (options.blurradius > 0) {\n imgd = this.blur(imgd, options.blurradius, options.blurdelta);\n }\n\n for (cnt = 0; cnt < options.colorquantcycles; cnt += 1) {\n if (cnt > 0) {\n for (k = 0; k < palette.length; k += 1) {\n if (paletteacc[k].n > 0) {\n palette[k] = {\n r: Math.floor(paletteacc[k].r / paletteacc[k].n),\n g: Math.floor(paletteacc[k].g / paletteacc[k].n),\n b: Math.floor(paletteacc[k].b / paletteacc[k].n),\n a: Math.floor(paletteacc[k].a / paletteacc[k].n)\n };\n }\n\n if (paletteacc[k].n / pixelnum < options.mincolorratio && cnt < options.colorquantcycles - 1) {\n palette[k] = {\n r: Math.floor(Math.random() * 255),\n g: Math.floor(Math.random() * 255),\n b: Math.floor(Math.random() * 255),\n a: Math.floor(Math.random() * 255)\n };\n }\n }\n }\n\n for (i = 0; i < palette.length; i += 1) {\n paletteacc[i] = {\n r: 0,\n g: 0,\n b: 0,\n a: 0,\n n: 0\n };\n }\n\n for (j = 0; j < imgd.height; j += 1) {\n for (i = 0; i < imgd.width; i += 1) {\n idx = (j * imgd.width + i) * 4;\n ci = 0;\n cdl = 1024;\n\n for (k = 0; k < palette.length; k += 1) {\n cd = Math.abs(palette[k].r - imgd.data[idx]) + Math.abs(palette[k].g - imgd.data[idx + 1]) + Math.abs(palette[k].b - imgd.data[idx + 2]) + Math.abs(palette[k].a - imgd.data[idx + 3]);\n\n if (cd < cdl) {\n cdl = cd;\n ci = k;\n }\n }\n\n paletteacc[ci].r += imgd.data[idx];\n paletteacc[ci].g += imgd.data[idx + 1];\n paletteacc[ci].b += imgd.data[idx + 2];\n paletteacc[ci].a += imgd.data[idx + 3];\n paletteacc[ci].n += 1;\n arr[j + 1][i + 1] = ci;\n }\n }\n }\n\n return {\n array: arr,\n palette\n };\n }\n\n samplepalette(numberofcolors, imgd) {\n let idx;\n const palette = [];\n\n for (let i = 0; i < numberofcolors; i += 1) {\n idx = Math.floor(Math.random() * imgd.data.length / 4) * 4;\n palette.push({\n r: imgd.data[idx],\n g: imgd.data[idx + 1],\n b: imgd.data[idx + 2],\n a: imgd.data[idx + 3]\n });\n }\n\n return palette;\n }\n\n samplepalette2(numberofcolors, imgd) {\n let idx;\n const palette = [];\n const ni = Math.ceil(Math.sqrt(numberofcolors));\n const nj = Math.ceil(numberofcolors / ni);\n const vx = imgd.width / (ni + 1);\n const vy = imgd.height / (nj + 1);\n\n for (let j = 0; j < nj; j += 1) {\n for (let i = 0; i < ni; i += 1) {\n if (palette.length === numberofcolors) {\n break;\n } else {\n idx = Math.floor((j + 1) * vy * imgd.width + (i + 1) * vx) * 4;\n palette.push({\n r: imgd.data[idx],\n g: imgd.data[idx + 1],\n b: imgd.data[idx + 2],\n a: imgd.data[idx + 3]\n });\n }\n }\n }\n\n return palette;\n }\n\n generatepalette(numberofcolors) {\n const palette = [];\n let rcnt;\n let gcnt;\n let bcnt;\n\n if (numberofcolors < 8) {\n const graystep = Math.floor(255 / (numberofcolors - 1));\n\n for (let i = 0; i < numberofcolors; i += 1) {\n palette.push({\n r: i * graystep,\n g: i * graystep,\n b: i * graystep,\n a: 255\n });\n }\n } else {\n const colorqnum = Math.floor(Math.pow(numberofcolors, 1 / 3));\n const colorstep = Math.floor(255 / (colorqnum - 1));\n const rndnum = numberofcolors - colorqnum * colorqnum * colorqnum;\n\n for (rcnt = 0; rcnt < colorqnum; rcnt += 1) {\n for (gcnt = 0; gcnt < colorqnum; gcnt += 1) {\n for (bcnt = 0; bcnt < colorqnum; bcnt += 1) {\n palette.push({\n r: rcnt * colorstep,\n g: gcnt * colorstep,\n b: bcnt * colorstep,\n a: 255\n });\n }\n }\n }\n\n for (rcnt = 0; rcnt < rndnum; rcnt += 1) {\n palette.push({\n r: Math.floor(Math.random() * 255),\n g: Math.floor(Math.random() * 255),\n b: Math.floor(Math.random() * 255),\n a: Math.floor(Math.random() * 255)\n });\n }\n }\n\n return palette;\n }\n\n layering(ii) {\n const layers = [];\n let val = 0;\n const ah = ii.array.length;\n const aw = ii.array[0].length;\n let n1;\n let n2;\n let n3;\n let n4;\n let n5;\n let n6;\n let n7;\n let n8;\n let i;\n let j;\n let k;\n\n for (k = 0; k < ii.palette.length; k += 1) {\n layers[k] = [];\n\n for (j = 0; j < ah; j += 1) {\n layers[k][j] = [];\n\n for (i = 0; i < aw; i += 1) {\n layers[k][j][i] = 0;\n }\n }\n }\n\n for (j = 1; j < ah - 1; j += 1) {\n for (i = 1; i < aw - 1; i += 1) {\n val = ii.array[j][i];\n n1 = ii.array[j - 1][i - 1] === val ? 1 : 0;\n n2 = ii.array[j - 1][i] === val ? 1 : 0;\n n3 = ii.array[j - 1][i + 1] === val ? 1 : 0;\n n4 = ii.array[j][i - 1] === val ? 1 : 0;\n n5 = ii.array[j][i + 1] === val ? 1 : 0;\n n6 = ii.array[j + 1][i - 1] === val ? 1 : 0;\n n7 = ii.array[j + 1][i] === val ? 1 : 0;\n n8 = ii.array[j + 1][i + 1] === val ? 1 : 0;\n layers[val][j + 1][i + 1] = 1 + n5 * 2 + n8 * 4 + n7 * 8;\n\n if (!n4) {\n layers[val][j + 1][i] = 0 + 2 + n7 * 4 + n6 * 8;\n }\n\n if (!n2) {\n layers[val][j][i + 1] = 0 + n3 * 2 + n5 * 4 + 8;\n }\n\n if (!n1) {\n layers[val][j][i] = 0 + n2 * 2 + 4 + n4 * 8;\n }\n }\n }\n\n return layers;\n }\n\n layeringstep(ii, cnum) {\n const layer = [];\n const ah = ii.array.length;\n const aw = ii.array[0].length;\n let i;\n let j;\n\n for (j = 0; j < ah; j += 1) {\n layer[j] = [];\n\n for (i = 0; i < aw; i += 1) {\n layer[j][i] = 0;\n }\n }\n\n for (j = 1; j < ah; j += 1) {\n for (i = 1; i < aw; i += 1) {\n layer[j][i] = (ii.array[j - 1][i - 1] === cnum ? 1 : 0) + (ii.array[j - 1][i] === cnum ? 2 : 0) + (ii.array[j][i - 1] === cnum ? 8 : 0) + (ii.array[j][i] === cnum ? 4 : 0);\n }\n }\n\n return layer;\n }\n\n pathscan(arr, pathomit) {\n const paths = [];\n let pacnt = 0;\n let pcnt = 0;\n let px = 0;\n let py = 0;\n const w = arr[0].length;\n const h = arr.length;\n let dir = 0;\n let pathfinished = true;\n let holepath = false;\n let lookuprow;\n\n for (let j = 0; j < h; j += 1) {\n for (let i = 0; i < w; i += 1) {\n if (arr[j][i] === 4 || arr[j][i] === 11) {\n px = i;\n py = j;\n paths[pacnt] = {};\n paths[pacnt].points = [];\n paths[pacnt].boundingbox = [px, py, px, py];\n paths[pacnt].holechildren = [];\n pathfinished = false;\n pcnt = 0;\n holepath = arr[j][i] === 11;\n dir = 1;\n\n while (!pathfinished) {\n paths[pacnt].points[pcnt] = {};\n paths[pacnt].points[pcnt].x = px - 1;\n paths[pacnt].points[pcnt].y = py - 1;\n paths[pacnt].points[pcnt].t = arr[py][px];\n\n if (px - 1 < paths[pacnt].boundingbox[0]) {\n paths[pacnt].boundingbox[0] = px - 1;\n }\n\n if (px - 1 > paths[pacnt].boundingbox[2]) {\n paths[pacnt].boundingbox[2] = px - 1;\n }\n\n if (py - 1 < paths[pacnt].boundingbox[1]) {\n paths[pacnt].boundingbox[1] = py - 1;\n }\n\n if (py - 1 > paths[pacnt].boundingbox[3]) {\n paths[pacnt].boundingbox[3] = py - 1;\n }\n\n lookuprow = this.pathscan_combined_lookup[arr[py][px]][dir];\n arr[py][px] = lookuprow[0];\n dir = lookuprow[1];\n px += lookuprow[2];\n py += lookuprow[3];\n\n if (px - 1 === paths[pacnt].points[0].x && py - 1 === paths[pacnt].points[0].y) {\n pathfinished = true;\n\n if (paths[pacnt].points.length < pathomit) {\n paths.pop();\n } else {\n paths[pacnt].isholepath = !!holepath;\n\n if (holepath) {\n let parentidx = 0,\n parentbbox = [-1, -1, w + 1, h + 1];\n\n for (let parentcnt = 0; parentcnt < pacnt; parentcnt++) {\n if (!paths[parentcnt].isholepath && this.boundingboxincludes(paths[parentcnt].boundingbox, paths[pacnt].boundingbox) && this.boundingboxincludes(parentbbox, paths[parentcnt].boundingbox)) {\n parentidx = parentcnt;\n parentbbox = paths[parentcnt].boundingbox;\n }\n }\n\n paths[parentidx].holechildren.push(pacnt);\n }\n\n pacnt += 1;\n }\n }\n\n pcnt += 1;\n }\n }\n }\n }\n\n return paths;\n }\n\n boundingboxincludes(parentbbox, childbbox) {\n return parentbbox[0] < childbbox[0] && parentbbox[1] < childbbox[1] && parentbbox[2] > childbbox[2] && parentbbox[3] > childbbox[3];\n }\n\n batchpathscan(layers, pathomit) {\n const bpaths = [];\n\n for (const k in layers) {\n if (!layers.hasOwnProperty(k)) {\n continue;\n }\n\n bpaths[k] = this.pathscan(layers[k], pathomit);\n }\n\n return bpaths;\n }\n\n internodes(paths, options) {\n const ins = [];\n let palen = 0;\n let nextidx = 0;\n let nextidx2 = 0;\n let previdx = 0;\n let previdx2 = 0;\n let pacnt;\n let pcnt;\n\n for (pacnt = 0; pacnt < paths.length; pacnt += 1) {\n ins[pacnt] = {};\n ins[pacnt].points = [];\n ins[pacnt].boundingbox = paths[pacnt].boundingbox;\n ins[pacnt].holechildren = paths[pacnt].holechildren;\n ins[pacnt].isholepath = paths[pacnt].isholepath;\n palen = paths[pacnt].points.length;\n\n for (pcnt = 0; pcnt < palen; pcnt += 1) {\n nextidx = (pcnt + 1) % palen;\n nextidx2 = (pcnt + 2) % palen;\n previdx = (pcnt - 1 + palen) % palen;\n previdx2 = (pcnt - 2 + palen) % palen;\n\n if (options.rightangleenhance && this.testrightangle(paths[pacnt], previdx2, previdx, pcnt, nextidx, nextidx2)) {\n if (ins[pacnt].points.length > 0) {\n ins[pacnt].points[ins[pacnt].points.length - 1].linesegment = this.getdirection(ins[pacnt].points[ins[pacnt].points.length - 1].x, ins[pacnt].points[ins[pacnt].points.length - 1].y, paths[pacnt].points[pcnt].x, paths[pacnt].points[pcnt].y);\n }\n\n ins[pacnt].points.push({\n x: paths[pacnt].points[pcnt].x,\n y: paths[pacnt].points[pcnt].y,\n linesegment: this.getdirection(paths[pacnt].points[pcnt].x, paths[pacnt].points[pcnt].y, (paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x) / 2, (paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y) / 2)\n });\n }\n\n ins[pacnt].points.push({\n x: (paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x) / 2,\n y: (paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y) / 2,\n linesegment: this.getdirection((paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x) / 2, (paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y) / 2, (paths[pacnt].points[nextidx].x + paths[pacnt].points[nextidx2].x) / 2, (paths[pacnt].points[nextidx].y + paths[pacnt].points[nextidx2].y) / 2)\n });\n }\n }\n\n return ins;\n }\n\n testrightangle(path, idx1, idx2, idx3, idx4, idx5) {\n return path.points[idx3].x === path.points[idx1].x && path.points[idx3].x === path.points[idx2].x && path.points[idx3].y === path.points[idx4].y && path.points[idx3].y === path.points[idx5].y || path.points[idx3].y === path.points[idx1].y && path.points[idx3].y === path.points[idx2].y && path.points[idx3].x === path.points[idx4].x && path.points[idx3].x === path.points[idx5].x;\n }\n\n getdirection(x1, y1, x2, y2) {\n let val = 8;\n\n if (x1 < x2) {\n if (y1 < y2) {\n val = 1;\n } else if (y1 > y2) {\n val = 7;\n } else {\n val = 0;\n }\n } else if (x1 > x2) {\n if (y1 < y2) {\n val = 3;\n } else if (y1 > y2) {\n val = 5;\n } else {\n val = 4;\n }\n } else if (y1 < y2) {\n val = 2;\n } else if (y1 > y2) {\n val = 6;\n } else {\n val = 8;\n }\n\n return val;\n }\n\n batchinternodes(bpaths, options) {\n const binternodes = [];\n\n for (const k in bpaths) {\n if (!bpaths.hasOwnProperty(k)) {\n continue;\n }\n\n binternodes[k] = this.internodes(bpaths[k], options);\n }\n\n return binternodes;\n }\n\n tracepath(path, ltres, qtres) {\n let pcnt = 0;\n let segtype1;\n let segtype2;\n let seqend;\n const smp = {};\n smp.segments = [];\n smp.boundingbox = path.boundingbox;\n smp.holechildren = path.holechildren;\n smp.isholepath = path.isholepath;\n\n while (pcnt < path.points.length) {\n segtype1 = path.points[pcnt].linesegment;\n segtype2 = -1;\n seqend = pcnt + 1;\n\n while ((path.points[seqend].linesegment === segtype1 || path.points[seqend].linesegment === segtype2 || segtype2 === -1) && seqend < path.points.length - 1) {\n if (path.points[seqend].linesegment !== segtype1 && segtype2 === -1) {\n segtype2 = path.points[seqend].linesegment;\n }\n\n seqend += 1;\n }\n\n if (seqend === path.points.length - 1) {\n seqend = 0;\n }\n\n smp.segments = smp.segments.concat(this.fitseq(path, ltres, qtres, pcnt, seqend));\n\n if (seqend > 0) {\n pcnt = seqend;\n } else {\n pcnt = path.points.length;\n }\n }\n\n return smp;\n }\n\n fitseq(path, ltres, qtres, seqstart, seqend) {\n if (seqend > path.points.length || seqend < 0) {\n return [];\n }\n\n let errorpoint = seqstart,\n errorval = 0,\n curvepass = true,\n px,\n py,\n dist2;\n let tl = seqend - seqstart;\n\n if (tl < 0) {\n tl += path.points.length;\n }\n\n let vx = (path.points[seqend].x - path.points[seqstart].x) / tl,\n vy = (path.points[seqend].y - path.points[seqstart].y) / tl;\n let pcnt = (seqstart + 1) % path.points.length,\n pl;\n\n while (pcnt != seqend) {\n pl = pcnt - seqstart;\n\n if (pl < 0) {\n pl += path.points.length;\n }\n\n px = path.points[seqstart].x + vx * pl;\n py = path.points[seqstart].y + vy * pl;\n dist2 = (path.points[pcnt].x - px) * (path.points[pcnt].x - px) + (path.points[pcnt].y - py) * (path.points[pcnt].y - py);\n\n if (dist2 > ltres) {\n curvepass = false;\n }\n\n if (dist2 > errorval) {\n errorpoint = pcnt;\n errorval = dist2;\n }\n\n pcnt = (pcnt + 1) % path.points.length;\n }\n\n if (curvepass) {\n return [{\n type: 'L',\n x1: path.points[seqstart].x,\n y1: path.points[seqstart].y,\n x2: path.points[seqend].x,\n y2: path.points[seqend].y\n }];\n }\n\n const fitpoint = errorpoint;\n curvepass = true;\n errorval = 0;\n let t = (fitpoint - seqstart) / tl,\n t1 = (1 - t) * (1 - t),\n t2 = 2 * (1 - t) * t,\n t3 = t * t;\n let cpx = (t1 * path.points[seqstart].x + t3 * path.points[seqend].x - path.points[fitpoint].x) / -t2,\n cpy = (t1 * path.points[seqstart].y + t3 * path.points[seqend].y - path.points[fitpoint].y) / -t2;\n pcnt = seqstart + 1;\n\n while (pcnt != seqend) {\n t = (pcnt - seqstart) / tl;\n t1 = (1 - t) * (1 - t);\n t2 = 2 * (1 - t) * t;\n t3 = t * t;\n px = t1 * path.points[seqstart].x + t2 * cpx + t3 * path.points[seqend].x;\n py = t1 * path.points[seqstart].y + t2 * cpy + t3 * path.points[seqend].y;\n dist2 = (path.points[pcnt].x - px) * (path.points[pcnt].x - px) + (path.points[pcnt].y - py) * (path.points[pcnt].y - py);\n\n if (dist2 > qtres) {\n curvepass = false;\n }\n\n if (dist2 > errorval) {\n errorpoint = pcnt;\n errorval = dist2;\n }\n\n pcnt = (pcnt + 1) % path.points.length;\n }\n\n if (curvepass) {\n return [{\n type: 'Q',\n x1: path.points[seqstart].x,\n y1: path.points[seqstart].y,\n x2: cpx,\n y2: cpy,\n x3: path.points[seqend].x,\n y3: path.points[seqend].y\n }];\n }\n\n const splitpoint = fitpoint;\n return this.fitseq(path, ltres, qtres, seqstart, splitpoint).concat(this.fitseq(path, ltres, qtres, splitpoint, seqend));\n }\n\n batchtracepaths(internodepaths, ltres, qtres) {\n const btracedpaths = [];\n\n for (const k in internodepaths) {\n if (!internodepaths.hasOwnProperty(k)) {\n continue;\n }\n\n btracedpaths.push(this.tracepath(internodepaths[k], ltres, qtres));\n }\n\n return btracedpaths;\n }\n\n batchtracelayers(binternodes, ltres, qtres) {\n const btbis = [];\n\n for (const k in binternodes) {\n if (!binternodes.hasOwnProperty(k)) {\n continue;\n }\n\n btbis[k] = this.batchtracepaths(binternodes[k], ltres, qtres);\n }\n\n return btbis;\n }\n\n roundtodec(val, places) {\n return Number(val.toFixed(places));\n }\n\n svgpathstring(tracedata, lnum, pathnum, options) {\n let layer = tracedata.layers[lnum],\n smp = layer[pathnum],\n str = '',\n pcnt;\n\n if (options.linefilter && smp.segments.length < 3) {\n return str;\n }\n\n str = `<path ${options.desc ? `desc=\"l ${lnum} p ${pathnum}\" ` : ''}${this.tosvgcolorstr(tracedata.palette[lnum], options)}d=\"`;\n\n if (options.roundcoords === -1) {\n str += `M ${smp.segments[0].x1 * options.scale} ${smp.segments[0].y1 * options.scale} `;\n\n for (pcnt = 0; pcnt < smp.segments.length; pcnt++) {\n str += `${smp.segments[pcnt].type} ${smp.segments[pcnt].x2 * options.scale} ${smp.segments[pcnt].y2 * options.scale} `;\n\n if (smp.segments[pcnt].hasOwnProperty('x3')) {\n str += `${smp.segments[pcnt].x3 * options.scale} ${smp.segments[pcnt].y3 * options.scale} `;\n }\n }\n\n str += 'Z ';\n } else {\n str += `M ${this.roundtodec(smp.segments[0].x1 * options.scale, options.roundcoords)} ${this.roundtodec(smp.segments[0].y1 * options.scale, options.roundcoords)} `;\n\n for (pcnt = 0; pcnt < smp.segments.length; pcnt++) {\n str += `${smp.segments[pcnt].type} ${this.roundtodec(smp.segments[pcnt].x2 * options.scale, options.roundcoords)} ${this.roundtodec(smp.segments[pcnt].y2 * options.scale, options.roundcoords)} `;\n\n if (smp.segments[pcnt].hasOwnProperty('x3')) {\n str += `${this.roundtodec(smp.segments[pcnt].x3 * options.scale, options.roundcoords)} ${this.roundtodec(smp.segments[pcnt].y3 * options.scale, options.roundcoords)} `;\n }\n }\n\n str += 'Z ';\n }\n\n for (var hcnt = 0; hcnt < smp.holechildren.length; hcnt++) {\n var hsmp = layer[smp.holechildren[hcnt]];\n\n if (options.roundcoords === -1) {\n if (hsmp.segments[hsmp.segments.length - 1].hasOwnProperty('x3')) {\n str += `M ${hsmp.segments[hsmp.segments.length - 1].x3 * options.scale} ${hsmp.segments[hsmp.segments.length - 1].y3 * options.scale} `;\n } else {\n str += `M ${hsmp.segments[hsmp.segments.length - 1].x2 * options.scale} ${hsmp.segments[hsmp.segments.length - 1].y2 * options.scale} `;\n }\n\n for (pcnt = hsmp.segments.length - 1; pcnt >= 0; pcnt--) {\n str += `${hsmp.segments[pcnt].type} `;\n\n if (hsmp.segments[pcnt].hasOwnProperty('x3')) {\n str += `${hsmp.segments[pcnt].x2 * options.scale} ${hsmp.segments[pcnt].y2 * options.scale} `;\n }\n\n str += `${hsmp.segments[pcnt].x1 * options.scale} ${hsmp.segments[pcnt].y1 * options.scale} `;\n }\n } else {\n if (hsmp.segments[hsmp.segments.length - 1].hasOwnProperty('x3')) {\n str += `M ${this.roundtodec(hsmp.segments[hsmp.segments.length - 1].x3 * options.scale)} ${this.roundtodec(hsmp.segments[hsmp.segments.length - 1].y3 * options.scale)} `;\n } else {\n str += `M ${this.roundtodec(hsmp.segments[hsmp.segments.length - 1].x2 * options.scale)} ${this.roundtodec(hsmp.segments[hsmp.segments.length - 1].y2 * options.scale)} `;\n }\n\n for (pcnt = hsmp.segments.length - 1; pcnt >= 0; pcnt--) {\n str += `${hsmp.segments[pcnt].type} `;\n\n if (hsmp.segments[pcnt].hasOwnProperty('x3')) {\n str += `${this.roundtodec(hsmp.segments[pcnt].x2 * options.scale)} ${this.roundtodec(hsmp.segments[pcnt].y2 * options.scale)} `;\n }\n\n str += `${this.roundtodec(hsmp.segments[pcnt].x1 * options.scale)} ${this.roundtodec(hsmp.segments[pcnt].y1 * options.scale)} `;\n }\n }\n\n str += 'Z ';\n }\n\n str += '\" />';\n\n if (options.lcpr || options.qcpr) {\n for (pcnt = 0; pcnt < smp.segments.length; pcnt++) {\n if (smp.segments[pcnt].hasOwnProperty('x3') && options.qcpr) {\n str += `<circle cx=\"${smp.segments[pcnt].x2 * options.scale}\" cy=\"${smp.segments[pcnt].y2 * options.scale}\" r=\"${options.qcpr}\" fill=\"cyan\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"black\" />`;\n str += `<circle cx=\"${smp.segments[pcnt].x3 * options.scale}\" cy=\"${smp.segments[pcnt].y3 * options.scale}\" r=\"${options.qcpr}\" fill=\"white\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"black\" />`;\n str += `<line x1=\"${smp.segments[pcnt].x1 * options.scale}\" y1=\"${smp.segments[pcnt].y1 * options.scale}\" x2=\"${smp.segments[pcnt].x2 * options.scale}\" y2=\"${smp.segments[pcnt].y2 * options.scale}\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\n str += `<line x1=\"${smp.segments[pcnt].x2 * options.scale}\" y1=\"${smp.segments[pcnt].y2 * options.scale}\" x2=\"${smp.segments[pcnt].x3 * options.scale}\" y2=\"${smp.segments[pcnt].y3 * options.scale}\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\n }\n\n if (!smp.segments[pcnt].hasOwnProperty('x3') && options.lcpr) {\n str += `<circle cx=\"${smp.segments[pcnt].x2 * options.scale}\" cy=\"${smp.segments[pcnt].y2 * options.scale}\" r=\"${options.lcpr}\" fill=\"white\" stroke-width=\"${options.lcpr * 0.2}\" stroke=\"black\" />`;\n }\n }\n\n for (var hcnt = 0; hcnt < smp.holechildren.length; hcnt++) {\n var hsmp = layer[smp.holechildren[hcnt]];\n\n for (pcnt = 0; pcnt < hsmp.segments.length; pcnt++) {\n if (hsmp.segments[pcnt].hasOwnProperty('x3') && options.qcpr) {\n str += `<circle cx=\"${hsmp.segments[pcnt].x2 * options.scale}\" cy=\"${hsmp.segments[pcnt].y2 * options.scale}\" r=\"${options.qcpr}\" fill=\"cyan\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"black\" />`;\n str += `<circle cx=\"${hsmp.segments[pcnt].x3 * options.scale}\" cy=\"${hsmp.segments[pcnt].y3 * options.scale}\" r=\"${options.qcpr}\" fill=\"white\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"black\" />`;\n str += `<line x1=\"${hsmp.segments[pcnt].x1 * options.scale}\" y1=\"${hsmp.segments[pcnt].y1 * options.scale}\" x2=\"${hsmp.segments[pcnt].x2 * options.scale}\" y2=\"${hsmp.segments[pcnt].y2 * options.scale}\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\n str += `<line x1=\"${hsmp.segments[pcnt].x2 * options.scale}\" y1=\"${hsmp.segments[pcnt].y2 * options.scale}\" x2=\"${hsmp.segments[pcnt].x3 * options.scale}\" y2=\"${hsmp.segments[pcnt].y3 * options.scale}\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\n }\n\n if (!hsmp.segments[pcnt].hasOwnProperty('x3') && options.lcpr) {\n str += `<circle cx=\"${hsmp.segments[pcnt].x2 * options.scale}\" cy=\"${hsmp.segments[pcnt].y2 * options.scale}\" r=\"${options.lcpr}\" fill=\"white\" stroke-width=\"${options.lcpr * 0.2}\" stroke=\"black\" />`;\n }\n }\n }\n }\n\n return str;\n }\n\n getsvgstring(tracedata, options) {\n options = this.checkoptions(options);\n const w = tracedata.width * options.scale;\n const h = tracedata.height * options.scale;\n let svgstr = `<svg ${options.viewbox ? `viewBox=\"0 0 ${w} ${h}\" ` : `width=\"${w}\" height=\"${h}\" `}version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" desc=\"Created with imagetracer.js version ${this.versionnumber}\" >`;\n\n for (let lcnt = 0; lcnt < tracedata.layers.length; lcnt += 1) {\n for (let pcnt = 0; pcnt < tracedata.layers[lcnt].length; pcnt += 1) {\n if (!tracedata.layers[lcnt][pcnt].isholepath) {\n svgstr += this.svgpathstring(tracedata, lcnt, pcnt, options);\n }\n }\n }\n\n svgstr += '</svg>';\n return svgstr;\n }\n\n compareNumbers(a, b) {\n return a - b;\n }\n\n torgbastr(c) {\n return `rgba(${c.r},${c.g},${c.b},${c.a})`;\n }\n\n tosvgcolorstr(c, options) {\n return `fill=\"rgb(${c.r},${c.g},${c.b})\" stroke=\"rgb(${c.r},${c.g},${c.b})\" stroke-width=\"${options.strokewidth}\" opacity=\"${c.a / 255.0}\" `;\n }\n\n appendSVGString(svgstr, parentid) {\n let div;\n\n if (parentid) {\n div = document.getElementById(parentid);\n\n if (!div) {\n div = document.createElement('div');\n div.id = parentid;\n document.body.appendChild(div);\n }\n } else {\n div = document.createElement('div');\n document.body.appendChild(div);\n }\n\n div.innerHTML += svgstr;\n }\n\n blur(imgd, radius, delta) {\n let i, j, k, d, idx, racc, gacc, bacc, aacc, wacc;\n const imgd2 = {\n width: imgd.width,\n height: imgd.height,\n data: []\n };\n radius = Math.floor(radius);\n\n if (radius < 1) {\n return imgd;\n }\n\n if (radius > 5) {\n radius = 5;\n }\n\n delta = Math.abs(delta);\n\n if (delta > 1024) {\n delta = 1024;\n }\n\n const thisgk = this.gks[radius - 1];\n\n for (j = 0; j < imgd.height; j++) {\n for (i = 0; i < imgd.width; i++) {\n racc = 0;\n gacc = 0;\n bacc = 0;\n aacc = 0;\n wacc = 0;\n\n for (k = -radius; k < radius + 1; k++) {\n if (i + k > 0 && i + k < imgd.width) {\n idx = (j * imgd.width + i + k) * 4;\n racc += imgd.data[idx] * thisgk[k + radius];\n gacc += imgd.data[idx + 1] * thisgk[k + radius];\n bacc += imgd.data[idx + 2] * thisgk[k + radius];\n aacc += imgd.data[idx + 3] * thisgk[k + radius];\n wacc += thisgk[k + radius];\n }\n }\n\n idx = (j * imgd.width + i) * 4;\n imgd2.data[idx] = Math.floor(racc / wacc);\n imgd2.data[idx + 1] = Math.floor(gacc / wacc);\n imgd2.data[idx + 2] = Math.floor(bacc / wacc);\n imgd2.data[idx + 3] = Math.floor(aacc / wacc);\n }\n }\n\n const himgd = new Uint8ClampedArray(imgd2.data);\n\n for (j = 0; j < imgd.height; j++) {\n for (i = 0; i < imgd.width; i++) {\n racc = 0;\n gacc = 0;\n bacc = 0;\n aacc = 0;\n wacc = 0;\n\n for (k = -radius; k < radius + 1; k++) {\n if (j + k > 0 && j + k < imgd.height) {\n idx = ((j + k) * imgd.width + i) * 4;\n racc += himgd[idx] * thisgk[k + radius];\n gacc += himgd[idx + 1] * thisgk[k + radius];\n bacc += himgd[idx + 2] * thisgk[k + radius];\n aacc += himgd[idx + 3] * thisgk[k + radius];\n wacc += thisgk[k + radius];\n }\n }\n\n idx = (j * imgd.width + i) * 4;\n imgd2.data[idx] = Math.floor(racc / wacc);\n imgd2.data[idx + 1] = Math.floor(gacc / wacc);\n imgd2.data[idx + 2] = Math.floor(bacc / wacc);\n imgd2.data[idx + 3] = Math.floor(aacc / wacc);\n }\n }\n\n for (j = 0; j < imgd.height; j++) {\n for (i = 0; i < imgd.width; i++) {\n idx = (j * imgd.width + i) * 4;\n d = Math.abs(imgd2.data[idx] - imgd.data[idx]) + Math.abs(imgd2.data[idx + 1] - imgd.data[idx + 1]) + Math.abs(imgd2.data[idx + 2] - imgd.data[idx + 2]) + Math.abs(imgd2.data[idx + 3] - imgd.data[idx + 3]);\n\n if (d > delta) {\n imgd2.data[idx] = imgd.data[idx];\n imgd2.data[idx + 1] = imgd.data[idx + 1];\n imgd2.data[idx + 2] = imgd.data[idx + 2];\n imgd2.data[idx + 3] = imgd.data[idx + 3];\n }\n }\n }\n\n return imgd2;\n }\n\n loadImage(url, callback, options) {\n const img = new Image();\n\n if (options && options.corsenabled) {\n img.crossOrigin = 'Anonymous';\n }\n\n img.src = url;\n\n img.onload = function () {\n const canvas = document.createElement('canvas');\n canvas.width = img.width;\n canvas.height = img.height;\n const context = canvas.getContext('2d');\n context.drawImage(img, 0, 0);\n callback(canvas);\n };\n }\n\n getImgdata(canvas) {\n const context = canvas.getContext('2d');\n return context.getImageData(0, 0, canvas.width, canvas.height);\n }\n\n drawLayers(layers, palette, scale, parentid) {\n scale = scale || 1;\n let w, h, i, j, k;\n let div;\n\n if (parentid) {\n div = document.getElementById(parentid);\n\n if (!div) {\n div = document.createElement('div');\n div.id = parentid;\n document.body.appendChild(div);\n }\n } else {\n div = document.createElement('div');\n document.body.appendChild(div);\n }\n\n for (k in layers) {\n if (!layers.hasOwnProperty(k)) {\n continue;\n }\n\n w = layers[k][0].length;\n h = layers[k].length;\n const canvas = document.createElement('canvas');\n canvas.width = w * scale;\n canvas.height = h * scale;\n const context = canvas.getContext('2d');\n\n for (j = 0; j < h; j += 1) {\n for (i = 0; i < w; i += 1) {\n context.fillStyle = this.torgbastr(palette[layers[k][j][i] % palette.length]);\n context.fillRect(i * scale, j * scale, scale, scale);\n }\n }\n\n div.appendChild(canvas);\n }\n }\n\n}","map":{"version":3,"sources":["C:/Users/kkwan_000/Desktop/git/2017110269/minsung/src/js/helper/imagetracer.js"],"names":["ImageTracer","tracerDefaultOption","pathomit","ltres","qtres","scale","strokewidth","viewbox","linefilter","desc","rightangleenhance","pal","r","g","b","a","constructor","versionnumber","optionpresets","default","corsenabled","colorsampling","numberofcolors","mincolorratio","colorquantcycles","layering","roundcoords","lcpr","qcpr","blurradius","blurdelta","posterized1","posterized2","curvy","sharp","detailed","smoothed","grayscale","fixedpalette","randomsampling1","randomsampling2","artistic1","artistic2","artistic3","artistic4","posterized3","pathscan_combined_lookup","gks","specpalette","imageToSVG","url","callback","options","checkoptions","loadImage","canvas","imagedataToSVG","getImgdata","imgd","td","imagedataToTracedata","getsvgstring","imageToTracedata","ii","colorquantization","tracedata","layers","palette","width","array","length","height","colornum","tracedlayer","batchtracepaths","internodes","pathscan","layeringstep","push","ls","layercontainerid","drawLayers","bps","batchpathscan","bis","batchinternodes","batchtracelayers","toLowerCase","ok","Object","keys","k","hasOwnProperty","arr","idx","cd","cdl","ci","paletteacc","pixelnum","i","j","cnt","generatepalette","samplepalette","samplepalette2","blur","n","Math","floor","random","abs","data","ni","ceil","sqrt","nj","vx","vy","rcnt","gcnt","bcnt","graystep","colorqnum","pow","colorstep","rndnum","val","ah","aw","n1","n2","n3","n4","n5","n6","n7","n8","cnum","layer","paths","pacnt","pcnt","px","py","w","h","dir","pathfinished","holepath","lookuprow","points","boundingbox","holechildren","x","y","t","pop","isholepath","parentidx","parentbbox","parentcnt","boundingboxincludes","childbbox","bpaths","ins","palen","nextidx","nextidx2","previdx","previdx2","testrightangle","linesegment","getdirection","path","idx1","idx2","idx3","idx4","idx5","x1","y1","x2","y2","binternodes","tracepath","segtype1","segtype2","seqend","smp","segments","concat","fitseq","seqstart","errorpoint","errorval","curvepass","dist2","tl","pl","type","fitpoint","t1","t2","t3","cpx","cpy","x3","y3","splitpoint","internodepaths","btracedpaths","btbis","roundtodec","places","Number","toFixed","svgpathstring","lnum","pathnum","str","tosvgcolorstr","hcnt","hsmp","svgstr","lcnt","compareNumbers","torgbastr","c","appendSVGString","parentid","div","document","getElementById","createElement","id","body","appendChild","innerHTML","radius","delta","d","racc","gacc","bacc","aacc","wacc","imgd2","thisgk","himgd","Uint8ClampedArray","img","Image","crossOrigin","src","onload","context","getContext","drawImage","getImageData","fillStyle","fillRect"],"mappings":"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","sourcesContent":["/*\r\n imagetracer.js version 1.2.4\r\n Simple raster image tracer and vectorizer written in JavaScript.\r\n andras@jankovics.net\r\n*/\r\n\r\n/*\r\n The Unlicense / PUBLIC DOMAIN\r\n This is free and unencumbered software released into the public domain.\r\n Anyone is free to copy, modify, publish, use, compile, sell, or\r\n distribute this software, either in source code form or as a compiled\r\n binary, for any purpose, commercial or non-commercial, and by any\r\n means.\r\n In jurisdictions that recognize copyright laws, the author or authors\r\n of this software dedicate any and all copyright interest in the\r\n software to the public domain. We make this dedication for the benefit\r\n of the public at large and to the detriment of our heirs and\r\n successors. We intend this dedication to be an overt act of\r\n relinquishment in perpetuity of all present and future rights to this\r\n software under copyright law.\r\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\r\n EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r\n MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.\r\n IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR\r\n OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,\r\n ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR\r\n OTHER DEALINGS IN THE SOFTWARE.\r\n For more information, please refer to http://unlicense.org/\r\n*/\r\nexport default class ImageTracer {\r\n static tracerDefaultOption() {\r\n return {\r\n pathomit: 100,\r\n ltres: 0.1,\r\n qtres: 1,\r\n\r\n scale: 1,\r\n strokewidth: 5,\r\n viewbox: false,\r\n linefilter: true,\r\n desc: false,\r\n rightangleenhance: false,\r\n pal: [\r\n {\r\n r: 0,\r\n g: 0,\r\n b: 0,\r\n a: 255,\r\n },\r\n {\r\n r: 255,\r\n g: 255,\r\n b: 255,\r\n a: 255,\r\n },\r\n ],\r\n };\r\n }\r\n /* eslint-disable */\r\n constructor() {\r\n this.versionnumber = '1.2.4';\r\n this.optionpresets = {\r\n default: {\r\n corsenabled: false,\r\n ltres: 1,\r\n qtres: 1,\r\n pathomit: 8,\r\n rightangleenhance: true,\r\n colorsampling: 2,\r\n numberofcolors: 16,\r\n mincolorratio: 0,\r\n colorquantcycles: 3,\r\n layering: 0,\r\n strokewidth: 1,\r\n linefilter: false,\r\n scale: 1,\r\n roundcoords: 1,\r\n viewbox: false,\r\n desc: false,\r\n lcpr: 0,\r\n qcpr: 0,\r\n blurradius: 0,\r\n blurdelta: 20,\r\n },\r\n posterized1: {\r\n colorsampling: 0,\r\n numberofcolors: 2,\r\n },\r\n posterized2: {\r\n numberofcolors: 4,\r\n blurradius: 5,\r\n },\r\n curvy: {\r\n ltres: 0.01,\r\n linefilter: true,\r\n rightangleenhance: false,\r\n },\r\n sharp: { qtres: 0.01, linefilter: false },\r\n detailed: { pathomit: 0, roundcoords: 2, ltres: 0.5, qtres: 0.5, numberofcolors: 64 },\r\n smoothed: { blurradius: 5, blurdelta: 64 },\r\n grayscale: { colorsampling: 0, colorquantcycles: 1, numberofcolors: 7 },\r\n fixedpalette: { colorsampling: 0, colorquantcycles: 1, numberofcolors: 27 },\r\n randomsampling1: { colorsampling: 1, numberofcolors: 8 },\r\n randomsampling2: { colorsampling: 1, numberofcolors: 64 },\r\n artistic1: {\r\n colorsampling: 0,\r\n colorquantcycles: 1,\r\n pathomit: 0,\r\n blurradius: 5,\r\n blurdelta: 64,\r\n ltres: 0.01,\r\n linefilter: true,\r\n numberofcolors: 16,\r\n strokewidth: 2,\r\n },\r\n artistic2: {\r\n qtres: 0.01,\r\n colorsampling: 0,\r\n colorquantcycles: 1,\r\n numberofcolors: 4,\r\n strokewidth: 0,\r\n },\r\n artistic3: { qtres: 10, ltres: 10, numberofcolors: 8 },\r\n artistic4: {\r\n qtres: 10,\r\n ltres: 10,\r\n numberofcolors: 64,\r\n blurradius: 5,\r\n blurdelta: 256,\r\n strokewidth: 2,\r\n },\r\n posterized3: {\r\n ltres: 1,\r\n qtres: 1,\r\n pathomit: 20,\r\n rightangleenhance: true,\r\n colorsampling: 0,\r\n numberofcolors: 3,\r\n mincolorratio: 0,\r\n colorquantcycles: 3,\r\n blurradius: 3,\r\n blurdelta: 20,\r\n strokewidth: 0,\r\n linefilter: false,\r\n roundcoords: 1,\r\n pal: [\r\n { r: 0, g: 0, b: 100, a: 255 },\r\n { r: 255, g: 255, b: 255, a: 255 },\r\n ],\r\n },\r\n };\r\n\r\n this.pathscan_combined_lookup = [\r\n [\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [0, 1, 0, -1],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [0, 2, -1, 0],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [0, 1, 0, -1],\r\n [0, 0, 1, 0],\r\n ],\r\n [\r\n [0, 0, 1, 0],\r\n [-1, -1, -1, -1],\r\n [0, 2, -1, 0],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [0, 0, 1, 0],\r\n [0, 3, 0, 1],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [13, 3, 0, 1],\r\n [13, 2, -1, 0],\r\n [7, 1, 0, -1],\r\n [7, 0, 1, 0],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [0, 1, 0, -1],\r\n [-1, -1, -1, -1],\r\n [0, 3, 0, 1],\r\n ],\r\n [\r\n [0, 3, 0, 1],\r\n [0, 2, -1, 0],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [0, 3, 0, 1],\r\n [0, 2, -1, 0],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [0, 1, 0, -1],\r\n [-1, -1, -1, -1],\r\n [0, 3, 0, 1],\r\n ],\r\n [\r\n [11, 1, 0, -1],\r\n [14, 0, 1, 0],\r\n [14, 3, 0, 1],\r\n [11, 2, -1, 0],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [0, 0, 1, 0],\r\n [0, 3, 0, 1],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [0, 0, 1, 0],\r\n [-1, -1, -1, -1],\r\n [0, 2, -1, 0],\r\n [-1, -1, -1, -1],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [0, 1, 0, -1],\r\n [0, 0, 1, 0],\r\n ],\r\n [\r\n [0, 1, 0, -1],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [0, 2, -1, 0],\r\n ],\r\n [\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n [-1, -1, -1, -1],\r\n ],\r\n ];\r\n\r\n this.gks = [\r\n [0.27901, 0.44198, 0.27901],\r\n [0.135336, 0.228569, 0.272192, 0.228569, 0.135336],\r\n [0.086776, 0.136394, 0.178908, 0.195843, 0.178908, 0.136394, 0.086776],\r\n [0.063327, 0.093095, 0.122589, 0.144599, 0.152781, 0.144599, 0.122589, 0.093095, 0.063327],\r\n [\r\n 0.049692,\r\n 0.069304,\r\n 0.089767,\r\n 0.107988,\r\n 0.120651,\r\n 0.125194,\r\n 0.120651,\r\n 0.107988,\r\n 0.089767,\r\n 0.069304,\r\n 0.049692,\r\n ],\r\n ];\r\n\r\n this.specpalette = [\r\n { r: 0, g: 0, b: 0, a: 255 },\r\n { r: 128, g: 128, b: 128, a: 255 },\r\n { r: 0, g: 0, b: 128, a: 255 },\r\n { r: 64, g: 64, b: 128, a: 255 },\r\n { r: 192, g: 192, b: 192, a: 255 },\r\n { r: 255, g: 255, b: 255, a: 255 },\r\n { r: 128, g: 128, b: 192, a: 255 },\r\n { r: 0, g: 0, b: 192, a: 255 },\r\n { r: 128, g: 0, b: 0, a: 255 },\r\n { r: 128, g: 64, b: 64, a: 255 },\r\n { r: 128, g: 0, b: 128, a: 255 },\r\n { r: 168, g: 168, b: 168, a: 255 },\r\n { r: 192, g: 128, b: 128, a: 255 },\r\n { r: 192, g: 0, b: 0, a: 255 },\r\n { r: 255, g: 255, b: 255, a: 255 },\r\n { r: 0, g: 128, b: 0, a: 255 },\r\n ];\r\n }\r\n\r\n imageToSVG(url, callback, options) {\r\n options = this.checkoptions(options);\r\n this.loadImage(\r\n url,\r\n (canvas) => {\r\n callback(this.imagedataToSVG(this.getImgdata(canvas), options));\r\n },\r\n options\r\n );\r\n }\r\n\r\n imagedataToSVG(imgd, options) {\r\n options = this.checkoptions(options);\r\n const td = this.imagedataToTracedata(imgd, options);\r\n\r\n return this.getsvgstring(td, options);\r\n }\r\n\r\n imageToTracedata(url, callback, options) {\r\n options = this.checkoptions(options);\r\n this.loadImage(\r\n url,\r\n (canvas) => {\r\n callback(this.imagedataToTracedata(this.getImgdata(canvas), options));\r\n },\r\n options\r\n );\r\n }\r\n\r\n imagedataToTracedata(imgd, options) {\r\n options = this.checkoptions(options);\r\n const ii = this.colorquantization(imgd, options);\r\n let tracedata;\r\n if (options.layering === 0) {\r\n tracedata = {\r\n layers: [],\r\n palette: ii.palette,\r\n width: ii.array[0].length - 2,\r\n height: ii.array.length - 2,\r\n };\r\n\r\n for (let colornum = 0; colornum < ii.palette.length; colornum += 1) {\r\n const tracedlayer = this.batchtracepaths(\r\n this.internodes(\r\n this.pathscan(this.layeringstep(ii, colornum), options.pathomit),\r\n options\r\n ),\r\n options.ltres,\r\n options.qtres\r\n );\r\n tracedata.layers.push(tracedlayer);\r\n }\r\n } else {\r\n const ls = this.layering(ii);\r\n if (options.layercontainerid) {\r\n this.drawLayers(ls, this.specpalette, options.scale, options.layercontainerid);\r\n }\r\n const bps = this.batchpathscan(ls, options.pathomit);\r\n const bis = this.batchinternodes(bps, options);\r\n tracedata = {\r\n layers: this.batchtracelayers(bis, options.ltres, options.qtres),\r\n palette: ii.palette,\r\n width: imgd.width,\r\n height: imgd.height,\r\n };\r\n }\r\n\r\n return tracedata;\r\n }\r\n\r\n checkoptions(options) {\r\n options = options || {};\r\n if (typeof options === 'string') {\r\n options = options.toLowerCase();\r\n if (this.optionpresets[options]) {\r\n options = this.optionpresets[options];\r\n } else {\r\n options = {};\r\n }\r\n }\r\n const ok = Object.keys(this.optionpresets['default']);\r\n for (let k = 0; k < ok.length; k += 1) {\r\n if (!options.hasOwnProperty(ok[k])) {\r\n options[ok[k]] = this.optionpresets['default'][ok[k]];\r\n }\r\n }\r\n\r\n return options;\r\n }\r\n\r\n colorquantization(imgd, options) {\r\n const arr = [];\r\n let idx = 0;\r\n let cd;\r\n let cdl;\r\n let ci;\r\n const paletteacc = [];\r\n const pixelnum = imgd.width * imgd.height;\r\n let i;\r\n let j;\r\n let k;\r\n let cnt;\r\n let palette;\r\n\r\n for (j = 0; j < imgd.height + 2; j += 1) {\r\n arr[j] = [];\r\n for (i = 0; i < imgd.width + 2; i += 1) {\r\n arr[j][i] = -1;\r\n }\r\n }\r\n if (options.pal) {\r\n palette = options.pal;\r\n } else if (options.colorsampling === 0) {\r\n palette = this.generatepalette(options.numberofcolors);\r\n } else if (options.colorsampling === 1) {\r\n palette = this.samplepalette(options.numberofcolors, imgd);\r\n } else {\r\n palette = this.samplepalette2(options.numberofcolors, imgd);\r\n }\r\n if (options.blurradius > 0) {\r\n imgd = this.blur(imgd, options.blurradius, options.blurdelta);\r\n }\r\n for (cnt = 0; cnt < options.colorquantcycles; cnt += 1) {\r\n if (cnt > 0) {\r\n for (k = 0; k < palette.length; k += 1) {\r\n if (paletteacc[k].n > 0) {\r\n palette[k] = {\r\n r: Math.floor(paletteacc[k].r / paletteacc[k].n),\r\n g: Math.floor(paletteacc[k].g / paletteacc[k].n),\r\n b: Math.floor(paletteacc[k].b / paletteacc[k].n),\r\n a: Math.floor(paletteacc[k].a / paletteacc[k].n),\r\n };\r\n }\r\n\r\n if (\r\n paletteacc[k].n / pixelnum < options.mincolorratio &&\r\n cnt < options.colorquantcycles - 1\r\n ) {\r\n palette[k] = {\r\n r: Math.floor(Math.random() * 255),\r\n g: Math.floor(Math.random() * 255),\r\n b: Math.floor(Math.random() * 255),\r\n a: Math.floor(Math.random() * 255),\r\n };\r\n }\r\n }\r\n }\r\n\r\n for (i = 0; i < palette.length; i += 1) {\r\n paletteacc[i] = { r: 0, g: 0, b: 0, a: 0, n: 0 };\r\n }\r\n\r\n for (j = 0; j < imgd.height; j += 1) {\r\n for (i = 0; i < imgd.width; i += 1) {\r\n idx = (j * imgd.width + i) * 4;\r\n\r\n ci = 0;\r\n cdl = 1024;\r\n for (k = 0; k < palette.length; k += 1) {\r\n cd =\r\n Math.abs(palette[k].r - imgd.data[idx]) +\r\n Math.abs(palette[k].g - imgd.data[idx + 1]) +\r\n Math.abs(palette[k].b - imgd.data[idx + 2]) +\r\n Math.abs(palette[k].a - imgd.data[idx + 3]);\r\n\r\n if (cd < cdl) {\r\n cdl = cd;\r\n ci = k;\r\n }\r\n }\r\n\r\n paletteacc[ci].r += imgd.data[idx];\r\n paletteacc[ci].g += imgd.data[idx + 1];\r\n paletteacc[ci].b += imgd.data[idx + 2];\r\n paletteacc[ci].a += imgd.data[idx + 3];\r\n paletteacc[ci].n += 1;\r\n\r\n arr[j + 1][i + 1] = ci;\r\n }\r\n }\r\n }\r\n\r\n return { array: arr, palette };\r\n }\r\n\r\n samplepalette(numberofcolors, imgd) {\r\n let idx;\r\n const palette = [];\r\n for (let i = 0; i < numberofcolors; i += 1) {\r\n idx = Math.floor((Math.random() * imgd.data.length) / 4) * 4;\r\n palette.push({\r\n r: imgd.data[idx],\r\n g: imgd.data[idx + 1],\r\n b: imgd.data[idx + 2],\r\n a: imgd.data[idx + 3],\r\n });\r\n }\r\n\r\n return palette;\r\n }\r\n\r\n samplepalette2(numberofcolors, imgd) {\r\n let idx;\r\n const palette = [];\r\n const ni = Math.ceil(Math.sqrt(numberofcolors));\r\n const nj = Math.ceil(numberofcolors / ni);\r\n const vx = imgd.width / (ni + 1);\r\n const vy = imgd.height / (nj + 1);\r\n for (let j = 0; j < nj; j += 1) {\r\n for (let i = 0; i < ni; i += 1) {\r\n if (palette.length === numberofcolors) {\r\n break;\r\n } else {\r\n idx = Math.floor((j + 1) * vy * imgd.width + (i + 1) * vx) * 4;\r\n palette.push({\r\n r: imgd.data[idx],\r\n g: imgd.data[idx + 1],\r\n b: imgd.data[idx + 2],\r\n a: imgd.data[idx + 3],\r\n });\r\n }\r\n }\r\n }\r\n\r\n return palette;\r\n }\r\n\r\n generatepalette(numberofcolors) {\r\n const palette = [];\r\n let rcnt;\r\n let gcnt;\r\n let bcnt;\r\n if (numberofcolors < 8) {\r\n const graystep = Math.floor(255 / (numberofcolors - 1));\r\n for (let i = 0; i < numberofcolors; i += 1) {\r\n palette.push({ r: i * graystep, g: i * graystep, b: i * graystep, a: 255 });\r\n }\r\n } else {\r\n const colorqnum = Math.floor(Math.pow(numberofcolors, 1 / 3));\r\n const colorstep = Math.floor(255 / (colorqnum - 1));\r\n const rndnum = numberofcolors - colorqnum * colorqnum * colorqnum;\r\n for (rcnt = 0; rcnt < colorqnum; rcnt += 1) {\r\n for (gcnt = 0; gcnt < colorqnum; gcnt += 1) {\r\n for (bcnt = 0; bcnt < colorqnum; bcnt += 1) {\r\n palette.push({ r: rcnt * colorstep, g: gcnt * colorstep, b: bcnt * colorstep, a: 255 });\r\n }\r\n }\r\n }\r\n for (rcnt = 0; rcnt < rndnum; rcnt += 1) {\r\n palette.push({\r\n r: Math.floor(Math.random() * 255),\r\n g: Math.floor(Math.random() * 255),\r\n b: Math.floor(Math.random() * 255),\r\n a: Math.floor(Math.random() * 255),\r\n });\r\n }\r\n }\r\n\r\n return palette;\r\n }\r\n\r\n layering(ii) {\r\n const layers = [];\r\n let val = 0;\r\n const ah = ii.array.length;\r\n const aw = ii.array[0].length;\r\n let n1;\r\n let n2;\r\n let n3;\r\n let n4;\r\n let n5;\r\n let n6;\r\n let n7;\r\n let n8;\r\n let i;\r\n let j;\r\n let k;\r\n for (k = 0; k < ii.palette.length; k += 1) {\r\n layers[k] = [];\r\n for (j = 0; j < ah; j += 1) {\r\n layers[k][j] = [];\r\n for (i = 0; i < aw; i += 1) {\r\n layers[k][j][i] = 0;\r\n }\r\n }\r\n }\r\n for (j = 1; j < ah - 1; j += 1) {\r\n for (i = 1; i < aw - 1; i += 1) {\r\n val = ii.array[j][i];\r\n\r\n n1 = ii.array[j - 1][i - 1] === val ? 1 : 0;\r\n n2 = ii.array[j - 1][i] === val ? 1 : 0;\r\n n3 = ii.array[j - 1][i + 1] === val ? 1 : 0;\r\n n4 = ii.array[j][i - 1] === val ? 1 : 0;\r\n n5 = ii.array[j][i + 1] === val ? 1 : 0;\r\n n6 = ii.array[j + 1][i - 1] === val ? 1 : 0;\r\n n7 = ii.array[j + 1][i] === val ? 1 : 0;\r\n n8 = ii.array[j + 1][i + 1] === val ? 1 : 0;\r\n\r\n layers[val][j + 1][i + 1] = 1 + n5 * 2 + n8 * 4 + n7 * 8;\r\n if (!n4) {\r\n layers[val][j + 1][i] = 0 + 2 + n7 * 4 + n6 * 8;\r\n }\r\n if (!n2) {\r\n layers[val][j][i + 1] = 0 + n3 * 2 + n5 * 4 + 8;\r\n }\r\n if (!n1) {\r\n layers[val][j][i] = 0 + n2 * 2 + 4 + n4 * 8;\r\n }\r\n }\r\n }\r\n\r\n return layers;\r\n }\r\n\r\n layeringstep(ii, cnum) {\r\n const layer = [];\r\n const ah = ii.array.length;\r\n const aw = ii.array[0].length;\r\n let i;\r\n let j;\r\n for (j = 0; j < ah; j += 1) {\r\n layer[j] = [];\r\n for (i = 0; i < aw; i += 1) {\r\n layer[j][i] = 0;\r\n }\r\n }\r\n for (j = 1; j < ah; j += 1) {\r\n for (i = 1; i < aw; i += 1) {\r\n layer[j][i] =\r\n (ii.array[j - 1][i - 1] === cnum ? 1 : 0) +\r\n (ii.array[j - 1][i] === cnum ? 2 : 0) +\r\n (ii.array[j][i - 1] === cnum ? 8 : 0) +\r\n (ii.array[j][i] === cnum ? 4 : 0);\r\n }\r\n }\r\n\r\n return layer;\r\n }\r\n\r\n pathscan(arr, pathomit) {\r\n const paths = [];\r\n let pacnt = 0;\r\n let pcnt = 0;\r\n let px = 0;\r\n let py = 0;\r\n const w = arr[0].length;\r\n const h = arr.length;\r\n let dir = 0;\r\n let pathfinished = true;\r\n let holepath = false;\r\n let lookuprow;\r\n for (let j = 0; j < h; j += 1) {\r\n for (let i = 0; i < w; i += 1) {\r\n if (arr[j][i] === 4 || arr[j][i] === 11) {\r\n px = i;\r\n py = j;\r\n paths[pacnt] = {};\r\n paths[pacnt].points = [];\r\n paths[pacnt].boundingbox = [px, py, px, py];\r\n paths[pacnt].holechildren = [];\r\n pathfinished = false;\r\n pcnt = 0;\r\n holepath = arr[j][i] === 11;\r\n dir = 1;\r\n\r\n while (!pathfinished) {\r\n paths[pacnt].points[pcnt] = {};\r\n paths[pacnt].points[pcnt].x = px - 1;\r\n paths[pacnt].points[pcnt].y = py - 1;\r\n paths[pacnt].points[pcnt].t = arr[py][px];\r\n\r\n if (px - 1 < paths[pacnt].boundingbox[0]) {\r\n paths[pacnt].boundingbox[0] = px - 1;\r\n }\r\n if (px - 1 > paths[pacnt].boundingbox[2]) {\r\n paths[pacnt].boundingbox[2] = px - 1;\r\n }\r\n if (py - 1 < paths[pacnt].boundingbox[1]) {\r\n paths[pacnt].boundingbox[1] = py - 1;\r\n }\r\n if (py - 1 > paths[pacnt].boundingbox[3]) {\r\n paths[pacnt].boundingbox[3] = py - 1;\r\n }\r\n\r\n lookuprow = this.pathscan_combined_lookup[arr[py][px]][dir];\r\n arr[py][px] = lookuprow[0];\r\n dir = lookuprow[1];\r\n px += lookuprow[2];\r\n py += lookuprow[3];\r\n\r\n if (px - 1 === paths[pacnt].points[0].x && py - 1 === paths[pacnt].points[0].y) {\r\n pathfinished = true;\r\n\r\n if (paths[pacnt].points.length < pathomit) {\r\n paths.pop();\r\n } else {\r\n paths[pacnt].isholepath = !!holepath;\r\n\r\n if (holepath) {\r\n let parentidx = 0,\r\n parentbbox = [-1, -1, w + 1, h + 1];\r\n for (let parentcnt = 0; parentcnt < pacnt; parentcnt++) {\r\n if (\r\n !paths[parentcnt].isholepath &&\r\n this.boundingboxincludes(\r\n paths[parentcnt].boundingbox,\r\n paths[pacnt].boundingbox\r\n ) &&\r\n this.boundingboxincludes(parentbbox, paths[parentcnt].boundingbox)\r\n ) {\r\n parentidx = parentcnt;\r\n parentbbox = paths[parentcnt].boundingbox;\r\n }\r\n }\r\n paths[parentidx].holechildren.push(pacnt);\r\n }\r\n pacnt += 1;\r\n }\r\n }\r\n pcnt += 1;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return paths;\r\n }\r\n\r\n boundingboxincludes(parentbbox, childbbox) {\r\n return (\r\n parentbbox[0] < childbbox[0] &&\r\n parentbbox[1] < childbbox[1] &&\r\n parentbbox[2] > childbbox[2] &&\r\n parentbbox[3] > childbbox[3]\r\n );\r\n }\r\n\r\n batchpathscan(layers, pathomit) {\r\n const bpaths = [];\r\n for (const k in layers) {\r\n if (!layers.hasOwnProperty(k)) {\r\n continue;\r\n }\r\n bpaths[k] = this.pathscan(layers[k], pathomit);\r\n }\r\n\r\n return bpaths;\r\n }\r\n\r\n internodes(paths, options) {\r\n const ins = [];\r\n let palen = 0;\r\n let nextidx = 0;\r\n let nextidx2 = 0;\r\n let previdx = 0;\r\n let previdx2 = 0;\r\n let pacnt;\r\n let pcnt;\r\n for (pacnt = 0; pacnt < paths.length; pacnt += 1) {\r\n ins[pacnt] = {};\r\n ins[pacnt].points = [];\r\n ins[pacnt].boundingbox = paths[pacnt].boundingbox;\r\n ins[pacnt].holechildren = paths[pacnt].holechildren;\r\n ins[pacnt].isholepath = paths[pacnt].isholepath;\r\n palen = paths[pacnt].points.length;\r\n\r\n for (pcnt = 0; pcnt < palen; pcnt += 1) {\r\n nextidx = (pcnt + 1) % palen;\r\n nextidx2 = (pcnt + 2) % palen;\r\n previdx = (pcnt - 1 + palen) % palen;\r\n previdx2 = (pcnt - 2 + palen) % palen;\r\n\r\n if (\r\n options.rightangleenhance &&\r\n this.testrightangle(paths[pacnt], previdx2, previdx, pcnt, nextidx, nextidx2)\r\n ) {\r\n if (ins[pacnt].points.length > 0) {\r\n ins[pacnt].points[ins[pacnt].points.length - 1].linesegment = this.getdirection(\r\n ins[pacnt].points[ins[pacnt].points.length - 1].x,\r\n ins[pacnt].points[ins[pacnt].points.length - 1].y,\r\n paths[pacnt].points[pcnt].x,\r\n paths[pacnt].points[pcnt].y\r\n );\r\n }\r\n\r\n ins[pacnt].points.push({\r\n x: paths[pacnt].points[pcnt].x,\r\n y: paths[pacnt].points[pcnt].y,\r\n linesegment: this.getdirection(\r\n paths[pacnt].points[pcnt].x,\r\n paths[pacnt].points[pcnt].y,\r\n (paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x) / 2,\r\n (paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y) / 2\r\n ),\r\n });\r\n }\r\n\r\n ins[pacnt].points.push({\r\n x: (paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x) / 2,\r\n y: (paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y) / 2,\r\n linesegment: this.getdirection(\r\n (paths[pacnt].points[pcnt].x + paths[pacnt].points[nextidx].x) / 2,\r\n (paths[pacnt].points[pcnt].y + paths[pacnt].points[nextidx].y) / 2,\r\n (paths[pacnt].points[nextidx].x + paths[pacnt].points[nextidx2].x) / 2,\r\n (paths[pacnt].points[nextidx].y + paths[pacnt].points[nextidx2].y) / 2\r\n ),\r\n });\r\n }\r\n }\r\n\r\n return ins;\r\n }\r\n\r\n testrightangle(path, idx1, idx2, idx3, idx4, idx5) {\r\n return (\r\n (path.points[idx3].x === path.points[idx1].x &&\r\n path.points[idx3].x === path.points[idx2].x &&\r\n path.points[idx3].y === path.points[idx4].y &&\r\n path.points[idx3].y === path.points[idx5].y) ||\r\n (path.points[idx3].y === path.points[idx1].y &&\r\n path.points[idx3].y === path.points[idx2].y &&\r\n path.points[idx3].x === path.points[idx4].x &&\r\n path.points[idx3].x === path.points[idx5].x)\r\n );\r\n }\r\n\r\n getdirection(x1, y1, x2, y2) {\r\n let val = 8;\r\n if (x1 < x2) {\r\n if (y1 < y2) {\r\n val = 1;\r\n } else if (y1 > y2) {\r\n val = 7;\r\n } else {\r\n val = 0;\r\n }\r\n } else if (x1 > x2) {\r\n if (y1 < y2) {\r\n val = 3;\r\n } else if (y1 > y2) {\r\n val = 5;\r\n } else {\r\n val = 4;\r\n }\r\n } else if (y1 < y2) {\r\n val = 2;\r\n } else if (y1 > y2) {\r\n val = 6;\r\n } else {\r\n val = 8;\r\n }\r\n\r\n return val;\r\n }\r\n\r\n batchinternodes(bpaths, options) {\r\n const binternodes = [];\r\n for (const k in bpaths) {\r\n if (!bpaths.hasOwnProperty(k)) {\r\n continue;\r\n }\r\n binternodes[k] = this.internodes(bpaths[k], options);\r\n }\r\n\r\n return binternodes;\r\n }\r\n\r\n tracepath(path, ltres, qtres) {\r\n let pcnt = 0;\r\n let segtype1;\r\n let segtype2;\r\n let seqend;\r\n const smp = {};\r\n smp.segments = [];\r\n smp.boundingbox = path.boundingbox;\r\n smp.holechildren = path.holechildren;\r\n smp.isholepath = path.isholepath;\r\n\r\n while (pcnt < path.points.length) {\r\n segtype1 = path.points[pcnt].linesegment;\r\n segtype2 = -1;\r\n seqend = pcnt + 1;\r\n while (\r\n (path.points[seqend].linesegment === segtype1 ||\r\n path.points[seqend].linesegment === segtype2 ||\r\n segtype2 === -1) &&\r\n seqend < path.points.length - 1\r\n ) {\r\n if (path.points[seqend].linesegment !== segtype1 && segtype2 === -1) {\r\n segtype2 = path.points[seqend].linesegment;\r\n }\r\n seqend += 1;\r\n }\r\n if (seqend === path.points.length - 1) {\r\n seqend = 0;\r\n }\r\n\r\n smp.segments = smp.segments.concat(this.fitseq(path, ltres, qtres, pcnt, seqend));\r\n\r\n if (seqend > 0) {\r\n pcnt = seqend;\r\n } else {\r\n pcnt = path.points.length;\r\n }\r\n }\r\n\r\n return smp;\r\n }\r\n\r\n fitseq(path, ltres, qtres, seqstart, seqend) {\r\n if (seqend > path.points.length || seqend < 0) {\r\n return [];\r\n }\r\n let errorpoint = seqstart,\r\n errorval = 0,\r\n curvepass = true,\r\n px,\r\n py,\r\n dist2;\r\n let tl = seqend - seqstart;\r\n if (tl < 0) {\r\n tl += path.points.length;\r\n }\r\n let vx = (path.points[seqend].x - path.points[seqstart].x) / tl,\r\n vy = (path.points[seqend].y - path.points[seqstart].y) / tl;\r\n let pcnt = (seqstart + 1) % path.points.length,\r\n pl;\r\n while (pcnt != seqend) {\r\n pl = pcnt - seqstart;\r\n if (pl < 0) {\r\n pl += path.points.length;\r\n }\r\n px = path.points[seqstart].x + vx * pl;\r\n py = path.points[seqstart].y + vy * pl;\r\n dist2 =\r\n (path.points[pcnt].x - px) * (path.points[pcnt].x - px) +\r\n (path.points[pcnt].y - py) * (path.points[pcnt].y - py);\r\n if (dist2 > ltres) {\r\n curvepass = false;\r\n }\r\n if (dist2 > errorval) {\r\n errorpoint = pcnt;\r\n errorval = dist2;\r\n }\r\n pcnt = (pcnt + 1) % path.points.length;\r\n }\r\n if (curvepass) {\r\n return [\r\n {\r\n type: 'L',\r\n x1: path.points[seqstart].x,\r\n y1: path.points[seqstart].y,\r\n x2: path.points[seqend].x,\r\n y2: path.points[seqend].y,\r\n },\r\n ];\r\n }\r\n const fitpoint = errorpoint;\r\n curvepass = true;\r\n errorval = 0;\r\n let t = (fitpoint - seqstart) / tl,\r\n t1 = (1 - t) * (1 - t),\r\n t2 = 2 * (1 - t) * t,\r\n t3 = t * t;\r\n let cpx =\r\n (t1 * path.points[seqstart].x + t3 * path.points[seqend].x - path.points[fitpoint].x) / -t2,\r\n cpy =\r\n (t1 * path.points[seqstart].y + t3 * path.points[seqend].y - path.points[fitpoint].y) / -t2;\r\n pcnt = seqstart + 1;\r\n while (pcnt != seqend) {\r\n t = (pcnt - seqstart) / tl;\r\n t1 = (1 - t) * (1 - t);\r\n t2 = 2 * (1 - t) * t;\r\n t3 = t * t;\r\n px = t1 * path.points[seqstart].x + t2 * cpx + t3 * path.points[seqend].x;\r\n py = t1 * path.points[seqstart].y + t2 * cpy + t3 * path.points[seqend].y;\r\n dist2 =\r\n (path.points[pcnt].x - px) * (path.points[pcnt].x - px) +\r\n (path.points[pcnt].y - py) * (path.points[pcnt].y - py);\r\n if (dist2 > qtres) {\r\n curvepass = false;\r\n }\r\n if (dist2 > errorval) {\r\n errorpoint = pcnt;\r\n errorval = dist2;\r\n }\r\n pcnt = (pcnt + 1) % path.points.length;\r\n }\r\n if (curvepass) {\r\n return [\r\n {\r\n type: 'Q',\r\n x1: path.points[seqstart].x,\r\n y1: path.points[seqstart].y,\r\n x2: cpx,\r\n y2: cpy,\r\n x3: path.points[seqend].x,\r\n y3: path.points[seqend].y,\r\n },\r\n ];\r\n }\r\n const splitpoint = fitpoint;\r\n\r\n return this.fitseq(path, ltres, qtres, seqstart, splitpoint).concat(\r\n this.fitseq(path, ltres, qtres, splitpoint, seqend)\r\n );\r\n }\r\n\r\n batchtracepaths(internodepaths, ltres, qtres) {\r\n const btracedpaths = [];\r\n for (const k in internodepaths) {\r\n if (!internodepaths.hasOwnProperty(k)) {\r\n continue;\r\n }\r\n btracedpaths.push(this.tracepath(internodepaths[k], ltres, qtres));\r\n }\r\n\r\n return btracedpaths;\r\n }\r\n\r\n batchtracelayers(binternodes, ltres, qtres) {\r\n const btbis = [];\r\n for (const k in binternodes) {\r\n if (!binternodes.hasOwnProperty(k)) {\r\n continue;\r\n }\r\n btbis[k] = this.batchtracepaths(binternodes[k], ltres, qtres);\r\n }\r\n\r\n return btbis;\r\n }\r\n\r\n roundtodec(val, places) {\r\n return Number(val.toFixed(places));\r\n }\r\n\r\n svgpathstring(tracedata, lnum, pathnum, options) {\r\n let layer = tracedata.layers[lnum],\r\n smp = layer[pathnum],\r\n str = '',\r\n pcnt;\r\n if (options.linefilter && smp.segments.length < 3) {\r\n return str;\r\n }\r\n str = `<path ${options.desc ? `desc=\"l ${lnum} p ${pathnum}\" ` : ''}${this.tosvgcolorstr(\r\n tracedata.palette[lnum],\r\n options\r\n )}d=\"`;\r\n if (options.roundcoords === -1) {\r\n str += `M ${smp.segments[0].x1 * options.scale} ${smp.segments[0].y1 * options.scale} `;\r\n for (pcnt = 0; pcnt < smp.segments.length; pcnt++) {\r\n str += `${smp.segments[pcnt].type} ${smp.segments[pcnt].x2 * options.scale} ${\r\n smp.segments[pcnt].y2 * options.scale\r\n } `;\r\n if (smp.segments[pcnt].hasOwnProperty('x3')) {\r\n str += `${smp.segments[pcnt].x3 * options.scale} ${\r\n smp.segments[pcnt].y3 * options.scale\r\n } `;\r\n }\r\n }\r\n str += 'Z ';\r\n } else {\r\n str += `M ${this.roundtodec(\r\n smp.segments[0].x1 * options.scale,\r\n options.roundcoords\r\n )} ${this.roundtodec(smp.segments[0].y1 * options.scale, options.roundcoords)} `;\r\n for (pcnt = 0; pcnt < smp.segments.length; pcnt++) {\r\n str += `${smp.segments[pcnt].type} ${this.roundtodec(\r\n smp.segments[pcnt].x2 * options.scale,\r\n options.roundcoords\r\n )} ${this.roundtodec(smp.segments[pcnt].y2 * options.scale, options.roundcoords)} `;\r\n if (smp.segments[pcnt].hasOwnProperty('x3')) {\r\n str += `${this.roundtodec(\r\n smp.segments[pcnt].x3 * options.scale,\r\n options.roundcoords\r\n )} ${this.roundtodec(smp.segments[pcnt].y3 * options.scale, options.roundcoords)} `;\r\n }\r\n }\r\n str += 'Z ';\r\n }\r\n for (var hcnt = 0; hcnt < smp.holechildren.length; hcnt++) {\r\n var hsmp = layer[smp.holechildren[hcnt]];\r\n\r\n if (options.roundcoords === -1) {\r\n if (hsmp.segments[hsmp.segments.length - 1].hasOwnProperty('x3')) {\r\n str += `M ${hsmp.segments[hsmp.segments.length - 1].x3 * options.scale} ${\r\n hsmp.segments[hsmp.segments.length - 1].y3 * options.scale\r\n } `;\r\n } else {\r\n str += `M ${hsmp.segments[hsmp.segments.length - 1].x2 * options.scale} ${\r\n hsmp.segments[hsmp.segments.length - 1].y2 * options.scale\r\n } `;\r\n }\r\n for (pcnt = hsmp.segments.length - 1; pcnt >= 0; pcnt--) {\r\n str += `${hsmp.segments[pcnt].type} `;\r\n if (hsmp.segments[pcnt].hasOwnProperty('x3')) {\r\n str += `${hsmp.segments[pcnt].x2 * options.scale} ${\r\n hsmp.segments[pcnt].y2 * options.scale\r\n } `;\r\n }\r\n str += `${hsmp.segments[pcnt].x1 * options.scale} ${\r\n hsmp.segments[pcnt].y1 * options.scale\r\n } `;\r\n }\r\n } else {\r\n if (hsmp.segments[hsmp.segments.length - 1].hasOwnProperty('x3')) {\r\n str += `M ${this.roundtodec(\r\n hsmp.segments[hsmp.segments.length - 1].x3 * options.scale\r\n )} ${this.roundtodec(hsmp.segments[hsmp.segments.length - 1].y3 * options.scale)} `;\r\n } else {\r\n str += `M ${this.roundtodec(\r\n hsmp.segments[hsmp.segments.length - 1].x2 * options.scale\r\n )} ${this.roundtodec(hsmp.segments[hsmp.segments.length - 1].y2 * options.scale)} `;\r\n }\r\n for (pcnt = hsmp.segments.length - 1; pcnt >= 0; pcnt--) {\r\n str += `${hsmp.segments[pcnt].type} `;\r\n if (hsmp.segments[pcnt].hasOwnProperty('x3')) {\r\n str += `${this.roundtodec(hsmp.segments[pcnt].x2 * options.scale)} ${this.roundtodec(\r\n hsmp.segments[pcnt].y2 * options.scale\r\n )} `;\r\n }\r\n str += `${this.roundtodec(hsmp.segments[pcnt].x1 * options.scale)} ${this.roundtodec(\r\n hsmp.segments[pcnt].y1 * options.scale\r\n )} `;\r\n }\r\n }\r\n str += 'Z ';\r\n }\r\n str += '\" />';\r\n if (options.lcpr || options.qcpr) {\r\n for (pcnt = 0; pcnt < smp.segments.length; pcnt++) {\r\n if (smp.segments[pcnt].hasOwnProperty('x3') && options.qcpr) {\r\n str += `<circle cx=\"${smp.segments[pcnt].x2 * options.scale}\" cy=\"${\r\n smp.segments[pcnt].y2 * options.scale\r\n }\" r=\"${options.qcpr}\" fill=\"cyan\" stroke-width=\"${\r\n options.qcpr * 0.2\r\n }\" stroke=\"black\" />`;\r\n str += `<circle cx=\"${smp.segments[pcnt].x3 * options.scale}\" cy=\"${\r\n smp.segments[pcnt].y3 * options.scale\r\n }\" r=\"${options.qcpr}\" fill=\"white\" stroke-width=\"${\r\n options.qcpr * 0.2\r\n }\" stroke=\"black\" />`;\r\n str += `<line x1=\"${smp.segments[pcnt].x1 * options.scale}\" y1=\"${\r\n smp.segments[pcnt].y1 * options.scale\r\n }\" x2=\"${smp.segments[pcnt].x2 * options.scale}\" y2=\"${\r\n smp.segments[pcnt].y2 * options.scale\r\n }\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\r\n str += `<line x1=\"${smp.segments[pcnt].x2 * options.scale}\" y1=\"${\r\n smp.segments[pcnt].y2 * options.scale\r\n }\" x2=\"${smp.segments[pcnt].x3 * options.scale}\" y2=\"${\r\n smp.segments[pcnt].y3 * options.scale\r\n }\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\r\n }\r\n if (!smp.segments[pcnt].hasOwnProperty('x3') && options.lcpr) {\r\n str += `<circle cx=\"${smp.segments[pcnt].x2 * options.scale}\" cy=\"${\r\n smp.segments[pcnt].y2 * options.scale\r\n }\" r=\"${options.lcpr}\" fill=\"white\" stroke-width=\"${\r\n options.lcpr * 0.2\r\n }\" stroke=\"black\" />`;\r\n }\r\n }\r\n\r\n for (var hcnt = 0; hcnt < smp.holechildren.length; hcnt++) {\r\n var hsmp = layer[smp.holechildren[hcnt]];\r\n for (pcnt = 0; pcnt < hsmp.segments.length; pcnt++) {\r\n if (hsmp.segments[pcnt].hasOwnProperty('x3') && options.qcpr) {\r\n str += `<circle cx=\"${hsmp.segments[pcnt].x2 * options.scale}\" cy=\"${\r\n hsmp.segments[pcnt].y2 * options.scale\r\n }\" r=\"${options.qcpr}\" fill=\"cyan\" stroke-width=\"${\r\n options.qcpr * 0.2\r\n }\" stroke=\"black\" />`;\r\n str += `<circle cx=\"${hsmp.segments[pcnt].x3 * options.scale}\" cy=\"${\r\n hsmp.segments[pcnt].y3 * options.scale\r\n }\" r=\"${options.qcpr}\" fill=\"white\" stroke-width=\"${\r\n options.qcpr * 0.2\r\n }\" stroke=\"black\" />`;\r\n str += `<line x1=\"${hsmp.segments[pcnt].x1 * options.scale}\" y1=\"${\r\n hsmp.segments[pcnt].y1 * options.scale\r\n }\" x2=\"${hsmp.segments[pcnt].x2 * options.scale}\" y2=\"${\r\n hsmp.segments[pcnt].y2 * options.scale\r\n }\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\r\n str += `<line x1=\"${hsmp.segments[pcnt].x2 * options.scale}\" y1=\"${\r\n hsmp.segments[pcnt].y2 * options.scale\r\n }\" x2=\"${hsmp.segments[pcnt].x3 * options.scale}\" y2=\"${\r\n hsmp.segments[pcnt].y3 * options.scale\r\n }\" stroke-width=\"${options.qcpr * 0.2}\" stroke=\"cyan\" />`;\r\n }\r\n if (!hsmp.segments[pcnt].hasOwnProperty('x3') && options.lcpr) {\r\n str += `<circle cx=\"${hsmp.segments[pcnt].x2 * options.scale}\" cy=\"${\r\n hsmp.segments[pcnt].y2 * options.scale\r\n }\" r=\"${options.lcpr}\" fill=\"white\" stroke-width=\"${\r\n options.lcpr * 0.2\r\n }\" stroke=\"black\" />`;\r\n }\r\n }\r\n }\r\n }\r\n\r\n return str;\r\n }\r\n\r\n getsvgstring(tracedata, options) {\r\n options = this.checkoptions(options);\r\n const w = tracedata.width * options.scale;\r\n const h = tracedata.height * options.scale;\r\n\r\n let svgstr = `<svg ${\r\n options.viewbox ? `viewBox=\"0 0 ${w} ${h}\" ` : `width=\"${w}\" height=\"${h}\" `\r\n }version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" desc=\"Created with imagetracer.js version ${\r\n this.versionnumber\r\n }\" >`;\r\n for (let lcnt = 0; lcnt < tracedata.layers.length; lcnt += 1) {\r\n for (let pcnt = 0; pcnt < tracedata.layers[lcnt].length; pcnt += 1) {\r\n if (!tracedata.layers[lcnt][pcnt].isholepath) {\r\n svgstr += this.svgpathstring(tracedata, lcnt, pcnt, options);\r\n }\r\n }\r\n }\r\n svgstr += '</svg>';\r\n\r\n return svgstr;\r\n }\r\n\r\n compareNumbers(a, b) {\r\n return a - b;\r\n }\r\n\r\n torgbastr(c) {\r\n return `rgba(${c.r},${c.g},${c.b},${c.a})`;\r\n }\r\n\r\n tosvgcolorstr(c, options) {\r\n return `fill=\"rgb(${c.r},${c.g},${c.b})\" stroke=\"rgb(${c.r},${c.g},${c.b})\" stroke-width=\"${\r\n options.strokewidth\r\n }\" opacity=\"${c.a / 255.0}\" `;\r\n }\r\n\r\n appendSVGString(svgstr, parentid) {\r\n let div;\r\n if (parentid) {\r\n div = document.getElementById(parentid);\r\n if (!div) {\r\n div = document.createElement('div');\r\n div.id = parentid;\r\n document.body.appendChild(div);\r\n }\r\n } else {\r\n div = document.createElement('div');\r\n document.body.appendChild(div);\r\n }\r\n div.innerHTML += svgstr;\r\n }\r\n\r\n blur(imgd, radius, delta) {\r\n let i, j, k, d, idx, racc, gacc, bacc, aacc, wacc;\r\n const imgd2 = { width: imgd.width, height: imgd.height, data: [] };\r\n radius = Math.floor(radius);\r\n if (radius < 1) {\r\n return imgd;\r\n }\r\n if (radius > 5) {\r\n radius = 5;\r\n }\r\n delta = Math.abs(delta);\r\n if (delta > 1024) {\r\n delta = 1024;\r\n }\r\n const thisgk = this.gks[radius - 1];\r\n for (j = 0; j < imgd.height; j++) {\r\n for (i = 0; i < imgd.width; i++) {\r\n racc = 0;\r\n gacc = 0;\r\n bacc = 0;\r\n aacc = 0;\r\n wacc = 0;\r\n\r\n for (k = -radius; k < radius + 1; k++) {\r\n if (i + k > 0 && i + k < imgd.width) {\r\n idx = (j * imgd.width + i + k) * 4;\r\n racc += imgd.data[idx] * thisgk[k + radius];\r\n gacc += imgd.data[idx + 1] * thisgk[k + radius];\r\n bacc += imgd.data[idx + 2] * thisgk[k + radius];\r\n aacc += imgd.data[idx + 3] * thisgk[k + radius];\r\n wacc += thisgk[k + radius];\r\n }\r\n }\r\n\r\n idx = (j * imgd.width + i) * 4;\r\n imgd2.data[idx] = Math.floor(racc / wacc);\r\n imgd2.data[idx + 1] = Math.floor(gacc / wacc);\r\n imgd2.data[idx + 2] = Math.floor(bacc / wacc);\r\n imgd2.data[idx + 3] = Math.floor(aacc / wacc);\r\n }\r\n }\r\n const himgd = new Uint8ClampedArray(imgd2.data);\r\n for (j = 0; j < imgd.height; j++) {\r\n for (i = 0; i < imgd.width; i++) {\r\n racc = 0;\r\n gacc = 0;\r\n bacc = 0;\r\n aacc = 0;\r\n wacc = 0;\r\n\r\n for (k = -radius; k < radius + 1; k++) {\r\n if (j + k > 0 && j + k < imgd.height) {\r\n idx = ((j + k) * imgd.width + i) * 4;\r\n racc += himgd[idx] * thisgk[k + radius];\r\n gacc += himgd[idx + 1] * thisgk[k + radius];\r\n bacc += himgd[idx + 2] * thisgk[k + radius];\r\n aacc += himgd[idx + 3] * thisgk[k + radius];\r\n wacc += thisgk[k + radius];\r\n }\r\n }\r\n\r\n idx = (j * imgd.width + i) * 4;\r\n imgd2.data[idx] = Math.floor(racc / wacc);\r\n imgd2.data[idx + 1] = Math.floor(gacc / wacc);\r\n imgd2.data[idx + 2] = Math.floor(bacc / wacc);\r\n imgd2.data[idx + 3] = Math.floor(aacc / wacc);\r\n }\r\n }\r\n for (j = 0; j < imgd.height; j++) {\r\n for (i = 0; i < imgd.width; i++) {\r\n idx = (j * imgd.width + i) * 4;\r\n\r\n d =\r\n Math.abs(imgd2.data[idx] - imgd.data[idx]) +\r\n Math.abs(imgd2.data[idx + 1] - imgd.data[idx + 1]) +\r\n Math.abs(imgd2.data[idx + 2] - imgd.data[idx + 2]) +\r\n Math.abs(imgd2.data[idx + 3] - imgd.data[idx + 3]);\r\n\r\n if (d > delta) {\r\n imgd2.data[idx] = imgd.data[idx];\r\n imgd2.data[idx + 1] = imgd.data[idx + 1];\r\n imgd2.data[idx + 2] = imgd.data[idx + 2];\r\n imgd2.data[idx + 3] = imgd.data[idx + 3];\r\n }\r\n }\r\n }\r\n\r\n return imgd2;\r\n }\r\n\r\n loadImage(url, callback, options) {\r\n const img = new Image();\r\n if (options && options.corsenabled) {\r\n img.crossOrigin = 'Anonymous';\r\n }\r\n img.src = url;\r\n img.onload = function () {\r\n const canvas = document.createElement('canvas');\r\n canvas.width = img.width;\r\n canvas.height = img.height;\r\n const context = canvas.getContext('2d');\r\n context.drawImage(img, 0, 0);\r\n callback(canvas);\r\n };\r\n }\r\n\r\n getImgdata(canvas) {\r\n const context = canvas.getContext('2d');\r\n\r\n return context.getImageData(0, 0, canvas.width, canvas.height);\r\n }\r\n\r\n drawLayers(layers, palette, scale, parentid) {\r\n scale = scale || 1;\r\n let w, h, i, j, k;\r\n let div;\r\n if (parentid) {\r\n div = document.getElementById(parentid);\r\n if (!div) {\r\n div = document.createElement('div');\r\n div.id = parentid;\r\n document.body.appendChild(div);\r\n }\r\n } else {\r\n div = document.createElement('div');\r\n document.body.appendChild(div);\r\n }\r\n for (k in layers) {\r\n if (!layers.hasOwnProperty(k)) {\r\n continue;\r\n }\r\n\r\n w = layers[k][0].length;\r\n h = layers[k].length;\r\n\r\n const canvas = document.createElement('canvas');\r\n canvas.width = w * scale;\r\n canvas.height = h * scale;\r\n const context = canvas.getContext('2d');\r\n\r\n for (j = 0; j < h; j += 1) {\r\n for (i = 0; i < w; i += 1) {\r\n context.fillStyle = this.torgbastr(palette[layers[k][j][i] % palette.length]);\r\n context.fillRect(i * scale, j * scale, scale, scale);\r\n }\r\n }\r\n\r\n div.appendChild(canvas);\r\n }\r\n }\r\n}\r\n"]},"metadata":{},"sourceType":"module"}