Advertisement
12Me21

image code

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