您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds advanced controls for Drawaria, including Fast Color Flow, avatar boundary control, brushcursor restrictions, auto-drawing, and more.
// ==UserScript== // @name Drawaria Fast Color Flow+ // @namespace http://tampermonkey.net/ // @version 1.0 // @description Adds advanced controls for Drawaria, including Fast Color Flow, avatar boundary control, brushcursor restrictions, auto-drawing, and more. // @author YouTube // @match https://drawaria.online/* // @icon https://www.google.com/s2/favicons?sz=64&domain=drawaria.online // @grant none // @license MIT // ==/UserScript== (function () { 'use strict'; // 1. Ajustar el máximo de "Flujo de color" a 200 const colorFlowInput = document.querySelector('input[data-localprop="colorflow"]'); if (colorFlowInput) { colorFlowInput.setAttribute('max', '200'); } // 2. Deshacer/Rehacer const undoStack = []; const redoStack = []; const canvas = document.getElementById('canvas'); const ctx = canvas.getContext('2d'); // Crear botones y agregarlos al menú const undoButton = document.createElement('button'); undoButton.innerText = 'Undo'; undoButton.id = 'undo-button'; const redoButton = document.createElement('button'); redoButton.innerText = 'Redo'; redoButton.id = 'redo-button'; const exportButton = document.createElement('button'); exportButton.innerText = 'Export Canvas'; exportButton.id = 'export-button'; // Agregar botones al menú const menu = document.querySelector('.drawcontrols-settingscontainer'); menu.appendChild(undoButton); menu.appendChild(redoButton); menu.appendChild(exportButton); // Funcionalidad de Deshacer/Rehacer undoButton.addEventListener('click', () => { if (undoStack.length > 0) { const lastAction = undoStack.pop(); redoStack.push(lastAction); ctx.putImageData(lastAction, 0, 0); } }); redoButton.addEventListener('click', () => { if (redoStack.length > 0) { const lastAction = redoStack.pop(); undoStack.push(lastAction); ctx.putImageData(lastAction, 0, 0); } }); canvas.addEventListener('mouseup', () => { undoStack.push(ctx.getImageData(0, 0, canvas.width, canvas.height)); redoStack.length = 0; // Clear redo stack after new action }); // Funcionalidad de Exportar Lienzo exportButton.addEventListener('click', () => { const link = document.createElement('a'); link.download = 'canvas.png'; link.href = canvas.toDataURL('image/png'); link.click(); }); // 3. Dibujo automático: cargar una imagen y dibujarla en el canvas const autoDrawSection = document.createElement('div'); autoDrawSection.innerHTML = ` <div class="drawcontrols-settingstab"> <label for="auto-draw-image">Auto-draw from image:</label> <input type="file" id="auto-draw-image" accept="image/*"> <button id="start-auto-draw">Start Auto-draw</button> </div> `; menu.appendChild(autoDrawSection); document.getElementById('start-auto-draw').addEventListener('click', function () { const fileInput = document.getElementById('auto-draw-image'); if (fileInput.files.length > 0) { const file = fileInput.files[0]; const reader = new FileReader(); reader.onload = function (e) { const img = new Image(); img.src = e.target.result; img.onload = function () { ctx.drawImage(img, 0, 0, canvas.width, canvas.height); }; }; reader.readAsDataURL(file); } }); // 4. Agregar submenús, botones, rangos y selectores para personalización const customizationSection = document.createElement('div'); customizationSection.innerHTML = ` <div class="drawcontrols-settingstab"> <label for="brush-size-selector">Brush Size:</label> <select id="brush-size-selector" data-localprop="brushSize"> <option value="1">Small</option> <option value="2">Medium</option> <option value="3">Large</option> </select> </div> <div class="drawcontrols-settingstab"> <label for="opacity-range">Opacity:</label> <input type="range" id="opacity-range" min="0" max="1" step="0.1" data-localprop="opacity"> </div> `; menu.appendChild(customizationSection); document.getElementById('brush-size-selector').addEventListener('change', function () { const brushSize = this.value; // Aquí puedes ajustar el tamaño del pincel en el canvas console.log(`Brush size set to: ${brushSize}`); }); document.getElementById('opacity-range').addEventListener('input', function () { const opacity = this.value; // Aquí puedes ajustar la opacidad del pincel en el canvas console.log(`Opacity set to: ${opacity}`); }); // Estilos adicionales para mejorar la apariencia const style = document.createElement('style'); style.innerHTML = ` .drawcontrols-settingscontainer { background: linear-gradient(135deg, #ffeb3b, #fbc02d); border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); padding: 10px; animation: fadeIn 0.5s ease-in-out; } .drawcontrols-settingstab { margin-bottom: 10px; } .drawcontrols-settingstab label { font-weight: bold; margin-right: 10px; color: #333; } .drawcontrols-settingstab input[type="range"] { width: 100%; } .drawcontrols-settingstab select { width: 100%; padding: 5px; border-radius: 5px; border: 1px solid #ccc; } #undo-button, #redo-button, #export-button, #start-auto-draw { background: linear-gradient(135deg, #ff80ab, #ff4081); color: #fff; border: none; border-radius: 5px; padding: 10px; margin: 5px 0; cursor: pointer; transition: transform 0.2s ease, box-shadow 0.2s ease; } #undo-button:hover, #redo-button:hover, #export-button:hover, #start-auto-draw:hover { transform: scale(1.05); box-shadow: 0 0 10px rgba(255, 64, 129, 0.5); } @keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } } `; document.head.appendChild(style); })();