您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Advanced drawing tools with stickers, filters, layers, and collaborative features for drawaria.online!
// ==UserScript== // @name Drawaria Advanced Drawing Studio // @namespace http://tampermonkey.net/ // @version 1.0 // @description Advanced drawing tools with stickers, filters, layers, and collaborative features for drawaria.online! // @author YouTubeDrawaria // @match https://drawaria.online/* // @grant none // @license MIT // @icon https://www.google.com/s2/favicons?sz=64&domain=drawaria.online // ==/UserScript== (function() { 'use strict'; // Advanced drawing state management const drawingState = { currentTool: 'brush', currentLayer: 0, layers: [], history: [], stickers: [], filters: { blur: 0, brightness: 100, contrast: 100, saturation: 100, hue: 0 }, brushSettings: { size: 5, opacity: 1, texture: 'smooth' } }; // Sticker library const stickerLibrary = { emojis: ['😀', '😂', '❤️', '🔥', '⭐', '🌈', '🦄', '🎨', '🎭', '🎪', '🎯', '🎲'], shapes: ['●', '■', '▲', '♦', '★', '♥', '♠', '♣', '♪', '☀', '☁', '⚡'], arrows: ['→', '←', '↑', '↓', '↗', '↘', '↙', '↖', '⟲', '⟳', '↔', '↕'] }; // Create advanced toolbar function createAdvancedToolbar() { const toolbar = document.createElement('div'); toolbar.innerHTML = ` <div id="advanced-toolbar" style=" position: fixed; left: 20px; top: 50%; transform: translateY(-50%); background: linear-gradient(145deg, #2d3748, #4a5568); border-radius: 20px; padding: 20px; box-shadow: 0 15px 35px rgba(0,0,0,0.3); color: white; font-family: 'Segoe UI', sans-serif; z-index: 10000; max-height: 80vh; overflow-y: auto; width: 280px; backdrop-filter: blur(10px); "> <h2 style="margin: 0 0 20px 0; text-align: center; color: #63b3ed;">🎨 Studio Pro</h2> <!-- Drawing Tools --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">✏️ DRAWING TOOLS</h3> <div style="display: grid; grid-template-columns: 1fr 1fr; gap: 8px;"> <button class="tool-btn" data-tool="brush">🖌️ Brush</button> <button class="tool-btn" data-tool="pencil">✏️ Pencil</button> <button class="tool-btn" data-tool="spray">💨 Spray</button> <button class="tool-btn" data-tool="marker">🖍️ Marker</button> </div> </div> <!-- Brush Settings --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">⚙️ BRUSH SETTINGS</h3> <div style="margin: 10px 0;"> <label>Size: <span id="brush-size-display">5</span></label> <input type="range" id="brush-size" min="1" max="50" value="5" style="width: 100%;"> </div> <div style="margin: 10px 0;"> <label>Opacity: <span id="opacity-display">100</span>%</label> <input type="range" id="brush-opacity" min="10" max="100" value="100" style="width: 100%;"> </div> </div> <!-- Stickers --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">🎪 STICKERS</h3> <div id="sticker-tabs" style="display: flex; margin-bottom: 10px;"> <button class="sticker-tab active" data-category="emojis">😀</button> <button class="sticker-tab" data-category="shapes">●</button> <button class="sticker-tab" data-category="arrows">→</button> </div> <div id="sticker-grid" style=" display: grid; grid-template-columns: repeat(4, 1fr); gap: 5px; max-height: 120px; overflow-y: auto; "></div> </div> <!-- Layers --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">📚 LAYERS</h3> <button id="add-layer" style="width: 100%; margin-bottom: 10px;">➕ New Layer</button> <div id="layer-list" style="max-height: 100px; overflow-y: auto;"></div> </div> <!-- Filters --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">🎭 FILTERS</h3> <div style="margin: 8px 0;"> <label>Blur: <span id="blur-display">0</span></label> <input type="range" id="filter-blur" min="0" max="10" value="0" style="width: 100%;"> </div> <div style="margin: 8px 0;"> <label>Brightness: <span id="brightness-display">100</span>%</label> <input type="range" id="filter-brightness" min="50" max="200" value="100" style="width: 100%;"> </div> <div style="margin: 8px 0;"> <label>Contrast: <span id="contrast-display">100</span>%</label> <input type="range" id="filter-contrast" min="50" max="200" value="100" style="width: 100%;"> </div> </div> <!-- Special Effects --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">✨ SPECIAL EFFECTS</h3> <button id="mirror-mode">🪞 Mirror Draw</button> <button id="kaleidoscope-mode">🔮 Kaleidoscope</button> <button id="neon-mode">💡 Neon Glow</button> <button id="pixel-mode">🎮 Pixel Art</button> </div> <!-- Quick Actions --> <div class="tool-section"> <h3 style="color: #90cdf4; margin: 15px 0 10px 0; font-size: 14px;">⚡ QUICK ACTIONS</h3> <button id="save-artwork">💾 Save Art</button> <button id="clear-canvas">🗑️ Clear All</button> <button id="undo-action">↶ Undo</button> <button id="redo-action">↷ Redo</button> </div> </div> `; // Add CSS styles const style = document.createElement('style'); style.textContent = ` .tool-btn, .sticker-tab, #advanced-toolbar button { background: rgba(255, 255, 255, 0.1); border: 2px solid rgba(255, 255, 255, 0.2); color: white; padding: 8px 12px; border-radius: 8px; cursor: pointer; transition: all 0.3s ease; font-size: 12px; margin: 2px 0; } .tool-btn:hover, .sticker-tab:hover, #advanced-toolbar button:hover { background: rgba(99, 179, 237, 0.3); border-color: #63b3ed; transform: translateY(-2px); box-shadow: 0 5px 15px rgba(99, 179, 237, 0.3); } .tool-btn.active, .sticker-tab.active { background: #63b3ed; border-color: #3182ce; } .sticker-item { background: rgba(255, 255, 255, 0.1); border: 1px solid rgba(255, 255, 255, 0.2); padding: 8px; border-radius: 6px; cursor: pointer; text-align: center; transition: all 0.2s ease; font-size: 16px; } .sticker-item:hover { background: rgba(99, 179, 237, 0.3); transform: scale(1.1); } .layer-item { background: rgba(255, 255, 255, 0.1); padding: 8px; margin: 4px 0; border-radius: 6px; cursor: pointer; display: flex; justify-content: space-between; align-items: center; } .layer-item.active { background: #63b3ed; } #advanced-toolbar input[type="range"] { background: rgba(255, 255, 255, 0.2); border-radius: 10px; height: 6px; margin: 5px 0; } `; document.head.appendChild(style); document.body.appendChild(toolbar); return toolbar; } // Advanced drawing engine class AdvancedDrawingEngine { constructor() { this.canvas = null; this.ctx = null; this.isDrawing = false; this.mirrorMode = false; this.kaleidoscopeMode = false; this.neonMode = false; this.pixelMode = false; this.setupCanvas(); this.setupEventListeners(); } setupCanvas() { // Create overlay canvas for advanced features this.canvas = document.createElement('canvas'); this.canvas.style.cssText = ` position: fixed; top: 0; left: 0; width: 100vw; height: 100vh; pointer-events: none; z-index: 9998; `; this.canvas.width = window.innerWidth; this.canvas.height = window.innerHeight; this.ctx = this.canvas.getContext('2d'); document.body.appendChild(this.canvas); } setupEventListeners() { // Enable drawing on our overlay when in special modes document.addEventListener('mousedown', (e) => { if (this.mirrorMode || this.kaleidoscopeMode || this.neonMode) { this.canvas.style.pointerEvents = 'auto'; this.isDrawing = true; this.draw(e); } }); document.addEventListener('mousemove', (e) => { if (this.isDrawing) this.draw(e); }); document.addEventListener('mouseup', () => { this.isDrawing = false; }); } draw(e) { const rect = this.canvas.getBoundingClientRect(); const x = e.clientX - rect.left; const y = e.clientY - rect.top; this.ctx.globalAlpha = drawingState.brushSettings.opacity / 100; this.ctx.lineWidth = drawingState.brushSettings.size; this.ctx.lineCap = 'round'; if (this.neonMode) { this.ctx.shadowColor = '#00ffff'; this.ctx.shadowBlur = 20; this.ctx.strokeStyle = '#00ffff'; } else { this.ctx.shadowBlur = 0; this.ctx.strokeStyle = '#ffffff'; } this.ctx.beginPath(); if (this.mirrorMode) { // Draw on both sides this.ctx.arc(x, y, drawingState.brushSettings.size/2, 0, Math.PI * 2); this.ctx.arc(window.innerWidth - x, y, drawingState.brushSettings.size/2, 0, Math.PI * 2); } else if (this.kaleidoscopeMode) { // Draw kaleidoscope pattern const centerX = window.innerWidth / 2; const centerY = window.innerHeight / 2; for (let i = 0; i < 8; i++) { const angle = (i * Math.PI * 2) / 8; const newX = centerX + (x - centerX) * Math.cos(angle) - (y - centerY) * Math.sin(angle); const newY = centerY + (x - centerX) * Math.sin(angle) + (y - centerY) * Math.cos(angle); this.ctx.arc(newX, newY, drawingState.brushSettings.size/2, 0, Math.PI * 2); } } else { this.ctx.arc(x, y, drawingState.brushSettings.size/2, 0, Math.PI * 2); } this.ctx.fill(); } applyFilters() { const filters = drawingState.filters; const filterString = ` blur(${filters.blur}px) brightness(${filters.brightness}%) contrast(${filters.contrast}%) saturate(${filters.saturation}%) hue-rotate(${filters.hue}deg) `; this.canvas.style.filter = filterString; } addSticker(sticker, x, y) { this.ctx.font = '30px Arial'; this.ctx.textAlign = 'center'; this.ctx.fillText(sticker, x, y); } } // Initialize the advanced drawing system function init() { const toolbar = createAdvancedToolbar(); const engine = new AdvancedDrawingEngine(); // Load stickers function loadStickers(category) { const grid = document.getElementById('sticker-grid'); grid.innerHTML = ''; stickerLibrary[category].forEach(sticker => { const item = document.createElement('div'); item.className = 'sticker-item'; item.textContent = sticker; item.onclick = () => { // Enable sticker placement mode document.body.style.cursor = 'crosshair'; const handler = (e) => { engine.addSticker(sticker, e.clientX, e.clientY); document.body.style.cursor = 'default'; document.removeEventListener('click', handler); }; document.addEventListener('click', handler); }; grid.appendChild(item); }); } // Initialize sticker grid loadStickers('emojis'); // Event listeners for toolbar document.querySelectorAll('.sticker-tab').forEach(tab => { tab.onclick = (e) => { document.querySelectorAll('.sticker-tab').forEach(t => t.classList.remove('active')); e.target.classList.add('active'); loadStickers(e.target.dataset.category); }; }); // Brush settings document.getElementById('brush-size').oninput = (e) => { drawingState.brushSettings.size = parseInt(e.target.value); document.getElementById('brush-size-display').textContent = e.target.value; }; document.getElementById('brush-opacity').oninput = (e) => { drawingState.brushSettings.opacity = parseInt(e.target.value); document.getElementById('opacity-display').textContent = e.target.value; }; // Filter controls document.getElementById('filter-blur').oninput = (e) => { drawingState.filters.blur = parseInt(e.target.value); document.getElementById('blur-display').textContent = e.target.value; engine.applyFilters(); }; document.getElementById('filter-brightness').oninput = (e) => { drawingState.filters.brightness = parseInt(e.target.value); document.getElementById('brightness-display').textContent = e.target.value; engine.applyFilters(); }; document.getElementById('filter-contrast').oninput = (e) => { drawingState.filters.contrast = parseInt(e.target.value); document.getElementById('contrast-display').textContent = e.target.value; engine.applyFilters(); }; // Special effects document.getElementById('mirror-mode').onclick = () => { engine.mirrorMode = !engine.mirrorMode; document.getElementById('mirror-mode').style.background = engine.mirrorMode ? '#63b3ed' : 'rgba(255, 255, 255, 0.1)'; }; document.getElementById('kaleidoscope-mode').onclick = () => { engine.kaleidoscopeMode = !engine.kaleidoscopeMode; document.getElementById('kaleidoscope-mode').style.background = engine.kaleidoscopeMode ? '#63b3ed' : 'rgba(255, 255, 255, 0.1)'; }; document.getElementById('neon-mode').onclick = () => { engine.neonMode = !engine.neonMode; document.getElementById('neon-mode').style.background = engine.neonMode ? '#63b3ed' : 'rgba(255, 255, 255, 0.1)'; }; // Quick actions document.getElementById('save-artwork').onclick = () => { const link = document.createElement('a'); link.download = `drawaria-art-${Date.now()}.png`; link.href = engine.canvas.toDataURL(); link.click(); }; document.getElementById('clear-canvas').onclick = () => { if (confirm('Clear all your artwork?')) { engine.ctx.clearRect(0, 0, engine.canvas.width, engine.canvas.height); } }; // Welcome animation setTimeout(() => { const welcome = document.createElement('div'); welcome.innerHTML = ` <div style=" position: fixed; top: 20px; left: 320px; background: linear-gradient(45deg, #667eea, #764ba2); color: white; padding: 20px; border-radius: 15px; z-index: 10001; animation: slideIn 0.5s ease-out; box-shadow: 0 10px 30px rgba(0,0,0,0.3); "> <h3>🎨 Advanced Studio Activated!</h3> <p>• Try Mirror Drawing mode! 🪞</p> <p>• Add stickers to your art! 🎪</p> <p>• Apply real-time filters! 🎭</p> <p>• Create with special effects! ✨</p> </div> `; const welcomeStyle = document.createElement('style'); welcomeStyle.textContent = ` @keyframes slideIn { from { transform: translateX(-100%); opacity: 0; } to { transform: translateX(0); opacity: 1; } } `; document.head.appendChild(welcomeStyle); document.body.appendChild(welcome); setTimeout(() => welcome.remove(), 6000); }, 1000); console.log('🎨 Advanced Drawing Studio loaded!'); } // Initialize when page loads if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', init); } else { init(); } })();