Advertisement
12Me21

ok

Jul 22nd, 2016
394
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.36 KB | None | 0 0
  1. /*=============*\
  2. |░ image thing ░|
  3. \*=============*/
  4. //paste box
  5. var pasteImageHere=document.createElement("div");
  6. pasteImageHere.style.width="3.25rem";
  7. pasteImageHere.id="pasteImageHere";
  8. pasteImageHere.setAttribute("contenteditable","");
  9. pasteImageHere.oninput=function(){checkInput();}; //no more slow intervals! :D
  10. document.querySelector("#sendpane").appendChild(pasteImageHere);
  11. //file upload button
  12. var fileBrowse=document.createElement("input");
  13. fileBrowse.type="file";
  14. fileBrowse.id="imageUpload";
  15. fileBrowse.onchange=function(){loadImg();};
  16. document.querySelector("#sidepane").appendChild(fileBrowse);
  17. ///////////////////////////////////
  18. var pictureDrawing=true;//(should be set to false when X is clicked)
  19. ///////////////////////////////////
  20. var z=new Image(); //best variable names (c) Trinitro 2016
  21. //get image from input
  22. function checkInput(){
  23. var thing=pasteImageHere.firstChild;
  24. if (thing){
  25. //Console.log("Found a thing in the input box...");
  26. if (thing.tagName=="IMG") {
  27. console.log("Found an image. (assume load failed)");
  28. z.crossOrigin="Anonymous";
  29. z.onload=function(){
  30. console.log("Image loaded successfully!");
  31. putImage(z);
  32. //console.log("Image conversion sucessful.");
  33. };
  34. z.src=thing.src;
  35. }
  36. }
  37. pasteImageHere.innerHTML="";
  38. }
  39. //load image from file browse button thing
  40. function loadImg(){
  41. var reader=new FileReader();
  42. reader.readAsDataURL(fileBrowse.files[0]);
  43. reader.onload=function(){
  44. z.onload=function(){putImage(z);};
  45. z.src=reader.result;
  46. };
  47. }
  48. //put image on canvas, and convert to 4 colors.
  49. function putImage(img){
  50. var palette=[];
  51. for(var i=0;i<4;i++) //get colors
  52. palette.push(fillStyleToRgb(document.querySelectorAll("#chatdraw button-area button.colorChange")[i].style.color));
  53. var canvas=document.querySelector("#chatdraw canvas");
  54. var c2d=canvas.getContext("2d");
  55. var scale=Math.min(canvas.width/img.width,canvas.height/img.height);
  56. c2d.drawImage(img,0,0,img.width*scale,img.height*scale);
  57. var data=c2d.getImageData(0,0,canvas.width,canvas.height);
  58. var bestIndex=null;
  59. for(var x=0;x<data.data.length;x+=4){
  60. //find the best color
  61. var bestDist=null;
  62. if (noise){
  63. data.data[x ]+=Math.random()*noise-noise/2;
  64. data.data[x+1]+=Math.random()*noise-noise/2;
  65. data.data[x+2]+=Math.random()*noise-noise/2;
  66. }
  67. for(var i=0;i<palette.length&&bestDist!==0;i++){
  68. var uR= data.data[x ]+palette[i][0]; //red sum
  69. var cR=-data.data[x ]+palette[i][0]; //red difference
  70. var cG=-data.data[x+1]+palette[i][1]; //green difference
  71. var cB=-data.data[x+2]+palette[i][2]; //blue difference
  72. var dist=(2+uR/512)*cR*cR+4*cG*cG+(2+(510-uR)/512)*cB*cB;
  73. if(bestDist===null||dist<bestDist){bestDist=dist;bestIndex=i;}
  74. }
  75. //dithering
  76. var errr=(data.data[x ]-palette[bestIndex][0]);
  77. var errg=(data.data[x+1]-palette[bestIndex][1]);
  78. var errb=(data.data[x+2]-palette[bestIndex][2]);
  79. addRGB(x+4 ,dither*0.1620); // right
  80. addRGB(x+796,dither*0.1348); // down
  81. addRGB(x+800,dither*0.4859); // down/left
  82. addRGB(x+804,dither*0.2173); // down/right
  83. data.data[x ]=palette[bestIndex][0];
  84. data.data[x+1]=palette[bestIndex][1];
  85. data.data[x+2]=palette[bestIndex][2];
  86. }
  87. c2d.putImageData(data,0,0);
  88. pictureDrawing=true;
  89. //this is bad
  90. function addRGB(index,amount) {
  91. if (index<data.data.length) {
  92. data.data[index ]+=errr*amount;
  93. data.data[index+1]+=errg*amount;
  94. data.data[index+2]+=errb*amount;
  95. }
  96. }
  97. }
  98. ////////////////////////////////////
  99. function updateImage(){ //run this also when change palette plz
  100. if (pictureDrawing)
  101. putImage(z);
  102. }
  103. ///////////////////////////////////
  104. //adjust dither amount
  105. var dither=0.75;
  106. commands.push(new Command("dither", function(param){
  107. if (param.length>1) {
  108. var newDither=parseFloat(param,10);
  109. if (newDither<=1&&newDither>=0) {
  110. dither=newDither;
  111. systemMessage("Dither amount set to "+(dither*100)+"%.");
  112. updateImage();
  113. } else {
  114. warningMessage("Dither amount must be between 0 and 1. (default is 0.75)"); //boring
  115. }
  116. } else {
  117. systemMessage("Dither amount is "+(dither*100)+"%.");
  118. }
  119. }));
  120. //adjust noise amount
  121. var noise=0;
  122. commands.push(new Command("noise", function(param){
  123. if (param.length>1) {
  124. noise=parseFloat(param,10);
  125. systemMessage("Noise amount set to "+noise+".");
  126. updateImage();
  127. } else {
  128. systemMessage("Noise amount is "+noise+".");
  129. }
  130. }));
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement