Advertisement
Guest User

Untitled

a guest
Apr 7th, 2020
315
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // Friendship Bracelet Color Changer
  2. // Version 1.0
  3. // Bookmarklet:
  4. // javascript:(function(){document.body.appendChild(document.createElement('script')).src='https://gist.githubusercontent.com/aopell/bb82416cd9fab6f6ce8577875084dfa4/raw/friendship-bracelets.js' })();
  5.  
  6. (function () {
  7.     let image = document.querySelector(".pattern_img");
  8.     let canvas = document.createElement("canvas");
  9.     canvas.width = image.width;
  10.     canvas.height = image.height;
  11.  
  12.     let ctx = canvas.getContext("2d");
  13.     ctx.drawImage(image, 0, 0, image.width, image.height);
  14.  
  15.     let imgData = ctx.getImageData(0, 0, canvas.width, canvas.height);
  16.     console.log(imgData.data);
  17.  
  18.     let colors = new Set();
  19.  
  20.     for (var i = 0; i < imgData.data.length; i += 4) {
  21.         let x = (i / 4) % canvas.width;
  22.         let y = (i / 4) / canvas.width;
  23.         let r = imgData.data[i];
  24.         let g = imgData.data[i + 1];
  25.         let b = imgData.data[i + 2];
  26.         let rgb = r * (16 ** 4) + g * (16 ** 2) + b;
  27.         if (x > 10 && !colors.has(rgb)) {
  28.             let hexCode = `#${rgb.toString(16).padStart(6, "0")}`.toUpperCase();
  29.             colors.add(rgb);
  30.         }
  31.     }
  32.  
  33.     let container = image.parentElement;
  34.     let p = document.createElement("p");
  35.     container.prepend(p);
  36.     p.style.margin = 0;
  37.     p.style.marginBottom = "10px";
  38.  
  39.     let colormap = {};
  40.  
  41.     for (let color of Array.from(colors)) {
  42.         colormap[color] = color;
  43.         let hexCode = `#${color.toString(16).padStart(6, "0")}`;
  44.  
  45.         let colorPicker = document.createElement("input");
  46.         colorPicker.type = "color";
  47.         colorPicker.dataset.color = color;
  48.         colorPicker.value = hexCode;
  49.         colorPicker.addEventListener("input", event => {
  50.             colormap[color] = Number.parseInt(colorPicker.value.substring(1), 16);
  51.             updateImage();
  52.         });
  53.  
  54.         p.appendChild(colorPicker);
  55.     }
  56.  
  57.     container.appendChild(canvas);
  58.     image.style.display = "none";
  59.  
  60.     function updateImage() {
  61.         let data = imgData.data.slice();
  62.         for (var i = 0; i < data.length; i += 4) {
  63.             let r = data[i];
  64.             let g = data[i + 1];
  65.             let b = data[i + 2];
  66.             let rgb = r * (16 ** 4) + g * (16 ** 2) + b;
  67.             let mapped = colormap[rgb];
  68.             if (mapped !== undefined) {
  69.                 let mr = (mapped / 256 / 256) % 256;
  70.                 let mg = (mapped / 256) % 256;
  71.                 let mb = mapped % 256;
  72.  
  73.                 data[i] = mr;
  74.                 data[i + 1] = mg;
  75.                 data[i + 2] = mb;
  76.             }
  77.         }
  78.         ctx.putImageData(new ImageData(data, imgData.width, imgData.height), 0, 0);
  79.     }
  80. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement