您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows you to draw images by uploading and then clicking. MAKE SURE YOUR IMAGES ARE LESS THAN 100x100px
当前为
- // ==UserScript==
- // @name pixely.cf tools
- // @namespace http://tampermonkey.net/
- // @version 1.7
- // @description Allows you to draw images by uploading and then clicking. MAKE SURE YOUR IMAGES ARE LESS THAN 100x100px
- // @author theusaf
- // @match http://pixely.cf/
- // @match http://qwertyquerty.cf/
- // @grant none
- // ==/UserScript==
- var drawScale = 10;
- window.finalInfo = [];
- window.sketchint = 0;
- window.isPlacingImage = false;
- var di = document.createElement('div'); //div
- di.style.background = 'white';
- di.style.display = 'none';
- di.style.top = "0px";
- di.style.position = "fixed";
- var im = new Image(); //image
- im.crossOrigin = "Anonymous";
- var ca = document.createElement('canvas'); //canvas
- ca.style.display = 'none';
- var fi = document.createElement('input'); //file input
- fi.type = 'file';
- di.style.float = 'left';
- var ct = ca.getContext('2d'); //context
- document.body.addEventListener('keydown',toggleFile);
- function toggleFile(evt){
- if(evt.keyCode == 16){
- evt.preventDefault();
- di.style.display = di.style.display == "block" ? "none" : "block";
- }
- }
- fi.onchange = function(e){
- if(!e){
- return;
- }
- var reader = new FileReader();
- reader.onload = function(e){
- im.src = e.target.result;
- }
- reader.readAsDataURL(e.target.files[0]);
- }
- const int = document.createElement("input");
- int.type = "number";
- int.placeholder = "Max size";
- int.min = 1;
- int.max = 100;
- int.step = 1;
- int.value = 100;
- im.onload = function(){
- const max = Number(int.value);
- console.log('loaded');
- if(im.src.length > 0){
- //change canvas width and height.
- ca.width = im.width;
- ca.height = im.height;
- if(im.width <= max && im.height <= max){
- ct.drawImage(im,0,0);
- }else{
- if(im.width > im.height){
- const scalar = im.height / im.width;
- ca.width = max;
- ca.height = max * scalar;
- ct.drawImage(im,0,0,max,max*scalar);
- }else{
- const scalar = im.width / im.height;
- ca.width = max * scalar;
- ca.height = max;
- ct.drawImage(im,0,0,max*scalar,max);
- }
- }
- let data = ct.getImageData(0,0,im.width,im.height).data;
- let bestColor = 0;
- let bestPercent = 0;
- finalInfo = [];
- let x = 0;
- let y = 0;
- let maxX = ca.width;
- for(let i = 0; i < data.length; i+=4){
- //loop through colors
- /*global colors*/
- if(x == maxX){
- console.log("x has hit max: " + maxX);
- y++;
- x = 0;
- }
- for(let j in colors){
- if(hcd(colors[j],rth(data[i],data[Number(i)+1],data[Number(i)+2])) > bestPercent){
- bestPercent = hcd(colors[j],rth(data[i],data[Number(i)+1],data[Number(i)+2]));
- bestColor = j;
- }
- }
- //if alpha is less than 40, dont push.
- if(data[Number(i)+3] <= 40){
- x++;
- bestPercent = 0;
- bestColor = 0;
- continue;
- }
- //now that best color has been set, add to a thingy.
- finalInfo.push({
- x: x,
- y: y,
- c: Number(bestColor)
- });
- x++;
- bestPercent = 0;
- bestColor = 0;
- }
- isPlacingImage = true;
- sketchint = 0;
- drawScale = SCALE;
- console.log(finalInfo);
- }
- }
- /*global canvas*/
- /*global getMousePos*/
- /*global isPlacingImage*/
- /*global finalInfo*/
- /*global si*/
- canvas.addEventListener('click',function(e){
- console.log('click!')
- let x = Math.floor(getMousePos(canvas,e).x);
- let y = Math.floor(getMousePos(canvas,e).y);
- if(isPlacingImage){
- console.log('placing image');
- isPlacingImage = false;
- di.style.display = "none";
- //start interval
- /*global io*/
- /*global SCALE*/
- var sketch = setInterval(function(){
- if(finalInfo.length == 0){
- clearInterval(sketch);
- return;
- }
- if(sketchint >= finalInfo.length){
- clearInterval(sketch);
- console.log("done");
- return;
- }
- if(finalInfo[sketchint].x + (x/drawScale) >= 500 || finalInfo[sketchint].y + (y/drawScale) >= 500){
- sketchint++;
- console.log('hit canvas limit');
- return;
- }
- console.log('drawing');
- //adding listener to skip over useless stuff..
- /*global pixels*/
- let ok = false;
- while(!ok){
- if(pixels[finalInfo[sketchint].y + Math.floor(y/drawScale)][finalInfo[sketchint].x + Math.floor(x/drawScale)] == finalInfo[sketchint].c){
- sketchint++;
- continue;
- }
- ok = true;
- }
- io.emit('set',{x:finalInfo[sketchint].x + Math.floor(x/drawScale),y:finalInfo[sketchint].y + Math.floor(y/drawScale),c:finalInfo[sketchint].c});
- sketchint++;
- },300);
- }
- });
- function hcd(hex1, hex2) {
- hex1 = hex1.split("#").length == 1 ? hex1 : hex1.split("#")[1];
- hex2 = hex2.split("#").length == 1 ? hex2 : hex2.split("#")[1];
- // get red/green/blue int values of hex1
- var r1 = parseInt(hex1.substring(0, 2), 16);
- var g1 = parseInt(hex1.substring(2, 4), 16);
- var b1 = parseInt(hex1.substring(4, 6), 16);
- // get red/green/blue int values of hex2
- var r2 = parseInt(hex2.substring(0, 2), 16);
- var g2 = parseInt(hex2.substring(2, 4), 16);
- var b2 = parseInt(hex2.substring(4, 6), 16);
- // calculate differences between reds, greens and blues
- var r = 255 - Math.abs(r1 - r2);
- var g = 255 - Math.abs(g1 - g2);
- var b = 255 - Math.abs(b1 - b2);
- // limit differences between 0 and 1
- r /= 255;
- g /= 255;
- b /= 255;
- // 0 means opposit colors, 1 means same colors
- return (r + g + b) / 3;
- } //compare hex values
- function rth(r, g, b) {
- return "#" + componentToHex(r) + componentToHex(g) + componentToHex(b);
- } //rbg to hex
- function componentToHex(c) {
- var hex = c.toString(16);
- return hex.length == 1 ? "0" + hex : hex;
- }
- di.append(fi,int);
- di.append(ca);
- document.body.append(di);
- //add slider for zoom
- let sli = document.createElement('input'); //slider input. changes scale.
- sli.type = 'range';
- sli.min = 1;
- sli.max = 20;
- sli.value = 10;
- sli.step = 1;
- let fdiv = document.getElementById('colorpicker'); //a div that has the colors
- fdiv.append(sli);
- /*global draw*/
- sli.oninput = function(){
- let DIMS = [pixels[0].length, pixels.length];
- SCALE = sli.value;
- canvas.width = SCALE * DIMS[0];
- canvas.height = SCALE * DIMS[1];
- draw(pixels);
- if(isPlacingImage){
- drawScale = SCALE;
- }
- }
- //hide color picker and slider
- document.body.addEventListener('keydown',togglePicker);
- function togglePicker(e){
- fdiv.style.display = e.keyCode == 16 ? fdiv.style.display == "none" ? "block" : "none" : fdiv.style.display;
- }