Greasy Fork

来自缓存

Greasy Fork is available in English.

OWOP Image To Pixel

Script that inserts the image for pixelart in OWOP

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 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 http://greasyfork.icu/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);
});