FP2 Icon Loader

Icon loader from local images for FPv2 icon editor.

  1. // ==UserScript==
  2. // @name FP2 Icon Loader
  3. // @author Creec Winceptor
  4. // @description Icon loader from local images for FPv2 icon editor.
  5. // @namespace https://gf.qytechs.cn/users/3167
  6. // @grant none
  7. // @include http*://facepunchforum.azurewebsites.net*
  8. // @include http*://lab.facepunch.com*
  9. // @run-at document-idle
  10. // @version 0.0.1.20160604001845
  11. // ==/UserScript==
  12.  
  13. //http://stackoverflow.com/a/14570614
  14. var observeDOM = (function(){
  15. var MutationObserver = window.MutationObserver || window.WebKitMutationObserver,
  16. eventListenerSupported = window.addEventListener;
  17.  
  18. return function(obj, callback){
  19. if( MutationObserver ){
  20. // define a new observer
  21. var obs = new MutationObserver(function(mutations, observer){
  22. if( mutations[0].addedNodes.length || mutations[0].removedNodes.length )
  23. callback();
  24. });
  25. // have the observer observe foo for changes in children
  26. obs.observe( obj, { childList:true, subtree:true });
  27. }
  28. else if( eventListenerSupported ){
  29. obj.addEventListener('DOMNodeInserted', callback, false);
  30. obj.addEventListener('DOMNodeRemoved', callback, false);
  31. }
  32. }
  33. })();
  34.  
  35. var fp2iconloader = false;
  36.  
  37. function Init(retries)
  38. {
  39. var content_div = document.getElementById("content");
  40. if (content_div)
  41. {
  42. observeDOM( content_div ,function(){
  43. Load(0);
  44. });
  45. fp2iconloader = true;
  46. //console.log("initiated");
  47. Load(retries);
  48. }
  49. else
  50. {
  51. if (retries>0)
  52. {
  53. setTimeout(function() {
  54. Init(retries-1);
  55. }, 500)
  56. }
  57. else
  58. {
  59. //console.log("failed to load");
  60. }
  61. }
  62.  
  63. }
  64.  
  65. function Load(retries)
  66. {
  67. //console.log("loading");
  68.  
  69. var file_input = document.getElementById("file_input");
  70. if (file_input || !fp2iconloader)
  71. {
  72. //console.log("return");
  73. return;
  74. }
  75. else
  76. {
  77. var tools_panel = document.getElementsByClassName("panel tools")[0];
  78. var text_input = document.getElementsByName("textinput")[1];
  79. if (tools_panel && text_input)
  80. {
  81. var file_input = document.createElement("input");
  82. file_input.type = "file";
  83. file_input.id = "file_input";
  84.  
  85.  
  86. var hr_break = document.createElement("hr");
  87. tools_panel.appendChild(hr_break);
  88.  
  89. tools_panel.appendChild(file_input);
  90.  
  91. file_input.onchange = function(e) {
  92.  
  93. var res = 16;
  94. var URL = window.webkitURL || window.URL;
  95. var url = URL.createObjectURL(e.target.files[0]);
  96. var img = new Image();
  97.  
  98.  
  99. img.src = url;
  100.  
  101. img.onload = function() {
  102.  
  103.  
  104. pixelarray = [];
  105. if(!img.canvas) {
  106. img.canvas = $('<canvas />')[0];
  107. img.canvas.width = res;
  108. img.canvas.height = res;
  109. img.canvas.getContext('2d').drawImage(img, 0, 0, res, res);
  110.  
  111. }
  112.  
  113.  
  114.  
  115. var count = 0;
  116. for (var x=0; x<res; x++)
  117. {
  118. for (var y=0; y<res; y++)
  119. {
  120. var pixelData = img.canvas.getContext('2d').getImageData(y, x, 1, 1).data;
  121. pixelarray[count] = Math.round(pixelData[0]/256 * 9) + Math.round(pixelData[1]/256 * 9) * 10 + Math.round(pixelData[2]/256 * 9) * 100 + 1;
  122.  
  123. if (pixelData[3]<128)
  124. {
  125. pixelarray[count] = 0;
  126. }
  127. count++;
  128.  
  129. }
  130. }
  131.  
  132. text_input.value = EncodeIconData(pixelarray);
  133. text_input.dispatchEvent(new Event('change'));
  134. }
  135. };
  136. }
  137. else
  138. {
  139. if (retries>0)
  140. {
  141. setTimeout(function() {
  142. Load(retries-1);
  143. }, 500)
  144. }
  145. else
  146. {
  147. //console.log("failed to load");
  148. }
  149. }
  150. //console.log("done");
  151. }
  152. }
  153.  
  154. Init(10);

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址