colorwheel.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. "use strict";
  2. var page = require('webpage').create();
  3. page.viewportSize = { width: 400, height : 400 };
  4. page.content = '<html><body><canvas id="surface"></canvas></body></html>';
  5. page.evaluate(function() {
  6. var el = document.getElementById('surface'),
  7. context = el.getContext('2d'),
  8. width = window.innerWidth,
  9. height = window.innerHeight,
  10. cx = width / 2,
  11. cy = height / 2,
  12. radius = width / 2.3,
  13. imageData,
  14. pixels,
  15. hue, sat, value,
  16. i = 0, x, y, rx, ry, d,
  17. f, g, p, u, v, w, rgb;
  18. el.width = width;
  19. el.height = height;
  20. imageData = context.createImageData(width, height);
  21. pixels = imageData.data;
  22. for (y = 0; y < height; y = y + 1) {
  23. for (x = 0; x < width; x = x + 1, i = i + 4) {
  24. rx = x - cx;
  25. ry = y - cy;
  26. d = rx * rx + ry * ry;
  27. if (d < radius * radius) {
  28. hue = 6 * (Math.atan2(ry, rx) + Math.PI) / (2 * Math.PI);
  29. sat = Math.sqrt(d) / radius;
  30. g = Math.floor(hue);
  31. f = hue - g;
  32. u = 255 * (1 - sat);
  33. v = 255 * (1 - sat * f);
  34. w = 255 * (1 - sat * (1 - f));
  35. pixels[i] = [255, v, u, u, w, 255, 255][g];
  36. pixels[i + 1] = [w, 255, 255, v, u, u, w][g];
  37. pixels[i + 2] = [u, u, w, 255, 255, v, u][g];
  38. pixels[i + 3] = 255;
  39. }
  40. }
  41. }
  42. context.putImageData(imageData, 0, 0);
  43. document.body.style.backgroundColor = 'white';
  44. document.body.style.margin = '0px';
  45. });
  46. page.render('colorwheel.png');
  47. phantom.exit();