Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //image thing
- var pasteimagehere=document.createElement("div");
- pasteimagehere.style.width="3.25rem";
- pasteimagehere.id="pasteimagehere";
- pasteimagehere.setAttribute("contenteditable","");
- document.querySelector("#sendpane").appendChild(pasteimagehere);
- //get image from input
- function checkInput(){
- var thing=document.getElementById("pasteimagehere").childNodes[0];
- if (thing){
- if (thing.tagName=="IMG") {
- var pastedImage=new Image();
- pastedImage.crossOrigin="Anonymous";
- pastedImage.onload=function(){
- putimage(pastedImage);
- };
- pastedImage.src=thing.src;
- }
- }
- document.getElementById("pasteimagehere").innerHTML="";
- }
- var imgInt=setInterval(function(){checkInput();},1000);//THE ONLY SOLUTION
- function putimage(img){
- var palette=[];
- for(var i=0;i<4;i++)
- palette.push(fillStyleToRgb(document.querySelectorAll("#chatdraw button-area button.colorChange")[i].style.color));
- var canvas=document.querySelector("#chatdraw canvas");
- var c=canvas.getContext("2d");
- var scale=Math.min(canvas.width/img.width,canvas.height/img.height);
- c.drawImage(img,0,0,img.width,img.height,0,0,img.width*scale,img.height*scale);
- var data=c.getImageData(0,0,canvas.width,canvas.height);
- for(var x=0;x<data.data.length;x+=4){
- //get closeset color
- var low=null;
- var lowindex=null;
- for(var i=0;i<palette.length;i++){
- var ur=data.data[x]+palette[i][0];
- var cr=-data.data[x]+palette[i][0];
- var cg=-data.data[x+1]+palette[i][1];
- var cb=-data.data[x+2]+palette[i][2];
- var a=(2+ur/512)*cr*cr+4*cg*cg+(2+(510-ur)/512)*cb*cb;
- if(low===null||a<low){low=a;lowindex=i;}
- }
- //dithering
- var errr=(data.data[x ]-palette[lowindex][0]);
- var errg=(data.data[x+1]-palette[lowindex][1]);
- var errb=(data.data[x+2]-palette[lowindex][2]);
- addRGB(x+4 ,5/16);
- addRGB(x+796,2/16);
- addRGB(x+800,5/16);
- addRGB(x+804,3/16);
- data.data[x ]=palette[lowindex][0];
- data.data[x+1]=palette[lowindex][1];
- data.data[x+2]=palette[lowindex][2];
- }
- c.putImageData(data,0,0);
- function addRGB(index,amount) {
- if (index<data.data.length) {
- data.data[index ]+=errr*amount;
- data.data[index+1]+=errg*amount;
- data.data[index+2]+=errb*amount;
- }
- }
- function getButtonColors() {
- var colors = [];
- for(var i = 0; i < 4; i++)
- colors.push(fillStyleToRgb(document.querySelectorAll("#chatdraw button-area button.colorChange")[i].style.color));
- return colors;
- }
- }
- var filebrowse=document.createElement("input");
- filebrowse.type="file";
- filebrowse.id="imageupload";
- filebrowse.onchange=function(){loadimg();};
- document.querySelector("#sidepane").appendChild(filebrowse);
- function loadimg(){
- var reader=new FileReader();
- var z=new Image();
- reader.readAsDataURL(document.getElementById("imageupload").files[0]);
- reader.onload=function(){
- z.onload=function(){
- putimage(z);
- };
- z.src=reader.result;
- };
- }
Add Comment
Please, Sign In to add comment