Greasy Fork

来自缓存

Greasy Fork is available in English.

豆包AI生图去水印(增强版)

豆包AI生图下载原图去水印,并添加用户提示

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         豆包AI生图去水印(增强版)
// @namespace    http://tampermonkey.net/
// @version      1.2.0
// @description  豆包AI生图下载原图去水印,并添加用户提示
// @author       mzh
// @homepage https://blog.csdn.net/u011027547
// @match        https://www.doubao.com/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=doubao.com
// @grant        none
// @license      GPL-3.0
// ==/UserScript==

(function() {
    'use strict';

    let scriptActive = false;

    function showActivationMessage() {
        // 避免重复提示
        if (scriptActive) return;
        scriptActive = true;

        // 控制台日志
        console.log('🚫 豆包AI去水印脚本已激活,正在监控图片数据...');

        // 页面顶部状态栏
        const statusBar = document.createElement('div');
        statusBar.textContent = '豆包AI去水印:已启用(检测到图片生成时会自动去除水印)';
        statusBar.style.cssText = `
            position: fixed;
            top: 0;
            left: 0;
            width: 100%;
            background: #4CAF50;
            color: white;
            padding: 8px;
            text-align: center;
            font-size: 14px;
            z-index: 9999;
            box-shadow: 0 2px 5px rgba(0,0,0,0.2);
        `;
        document.body.appendChild(statusBar);

        // 5秒后淡出状态栏
        setTimeout(() => {
            statusBar.style.transition = 'opacity 0.5s';
            statusBar.style.opacity = '0';
            setTimeout(() => {
                if (document.body.contains(statusBar)) {
                    document.body.removeChild(statusBar);
                }
            }, 500);
        }, 5000);
    }

    function showSuccessToast() {
        const toast = document.createElement('div');
        toast.innerHTML = '✅ 已成功去除图片水印,可下载无水印原图';
        toast.style.cssText = `
            position: fixed;
            top: 20px;
            right: 20px;
            background: #2196F3;
            color: white;
            padding: 12px 16px;
            border-radius: 4px;
            z-index: 10000;
            box-shadow: 0 4px 12px rgba(0,0,0,0.15);
            font-size: 14px;
            max-width: 300px;
        `;
        document.body.appendChild(toast);

        setTimeout(() => {
            if (document.body.contains(toast)) {
                toast.style.transition = 'opacity 0.5s';
                toast.style.opacity = '0';
                setTimeout(() => {
                    if (document.body.contains(toast)) {
                        document.body.removeChild(toast);
                    }
                }, 500);
            }
        }, 3000);
    }

    function findAllKeysInJson(obj, key) {
        const results = [];
        function search(current) {
            if (current && typeof current === 'object') {
                if (!Array.isArray(current) && Object.prototype.hasOwnProperty.call(current, key)) {
                    results.push(current[key]);
                }
                const items = Array.isArray(current) ? current : Object.values(current);
                for (const item of items) {
                    search(item);
                }
            }
        }
        search(obj);
        return results;
    }

    let _parse = JSON.parse;
    JSON.parse = function(data) {
        let jsonData = _parse(data);
        if (!data.match('creations')) return jsonData;

        let creations = findAllKeysInJson(jsonData, 'creations');
        if (creations.length > 0) {
            creations.forEach((creation) => {
                creation.map((item) => {
                    if (item.image && item.image.image_ori_raw && item.image.image_ori_raw.url) {
                        const rawUrl = item.image.image_ori_raw.url;
                        item.image.image_ori.url = rawUrl;
                        // 预览时也去水印
                        item.image.image_preview.url = rawUrl;
                        item.image.image_thumb.url = rawUrl;
                    }
                    return item;
                });
            });

            // 显示成功提示
            setTimeout(showSuccessToast, 500);
        }
        return jsonData;
    }

    // 页面加载后显示激活提示
    if (document.readyState === 'loading') {
        document.addEventListener('DOMContentLoaded', showActivationMessage);
    } else {
        setTimeout(showActivationMessage, 1000);
    }
})();