Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.
 
 
 

112 rindas
2.9 KiB

  1. define([
  2. 'js/resources'
  3. ], function(
  4. resources
  5. ) {
  6. var canvas = $('<canvas></canvas>').appendTo('body').hide();
  7. return {
  8. outline: function(imgName, offsetX, offsetY, imgW, imgH, ur, ug, ub, ua) {
  9. var img = resources.sprites[imgName].image;
  10. canvas[0].width = imgW;
  11. canvas[0].height = imgH;
  12. var ctx = canvas[0].getContext('2d');
  13. ctx.drawImage(img, offsetX, offsetY, imgW, imgH, 2, 2, imgW, imgH);
  14. var imgData = ctx.getImageData(0, 0, imgW, imgH);
  15. var pixels = imgData.data;
  16. var secondData = ctx.getImageData(0, 0, imgW, imgH);
  17. var secondPixels = secondData.data;
  18. var newData = ctx.createImageData(imgW * 4, imgH * 4);
  19. var newPixels = newData.data;
  20. var fillPixels = function(x, y, r, g, b, a) {
  21. var index = ((y * imgW * 4) + x) * 4;
  22. for (var i = 0; i < 4; i++) {
  23. for (var j = 0; j < 4; j++) {
  24. var newIndex = index + (i * 4) + (j * (imgW * 4 * 4));
  25. newPixels[newIndex] = r;
  26. newPixels[newIndex + 1] = g;
  27. newPixels[newIndex + 2] = b;
  28. newPixels[newIndex + 3] = a;
  29. }
  30. }
  31. }
  32. for (var i = 0; i < imgW; i++) {
  33. for (var j = 0; j < imgW; j++) {
  34. var index = ((j * imgW) + i) * 4;
  35. var transparent = (pixels[index + 3] == 0);
  36. if (transparent) {
  37. var touchPixel = false;
  38. if (i > 0)
  39. touchPixel = (pixels[index - 1] > 0);
  40. if ((!touchPixel) && (j > 0))
  41. touchPixel = (pixels[index - (imgW * 4) + 3] > 0);
  42. if ((!touchPixel) && (i < imgW - 1))
  43. touchPixel = (pixels[index + 7] > 0);
  44. if ((!touchPixel) && (j < imgH - 1))
  45. touchPixel = (pixels[index + (imgW * 4) + 3] > 0);
  46. if (touchPixel) {
  47. secondPixels[index] = 0;
  48. secondPixels[index + 1] = 0;
  49. secondPixels[index + 2] = 0;
  50. secondPixels[index + 3] = 255;
  51. }
  52. }
  53. }
  54. }
  55. for (var i = 0; i < imgW; i++) {
  56. for (var j = 0; j < imgW; j++) {
  57. var index = ((j * imgW) + i) * 4;
  58. var transparent = (secondPixels[index + 3] == 0);
  59. if (transparent) {
  60. var touchPixel = false;
  61. if (i > 0)
  62. touchPixel = (secondPixels[index - 1] > 0)
  63. if ((!touchPixel) && (j > 0))
  64. touchPixel = (secondPixels[index - (imgW * 4) + 3] > 0)
  65. if ((!touchPixel) && (i < imgW - 1))
  66. touchPixel = (secondPixels[index + 7] > 0)
  67. if ((!touchPixel) && (j < imgH - 1))
  68. touchPixel = (secondPixels[index + (imgW * 4) + 3] > 0)
  69. if (touchPixel)
  70. fillPixels(i * 4, j * 4, ur, ug, ub, ua);
  71. continue;
  72. }
  73. var r = secondPixels[index];
  74. var g = secondPixels[index + 1];
  75. var b = secondPixels[index + 2];
  76. var a = secondPixels[index + 3];
  77. if ((r + g + b == 0) && (a == 255)) {
  78. a = 0;
  79. }
  80. fillPixels(i * 4, j * 4, r, g, b, a);
  81. }
  82. }
  83. canvas[0].width = imgW * 4;
  84. canvas[0].height = imgH * 4;
  85. ctx.putImageData(newData, 0, 0);
  86. var url = canvas[0].toDataURL();
  87. return url;
  88. }
  89. };
  90. });