AI摘要

油猴脚本“稿定设计增强工具”可拦截并替换水印SVG,实现无水印下载;同时提供清屏与Canvas一键导出PNG功能,安装后自动在编辑器顶部添加按钮。

说明

脚本安装好后就可以在稿定设计网上随便下载无水印的图片了,在工作台编辑的时候水印依然是存在的,这个不用管,先编辑好你的作品。

代码

// ==UserScript==
// [url=home.php?mod=space&uid=170990]@name[/url]         稿定设计增强工具(去水印+下载)
// [url=home.php?mod=space&uid=467642]@namespace[/url]    https://greasyfork.org/zh-CN/users/1344035-leng-y
// [url=home.php?mod=space&uid=1248337]@version[/url]      0.1
// [url=home.php?mod=space&uid=686208]@AuThor[/url]       shunxing
// @description  稿定设计去水印,支持清屏和Canvas内容下载,2025年更新
// [url=home.php?mod=space&uid=195849]@match[/url]        https://www.gaoding.com/editor/design?*
// @match        https://www.focodesign.com/editor/design?*
// @match        https://www.focodesign.com/editor/odyssey?template_id=*
// [url=home.php?mod=space&uid=609072]@grant[/url]        unsafeWindow
// @downloadURL  https://update.greasyfork.org/scripts/502420/%E7%A8%BF%E5%AE%9A%E8%AE%BE%E8%AE%A1%E5%8E%BB%E6%B0%B4%E5%8D%B018.user.js
// @updateURL    https://update.greasyfork.org/scripts/502420/%E7%A8%BF%E5%AE%9A%E8%AE%BE%E8%AE%A1%E5%8E%BB%E6%B0%B4%E5%8D%B018.meta.js
// ==/UserScript==
 
