画世界下载原图

从画世界网页版(PC端UA)下载原图的脚本

// ==UserScript==
// @name         画世界下载原图
// @name:zh-CN   画世界下载原图
// @namespace    画世界下载原图
// @homepage     https://gist.github.com/kaixinol/a7521662de470d427db2eb9d45cd843e/
// @version      0.4
// @license      MIT
// @description:zh-cn  从画世界网页版(PC端UA)下载原图的脚本
// @description  从画世界网页版(PC端UA)下载原图的脚本
// @author       Kaesinol
// @match        https://*.huashijie.art/work/detail/*
// @grant        GM_xmlhttpRequest
// @grant        GM_download
// @connect      app.huashijie.art
// ==/UserScript==

(function () {
  "use strict";

  // 存储拦截到的图片URL和作品信息
  let interceptedImages = [];
  let workInfo = null;

  // 获取作品ID
  function getWorkId() {
    const path = window.location.pathname;
    return path.split("/").pop();
  }

  // 获取文件扩展名
  function getFileExtension(url) {
    const match = url.match(/\.([^.]+)(?:\?|$)/);
    return match ? match[1].toLowerCase() : "jpg";
  }

  // 从API获取作品信息
  async function fetchWorkInfo(workId) {
    return new Promise((resolve, reject) => {
      GM_xmlhttpRequest({
        method: "GET",
        url: `https://app.huashijie.art/api/work/detailV2?workId=${workId}`,
        headers: {
          Accept: "application/json",
        },
        onload: function (response) {
          try {
            const data = JSON.parse(response.responseText);
            if (data && data.data) {
              resolve(data.data);
            } else {
              reject("Invalid API response");
            }
          } catch (e) {
            reject(e);
          }
        },
        onerror: reject,
      });
    });
  }

  // 拦截 canvas.drawImage()
  const originalDrawImage = CanvasRenderingContext2D.prototype.drawImage;
  CanvasRenderingContext2D.prototype.drawImage = function (img, ...args) {
    if (
      img instanceof HTMLImageElement &&
      !interceptedImages.includes(img.src)
    ) {
      interceptedImages.push(img.src);
      console.log("Intercepted image:", img.src);
    }
    return originalDrawImage.apply(this, [img, ...args]);
  };

  // 添加下载按钮
  async function addDownloadButton() {
    const likeButton = document.querySelector(".common-like.click-hover");
    if (!likeButton) {
      setTimeout(addDownloadButton, 1000);
      return;
    }

    // 获取作品信息
    const workId = getWorkId();
    try {
      workInfo = await fetchWorkInfo(workId);
    } catch (error) {
      console.error("Failed to fetch work info:", error);
    }

    const downloadButton = document.createElement("button");
    downloadButton.textContent = "下载图片";
    downloadButton.style.cssText = `
            margin-left: 10px;
            padding: 5px 10px;
            background-color: #4CAF50;
            color: white;
            border: none;
            border-radius: 4px;
            cursor: pointer;
        `;

    downloadButton.addEventListener("click", async () => {
      if (interceptedImages.length === 0) {
        alert("未检测到图片,请先浏览作品");
        return;
      }

      if (!workInfo) {
        alert("未能获取作品信息,将使用默认文件名");
      }

      let filename = null;
      for (let i = 0; i < interceptedImages.length; i++) {
        const url = interceptedImages[i];
        const extension = getFileExtension(url);
        if (!workInfo) {
          filename = `${Date.now()} - ${i + 1}.${extension}`;
        } else {
          filename = `${workInfo.user.nick} - ${workInfo.id} - ${
            workInfo.userId
          } - ${i + 1}.${extension}`;
        }

        GM_download({
          url: url,
          name: filename,
          saveAs: false,
          onerror: (error) => {
            console.error("Download failed:", error);
            alert(`下载失败: ${error}`);
          },
        });
      }
      console.log(`开始下载 ${interceptedImages.length} 张图片`);
    });

    likeButton.parentNode.insertBefore(downloadButton, likeButton.nextSibling);
  }

  // 页面加载完成后添加按钮
  window.addEventListener("load", addDownloadButton);
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址