OWOP Image To Pixel

Script that inserts the image for pixelart in OWOP

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         OWOP Image To Pixel
// @match        *.ourworldofpixels.com/*
// @description  Script that inserts the image for pixelart in OWOP
// @author       Pedro Henrique
// @license      MIT
// @version      3.0
// @namespace https://greasyfork.org/users/831014
// @icon https://www.google.com/s2/favicons?domain=ourworldofpixels.com
// ==/UserScript==
var x = 0;
var y = 0;
var alphar = 255;
var alphag = 255;
var alphab = 255;
var imagesize = 64;

var image = [];
var delay = 50;
var pointpaint = false;
var alphacheck = true;
var replacealphacheck = false;
var running;
function run() {
    var _lastimagepixel = [parseInt(image[image.length-1][0]), parseInt(image[image.length-1][1])];
    running = setInterval(function () {
        var iposX = OWOP.mouse.tileX - x;
        var iposY = OWOP.mouse.tileY - y;
        var currentpos = ((iposX + 1) + (_lastimagepixel[0] * iposY)) + iposY
        if (pointpaint == true) {
            if (currentpos < 0 || currentpos > image.length) {
                currentpos = 0
            }
        }
        else {
            currentpos = 0
        }
        loop:
        for (var i = currentpos; i < image.length; i++) {
            var x1 = x + parseInt(image[i][0]);
            var y1 = y + parseInt(image[i][1]);
            var red = parseInt(image[i][2]);
            var green = parseInt(image[i][3]);
            var blue = parseInt(image[i][4]);
            var alpha = parseInt(image[i][5]);
            if (replacealphacheck == false && alphacheck == true && alpha < 127) {
                red = OWOP.world.getPixel(x1, y1)[0];
                green = OWOP.world.getPixel(x1, y1)[1];
                blue = OWOP.world.getPixel(x1, y1)[2];
            } else if (replacealphacheck == true && alpha < 127) {
                red = alphar;
                green = alphag;
                blue = alphab;
            }
            if (OWOP.world.getPixel(x1, y1) != null && (OWOP.world.getPixel(x1, y1)[0] != red || OWOP.world.getPixel(x1, y1)[1] != green || OWOP.world.getPixel(x1, y1)[2] != blue)) {
                if (x1 < (OWOP.mouse.tileX + 30) && x1 > (OWOP.mouse.tileX - 30) && y1 > (OWOP.mouse.tileY - 30) && y1 < (OWOP.mouse.tileY + 30)) {

                    OWOP.world.setPixel(x1, y1, [red, green, blue], false)
                    break loop;
                }
            }
        }
    }, delay);
}


