篡改猴 x Google AI Studio:免浮水印生成 Nano Banana 圖片!

2025/10/16 395 13 瀏覽器 , 網路應用 , 人工智慧 , AI繪圖 , 擴充元件

在使用 Google AI StudioGemini 2.5 Flash Image(Nano Banana)模型生成圖片時,系統會自動疊加官方浮水印,確保內容來源辨識。然而,對於某些只想用於個人專案或內部測試的使用者而言,這層浮水印可能會造成後製困擾。為了解決這個問題,可以透過篡改猴(Tampermonkey)瀏覽器擴充,自動攔截並阻擋浮水印的載入,達到「生成無水印圖片」的效果。這並非修改圖片本身,而是在瀏覽器端中途「截斷水印載入流程」,因此操作快速、安全,也不會影響原始 AI 模型的運作。

這段使用者腳本的核心原理是利用 JavaScript 攔截瀏覽器中 img.srcfetch 的請求,當偵測到連結中包含「watermark」字樣時,便自動阻擋這些資源的載入。同時,它也會透過 CSS 將任何內嵌水印元素隱藏,防止網頁因空白圖片產生白框。這樣一來,最終輸出的圖片將不再包含浮水印,使用者可以更自由地進行剪裁、拼接或二次設計,減少繁瑣的後製步驟。

採用這種方式的好處非常明顯:首先,它不需要修改 AI 模型或伺服器端的設定,完全在個人瀏覽器端執行;其次,攔截行為發生在圖片載入初期,不會增加額外延遲;最後,對於需要大量產圖的設計師或工程師來說,省下手動去除水印的時間,能大幅提升產能。當然,若使用於公開或商業用途,仍應尊重平台服務條款,但就技術面而言,這是一個高效、輕量且容易實作的客製化解法。

📝 完整腳本(Remove Google AI Studio Watermark)

// ==UserScript==
// @name         Remove Google AI Studio Watermark
// @namespace    https://www.tampermonkey.net/
// @version      1.0
// @description  在 Google AI Studio 中攔截並阻擋浮水印影像的載入
// @author       You
// @match        https://aistudio.google.com/*
// @run-at       document-start
// @noframes
// @grant        none
// ==/UserScript==

(function () {
    'use strict';

    // 攔截的浮水印檔案名稱規則
    const WATERMARK_PATH_REGEX = /watermark[^/]*\.png(\?.*)?$/i;

    function tryParseURL(input) {
        try {
            return new URL(String(input), location.href);
        } catch {
            return null;
        }
    }

    function isWatermarkURL(input) {
        const u = tryParseURL(input);
        return !!u && WATERMARK_PATH_REGEX.test(u.pathname);
    }

    // 攔截 <img> src
    const imgProto = HTMLImageElement.prototype;
    const srcDesc = Object.getOwnPropertyDescriptor(imgProto, 'src');

    if (srcDesc && srcDesc.configurable) {
        Object.defineProperty(imgProto, 'src', {
            get() {
                return srcDesc.get.call(this);
            },
            set(value) {
                if (typeof value === 'string' && isWatermarkURL(value)) {
                    // 不設定 src 並直接隱藏元素 → 不會出現白框
                    this.style.display = 'none';
                    return;
                }
                srcDesc.set.call(this, value);
            },
            configurable: true,
            enumerable: srcDesc.enumerable,
        });
    }

    // 攔截 setAttribute('src', ...)
    const originalSetAttribute = imgProto.setAttribute;
    imgProto.setAttribute = function (name, value) {
        try {
            if (String(name).toLowerCase() === 'src' &&
                typeof value === 'string' &&
                isWatermarkURL(value)) {
                this.style.display = 'none';
                return;
            }
        } catch {}
        return originalSetAttribute.call(this, name, value);
    };

    // CSS 保險:如果浮水印直接被寫進 DOM
    (function injectStyle() {
        const style = document.createElement('style');
        style.textContent = `
            img[src*="watermark"] {
                display: none !important;
            }
            [style*="watermark"] {
                background-image: none !important;
            }
        `;
        document.documentElement.appendChild(style);
    })();

    // 攔截 fetch,直接拒絕水印請求(不回傳透明圖,避免白框)
    if (window.fetch) {
        const originalFetch = window.fetch;
        window.fetch = new Proxy(originalFetch, {
            apply(target, thisArg, args) {
                let url = args[0];
                if (url && typeof url === 'object' && 'url' in url) url = url.url;
                if (url && isWatermarkURL(url)) {
                    return Promise.reject(new TypeError('Blocked watermark request'));
                }
                return Reflect.apply(target, thisArg, args);
            },
        });
    }
})();


▲ 開啟 Tampermonkey 控制台後,點擊右上角的「➕ 新增腳本」圖示,進入使用者腳本編輯頁面。接著將完整的 JavaScript 腳本貼上,並確認沒有多餘空格或語法錯誤,最後記得點擊左上角的「檔案」→「儲存」,讓腳本正式生效。這一步是整個移除浮水印流程的關鍵開端。

▲ 在使用 Tampermonkey 前,必須先確保瀏覽器擴充功能頁面已開啟「開發人員模式」。進入擴充功能設定,將「開發人員模式」的開關打開,才能順利安裝來自外部的自訂腳本。這樣一來,Tampermonkey 才能正常運作並攔截指定的資源請求。(截圖以 Edge 瀏覽器為例)

贊助廣告 ‧ Sponsor advertisements

留言區 / Comments

萌芽論壇