| OLD | NEW |
| (Empty) |
| 1 require '../scripts/vendor/mootools.js' | |
| 2 ready = require '../scripts/vendor/ready.js' | |
| 3 | |
| 4 num_frames = 20 | |
| 5 width = 600 | |
| 6 height = 300 | |
| 7 text = 'HYPNO TOAD' | |
| 8 textSize = 70 | |
| 9 | |
| 10 now = window.performance?.now?.bind(window.performance) or Date.now | |
| 11 | |
| 12 rgb = (rgb...) -> "rgb(#{ rgb.map((v) -> Math.floor(v * 255)).join(',') })" | |
| 13 hsl = (hsl...) -> | |
| 14 hsl = hsl.map (v, i) -> if i is 0 then v * 360 else "#{ v * 100 }%" | |
| 15 return "hsl(#{ hsl.join(',') })" | |
| 16 | |
| 17 ready -> | |
| 18 canvas = document.createElement 'canvas' | |
| 19 canvas.width = width | |
| 20 canvas.height = height | |
| 21 | |
| 22 startTime = null | |
| 23 ctx = canvas.getContext '2d' | |
| 24 info = document.id 'info' | |
| 25 | |
| 26 gif = new GIF | |
| 27 workers: 4 | |
| 28 workerScript: '/gif.js/gif.worker.js' | |
| 29 width: width | |
| 30 height: height | |
| 31 | |
| 32 gif.on 'start', -> startTime = now() | |
| 33 | |
| 34 gif.on 'progress', (p) -> info.set 'text', Math.round(p * 100)+'%' | |
| 35 | |
| 36 gif.on 'finished', (blob) -> | |
| 37 img = document.id 'result' | |
| 38 img.src = URL.createObjectURL(blob) | |
| 39 delta = now() - startTime | |
| 40 info.set 'text', """ | |
| 41 100% | |
| 42 #{ (delta / 1000).toFixed 2 }sec | |
| 43 #{ (blob.size / 1000).toFixed 2 }kb | |
| 44 """ | |
| 45 | |
| 46 ctx.font = "bold #{ textSize }px Helvetica" | |
| 47 ctx.textAlign = 'center' | |
| 48 ctx.textBaseline = 'middle' | |
| 49 ctx.lineWidth = 3 | |
| 50 w2 = width / 2 | |
| 51 h2 = height / 2 | |
| 52 for i in [0...num_frames] | |
| 53 p = i / (num_frames - 1) | |
| 54 grad = ctx.createRadialGradient w2, h2, 0, w2, h2, w2 | |
| 55 grad.addColorStop 0, hsl p, 1, 0.5 | |
| 56 grad.addColorStop 1, hsl (p + 0.2) % 1, 1, 0.4 | |
| 57 ctx.fillStyle = grad | |
| 58 ctx.fillRect 0, 0, width, height | |
| 59 ctx.fillStyle = hsl (p + 0.5) % 1, 1, 0.7 | |
| 60 ctx.strokeStyle = hsl (p + 0.8) % 1, 1, 0.9 | |
| 61 ctx.fillText text, w2, h2 | |
| 62 ctx.strokeText text, w2, h2 | |
| 63 gif.addFrame ctx, {copy: true, delay: 20} | |
| 64 | |
| 65 gif.render() | |
| OLD | NEW |