function initializeComponent() {
    OWOP.windowSys.addWindow(new OWOP.windowSys.class.window("Image to PixelArt", {}, function (win) {
        win.container.style = "height:auto;width:175px;overflow:hidden"

        // Imagem
        win.addObj(document.createTextNode('Choose image'));
        win.addObj(OWOP.util.mkHTML('div', {}));
        var imagem = OWOP.util.mkHTML('img', {
            id: 'imagem',
            width: 32,
            height: 32,
        })
        win.addObj(imagem);
        win.addObj(OWOP.util.mkHTML('div', {}));
        // Tamanho da Imagem
        var imgsizetxt = win.addObj(document.createTextNode('Image Size (0px) : '));
        var imgsizeinput = OWOP.util.mkHTML('input', {
            id: 'imgsizeinput',
            value: 64,
            oninput: function () {
                imgsizetxt.nodeValue = "Image Size (" + this.value + "px) : "
                imagesize = this.value;
            }
        });
        win.addObj(imgsizeinput);
        // Aplicat tamanho
        var applysize_button = OWOP.util.mkHTML('button', {
            id: 'applysize',
            innerHTML: 'Apply Size',
            onclick: function () {
                applysize();
            }
        });
        win.addObj(applysize_button);
        // Escolher imagem
        var escolherimagem = OWOP.util.mkHTML('input', {
            id: 'imageminput',
            type: 'file',
            oninput: function (evt) {
                function readURL(input) {

                    if (input.files && input.files[0]) {
                        var reader = new FileReader();
                        reader.onloadend = async function (e) {
                            var img = new Image();
                            img.src = await e.target.result;
                            document.getElementById("imagem").src = img.src;
                            applysize();
                        }

                        reader.readAsDataURL(input.files[0]);
                    }
                }
                readURL(this)
            }
        });
        win.addObj(escolherimagem);
        // Input da posição da imagem no OWOP
        win.addObj(document.createTextNode('X : '));
        var inputX = OWOP.util.mkHTML('input', {
            id: 'Xinput',
            oninput: function () {
                x = parseInt(this.value);
            }
        });
        win.addObj(OWOP.util.mkHTML('div', {}));
        win.addObj(inputX);
        win.addObj(document.createTextNode('Y : '));
        var inputY = OWOP.util.mkHTML('input', {
            id: 'Yinput',
            oninput: function () {
                y = parseInt(this.value);
            }
        });
        win.addObj(inputY);
        // Delay para aplicar pixel no owop
        var delaytext = win.addObj(document.createTextNode('Delay : '));
        var delayinput = OWOP.util.mkHTML('input', {
            id: 'delayinput',
            type: 'range',
            min: 1, max: 500,
            oninput: function () {
                delaytext.nodeValue = "Delay : " + parseInt(this.value);
                delay = parseInt(this.value);
            }
        });
        win.addObj(delayinput);
        // Modo Point Paint, que pinta o pixel onde você está apontando o mouse
        win.addObj(document.createTextNode('Point Paint'));
        var pointpaintcheck = OWOP.util.mkHTML('input', {
            id: 'pointpaintcheck',
            type: 'checkbox',
            oninput: function () {
                pointpaint = this.checked;
            }
        });
        win.addObj(pointpaintcheck);
        win.addObj(OWOP.util.mkHTML('div', {}));
        // Substituir a cor apha do OWOP
        win.addObj(document.createTextNode('Replace Alpha Color'));
        var alphainput = OWOP.util.mkHTML('input', {
            id: 'replacecheck',
            type: 'checkbox',
            oninput: function () {
                replacealphacheck = this.checked;
            }
        });
        win.addObj(alphainput);
        // Tipo de cor
        var coloriralpha = OWOP.util.mkHTML('input', {
            type: 'color',
            id: 'replacealphacolor',
            onchange: function () {
                alphar = hexToRgb(this.value).r;
                alphag = hexToRgb(this.value).g;
                alphab = hexToRgb(this.value).b;
            }
        });
        win.addObj(coloriralpha);
        win.addObj(OWOP.util.mkHTML('div', {}));
        // Opção de ignorar o Alpha da imagem
        win.addObj(document.createTextNode('Ignore Alpha (.png)'));
        var alphainput = OWOP.util.mkHTML('input', {
            id: 'alphacheck',
            type: 'checkbox',
            checked: 'true',
            oninput: function () {
                alphacheck = this.checked;
            }
        });
        win.addObj(alphainput);
        win.addObj(OWOP.util.mkHTML('div', {}));
        // Botão de Ativar
        var button = OWOP.util.mkHTML('button', {
            id: 'EnableImageToPixel',
            innerHTML: 'Activate',
            onclick: function () {
                if (document.getElementById("Xinput").value != "") {
                    if (document.getElementById("Yinput").value != "") {
                        run();
                        document.getElementById("EnableImageToPixel").disabled = 'true';
                    }
                }
            }
        });
        win.addObj(button);
        // Botão de desativar
        var desativar = OWOP.util.mkHTML('button', {
            id: 'DisableImageToPixel',
            innerHTML: 'Disable',
            onclick: function () {
                clearInterval(running);
                document.getElementById("EnableImageToPixel").removeAttribute("disabled");

            }
        });
        win.addObj(desativar);

        // Evento para definir a posição da imagem no OWOP
        document.addEventListener('keydown', (event) => {
            const keyName = event.key;
            if (keyName == "e" || keyName == "E") {
                document.getElementById("Xinput").value = OWOP.mouse.tileX
                document.getElementById("Yinput").value = OWOP.mouse.tileY
                x = OWOP.mouse.tileX
                y = OWOP.mouse.tileY
            }
        });
    }).move(window.innerWidth - 500, 32));
}

function applysize() {
    var img = new Image();
    img.src = document.getElementById("imagem").src


    var canvas = document.createElement('canvas');
    var imgW = 0;
    var imgH = 0;
    if (imagesize == 0) {
        imgW = img.width;
        imgH = img.height;
    }
    else {
        if (imagesize.toString().includes(";")) {
            let wh = imagesize.toString().split(";");
            imgW = parseInt(wh[0]);
            imgH = parseInt(wh[1]);
        }
        else {
            imgW = imagesize;
            imgH = imagesize;
        }
    }
    canvas.width = imgW;
    canvas.height = imgH;

    var context = canvas.getContext('2d');
    context.drawImage(img, 0, 0, imgW, imgH);
    //context.drawImage(img, 0, 0, img.width, img.height);

    image = [];
    for (var v = 0; v < imgH; v++) {
        for (var i = 0; i < imgW; i++) {
            var pixelData = context.getImageData(i, v, 1, 1).data;
            image.push([i,v,pixelData[0],pixelData[1],pixelData[2],pixelData[3]])
        }
    }
}
function hexToRgb(hex) {
    var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
    return result ? {
        r: parseInt(result[1], 16),
        g: parseInt(result[2], 16),
        b: parseInt(result[3], 16)
    } : null;
}
if (typeof OWOP != 'undefined') initializeComponent();
window.addEventListener('load', function () {
    setTimeout(initializeComponent, 2000);

    // Função que auto reconecta o OWOP
    setInterval(() => {
        if (document.getElementById("load-options").class == "hide") {
            document.getElementById("reconnect-btn").click();
        }
    }, 1000);
});