您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Descarga imágenes del manga desde MangaPlus, capturando solo las imágenes grandes de tipo Blob.
当前为
// ==UserScript== // @name MangaPlus Blob Downloader // @namespace shadows // @version 1.7.2 // @description Descarga imágenes del manga desde MangaPlus, capturando solo las imágenes grandes de tipo Blob. // @author shadows // @license MIT // @match https://mangaplus.shueisha.co.jp/* // @grant GM_download // ==/UserScript== "use strict"; (function () { let blobs = []; let imageHashes = new Set(); // Para hacer seguimiento de las imágenes únicas let downloadedCount = 0; // Crear botón de descarga const downloadButton = document.createElement("button"); downloadButton.textContent = "Descargar imágenes"; downloadButton.style = ` position: fixed; top: 10px; right: 10px; z-index: 10000; background-color: #28a745; color: white; border: none; padding: 10px 20px; font-size: 14px; border-radius: 5px; cursor: pointer; `; document.body.appendChild(downloadButton); // Evento de descarga downloadButton.addEventListener("click", async () => { const images = Array.from(document.querySelectorAll("img.zao-image")); if (images.length === 0) { alert("No se encontraron imágenes del manga para descargar."); return; } // Filtrar imágenes para asegurarse de que sean de tamaño adecuado (no miniaturas ni íconos) const largeImages = images.filter(img => img.naturalWidth > 500); // Filtrar imágenes pequeñas if (largeImages.length === 0) { alert("No se encontraron imágenes grandes del manga."); return; } // Descargar cada imagen individualmente for (const [index, img] of largeImages.entries()) { try { const blobUrl = img.src; const fileName = `${String(index + 1).padStart(3, "0")}.jpg`; // Cambia a .png si prefieres // Obtener la imagen Blob const blob = await fetchBlob(blobUrl); if (blob) { const convertedBlob = await convertBlobToImage(blob, 'image/jpeg'); // Cambia a 'image/png' si prefieres saveBlobAsFile(convertedBlob, fileName); console.log(`Descargada: ${fileName}`); } else { console.error(`Error al obtener la imagen para: ${fileName}`); } } catch (err) { console.error(`Error al descargar la imagen:`, err); } } alert(`Se descargaron ${largeImages.length} imágenes grandes correctamente.`); }); // Función para obtener el blob a partir del blob URL async function fetchBlob(blobUrl) { try { const response = await fetch(blobUrl); if (!response.ok) throw new Error(`Error al obtener la imagen: ${response.statusText}`); return await response.blob(); } catch (error) { console.error("Error al obtener el blob:", error); return null; } } // Función para convertir un Blob a un formato de imagen (ejemplo: JPEG) async function convertBlobToImage(blob, mimeType) { return new Promise((resolve, reject) => { const img = document.createElement('img'); const canvas = document.createElement('canvas'); const ctx = canvas.getContext('2d'); const url = URL.createObjectURL(blob); img.onload = () => { canvas.width = img.width; canvas.height = img.height; ctx.drawImage(img, 0, 0); canvas.toBlob((convertedBlob) => { URL.revokeObjectURL(url); if (convertedBlob) { resolve(convertedBlob); } else { reject(new Error("Error al convertir la imagen.")); } }, mimeType); }; img.onerror = () => { URL.revokeObjectURL(url); reject(new Error("Error al cargar la imagen para convertir.")); }; img.src = url; }); } // Función para guardar un blob como archivo usando un enlace de descarga function saveBlobAsFile(blob, fileName) { const blobUrl = URL.createObjectURL(blob); const a = document.createElement('a'); a.href = blobUrl; a.download = fileName; document.body.appendChild(a); a.click(); document.body.removeChild(a); URL.revokeObjectURL(blobUrl); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址