OLD | NEW |
| (Empty) |
1 {NeuQuant} = require './TypedNeuQuant.js' | |
2 | |
3 ### | |
4 typed 100 runs: | |
5 run finished at q1 | |
6 avg: 661.46ms median: 660.54ms | |
7 run finished at q10 | |
8 avg: 67.49ms median: 67.03ms | |
9 run finished at q20 | |
10 avg: 34.56ms median: 34.19ms | |
11 normal 100 runs: | |
12 run finished at q1 | |
13 avg: 888.10ms median: 887.63ms | |
14 run finished at q10 | |
15 avg: 92.85ms median: 91.99ms | |
16 run finished at q20 | |
17 avg: 46.14ms median: 45.68ms | |
18 ### | |
19 | |
20 quality = 10 # pixel sample interval, 1 being the best quality | |
21 runs = 100 | |
22 | |
23 if window.performance?.now? | |
24 now = -> window.performance.now() | |
25 else | |
26 now = Date.now | |
27 | |
28 window.addEventListener 'load', -> | |
29 img = document.getElementById 'image' | |
30 canvas = document.getElementById 'canvas' | |
31 | |
32 w = canvas.width = img.width | |
33 h = canvas.height = img.height | |
34 | |
35 ctx = canvas.getContext('2d') | |
36 ctx.drawImage(img, 0, 0) | |
37 | |
38 imdata = ctx.getImageData(0, 0, img.width, img.height) | |
39 rgba = imdata.data | |
40 | |
41 rgb = new Uint8Array w * h * 3 | |
42 #rgb = new Array w * h * 3 | |
43 | |
44 rgb_idx = 0 | |
45 for i in [0...rgba.length] by 4 | |
46 rgb[rgb_idx++] = rgba[i + 0] | |
47 rgb[rgb_idx++] = rgba[i + 1] | |
48 rgb[rgb_idx++] = rgba[i + 2] | |
49 | |
50 runtimes = [] | |
51 for run in [0...runs] | |
52 start = now() | |
53 imgq = new NeuQuant rgb, quality | |
54 imgq.buildColormap() | |
55 end = now() | |
56 delta = end - start | |
57 runtimes.push delta | |
58 | |
59 console.log runtimes.join('\n') | |
60 | |
61 map = imgq.getColormap() | |
62 avg = runtimes.reduce((p, n) -> p + n) / runtimes.length | |
63 median = runtimes.sort()[Math.floor(runs / 2)] | |
64 console.log """ | |
65 run finished at q#{ quality } | |
66 avg: #{ avg.toFixed(2) }ms median: #{ median.toFixed(2) }ms | |
67 """ | |
68 | |
69 for y in [0...h] | |
70 for x in [0...w] | |
71 idx = (y * w + x) * 4 | |
72 | |
73 r = rgba[idx + 0] | |
74 g = rgba[idx + 1] | |
75 b = rgba[idx + 2] | |
76 | |
77 map_idx = imgq.lookupRGB(r, g, b) * 3 | |
78 | |
79 rgba[idx + 0] = map[map_idx] | |
80 rgba[idx + 1] = map[map_idx + 1] | |
81 rgba[idx + 2] = map[map_idx + 2] | |
82 | |
83 ctx.putImageData imdata, 0, 0 | |
84 | |
85 for i in [0...map.length] by 3 | |
86 color = [map[i], map[i + 1], map[i + 2]] | |
87 el = document.createElement 'span' | |
88 el.style.display = 'inline-block' | |
89 el.style.height = '1em' | |
90 el.style.width = '1em' | |
91 el.style.background = 'rgb(' + color.join(',') + ')' | |
92 document.body.appendChild el | |
OLD | NEW |