(function() {
    'use strict';
 
    // 透明图片(用于替换水印)
    const blockedImageReplacement = 'data:image/webp;base64,UklGRpYAAABXRUJQVlA4WAoAAAAQAAAAAAAAAAAAQUxQSAIAAAAAAFZQOCAYAAAAMAEAnQEqAQABAA/A/iWkAANwAP7lagAAUFNBSU4AAAA4QklNA+0AAAAAABAASAAAAAEAAgBIAAAAAQACOEJJTQQoAAAAAAAMAAAAAj/wAAAAAAAAOEJJTQRDAAAAAAAOUGJlVwEQAAYAAAAAAAA=';
 
    // 拦截并替换水印图片
    function setupWatermarkRemoval() {
        const originalSetSrc = Object.getOwnPropertyDescriptor(HTMLImageElement.prototype, 'src').set;
 
        Object.defineProperty(HTMLImageElement.prototype, 'src', {
            set(value) {
                // 检测水印SVG特征
                if (value.startsWith('data:image/svg+xml;base64') &&
                    value.includes('Cjxzdmcgd2lkdGg9IjMwMCIgaGVpZ2h0PSIyNTAi')) {
                    console.log('已拦截水印图片');
                    originalSetSrc.call(this, blockedImageReplacement);
                    return;
                }
                originalSetSrc.call(this, value);
            },
        });
 
        console.log('水印拦截功能已启动');
    }
 
    // 初始化清屏功能
    function initClearScreen(buttonContainer) {
        // 创建清屏按钮
        const clearBtn = document.createElement('button');
        clearBtn.className = 'download-popover__primary gda-btn gda-btn-secondary custom-clear-screen-btn';
        clearBtn.innerHTML = '<span>清屏</span>';
        clearBtn.style.marginRight = '8px';
 
        let isHidden = false;
 
        clearBtn.addEventListener('click', () => {
            const elementsToToggle = [
                ...document.querySelectorAll('.resource-station, .right-panel, .main__bottom, .dui-noob-guide-index')
            ];
 
            if (!isHidden) {
                // 隐藏元素
                elementsToToggle.forEach(element => {
                    if (element) {
                        element.style.display = 'none';
                    }
                });
                clearBtn.querySelector('span').textContent = '恢复';
            } else {
                // 恢复显示
                elementsToToggle.forEach(element => {
                    if (element) {
                        element.style.removeProperty('display');
                    }
                });
                clearBtn.querySelector('span').textContent = '清屏';
            }
 
            isHidden = !isHidden;
        });
 
        buttonContainer.appendChild(clearBtn);
    }
 
    // 初始化Canvas下载功能
    function initCanvasDownload(buttonContainer) {
        // 创建下载按钮
        const downloadBtn = document.createElement('button');
        downloadBtn.className = 'download-popover__primary gda-btn gda-btn-primary custom-download-btn';
        downloadBtn.innerHTML = '<span>下载画布</span>';
 
        downloadBtn.addEventListener('click', () => {
            // 查找Canvas元素
            const canvas = document.querySelector('.editor-stage .infinite-canvas');
            if (!canvas) {
                alert('未找到画布内容,请确保编辑器已完全加载');
                return;
            }
 
            try {
                // 显示加载状态
                const originalText = downloadBtn.querySelector('span').textContent;
                downloadBtn.querySelector('span').textContent = '处理中...';
                downloadBtn.disabled = true;
 
                // 延迟处理确保画布渲染完成
                setTimeout(() => {
                    try {
                        // 获取Canvas数据并创建下载链接
                        const dataUrl = canvas.toDataURL('image/png');
                        const link = document.createElement('a');
                        link.href = dataUrl;
 
                        // 生成带时间戳的文件名
                        const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
                        link.download = `稿定设计导出_${timestamp}.png`;
 
                        // 触发下载
                        document.body.appendChild(link);
                        link.click();
                        document.body.removeChild(link);
 
                        // 恢复按钮状态
                        setTimeout(() => {
                            downloadBtn.querySelector('span').textContent = originalText;
                            downloadBtn.disabled = false;
                        }, 800);
 
                    } catch (error) {
                        console.error('下载失败:', error);
                        alert('下载失败: ' + error.message);
                        downloadBtn.querySelector('span').textContent = originalText;
                        downloadBtn.disabled = false;
                    }
                }, 600);
 
            } catch (error) {
                console.error('下载功能错误:', error);
                alert('下载功能出现错误,请检查控制台');
                downloadBtn.disabled = false;
            }
        });
 
        buttonContainer.appendChild(downloadBtn);
    }
 
    // 等待页面加载完成后添加按钮
    function setupCustomButtons() {
        const checkInterval = 500;
        const maxAttempts = 30; // 最多尝试15秒
        let attempts = 0;
 
        const intervalId = setInterval(() => {
            attempts++;
            const exportContainer = document.querySelector('.dc-header__export-actions');
 
            if (exportContainer) {
                clearInterval(intervalId);
 
                // 创建按钮容器
                const customBtnGroup = document.createElement('div');
                customBtnGroup.className = 'gda-btn-group custom-actions-group';
                customBtnGroup.style.marginRight = '12px';
 
                // 添加功能按钮
                initClearScreen(customBtnGroup);
                initCanvasDownload(customBtnGroup);
 
                // 将按钮组插入到页面
                exportContainer.parentNode.insertBefore(customBtnGroup, exportContainer);
                console.log('自定义功能按钮已添加');
            } else if (attempts >= maxAttempts) {
                clearInterval(intervalId);
                console.warn('未找到导出按钮容器,无法添加自定义功能');
            }
        }, checkInterval);
    }
 
    // 启动所有功能
    function init() {
        setupWatermarkRemoval();
        setupCustomButtons();
        console.log('稿定设计增强工具已初始化');
    }
 
    // 页面加载完成后初始化
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', init);
    } else {
        init();
    }
})();
如果觉得我的文章对你有用,请随意赞赏
END
本文作者:
文章标题:去除搞定设计水印的油猴插件
本文地址:https://hh2xx.cn/archives/399/
版权说明:若无注明,本文皆HH の Blog's原创,转载请保留文章出处。