Image downloader for manga download scripts.
Version vom
Dieses Skript sollte nicht direkt installiert werden. Es handelt sich hier um eine Bibliothek für andere Skripte, welche über folgenden Befehl in den Metadaten eines Skriptes eingebunden wird // @require https://updategf.qytechs.cn/scripts/451810/1096733/ImageDownloaderLib.js
function ImageDownloader({
getImagePromises,
isOKToDownload = () => true,
title = `package_${Date.now()}`,
zipOptions = {},
imageSuffix = 'jpg',
cssVerticalDistance = 'top: 80px',
cssHorizontalDistance = 'left: 80px'
}) {
// create download button element
const dlBtn = document.createElement('button');
dlBtn.textContent = 'Download';
dlBtn.style = `
position: fixed;
${cssVerticalDistance};
${cssHorizontalDistance};
z-index: 9999999;
width: 128px;
height: 48px;
display: flex;
justify-content: center;
align-items: center;
font-size: 14px;
font-family: 'Consolas', 'Monaco', 'Microsoft YaHei';
color: #fff;
background-color: #0984e3;
border: none;
border-radius: 4px;
cursor: pointer;
`;
// setup click event callback
dlBtn.onclick = function () {
if (!isOKToDownload()) return;
dlBtn.disabled = true;
dlBtn.textContent = "Processing";
dlBtn.style.backgroundColor = '#aaa';
dlBtn.style.cursor = 'not-allowed';
download(getImagePromises, title, zipOptions);
}
// add button to body
document.body.appendChild(dlBtn);
// download
async function download(getImagePromises, title, zipOptions) {
const images = await Promise.all(getImagePromises());
// create zip
const zip = new JSZip(); // JSZip library should be imported already
const folder = zip.folder(title);
images.forEach((image, index) => {
const filename = `${index + 1}`.padStart(images.length >= 100 ? 3 : 2, '0') + `.${imageSuffix}`;
folder.file(filename, image, zipOptions);
});
// pop up download window
const content = await zip.generateAsync({ type: "blob" });
saveAs(content, `${title}.zip`); // FileSaver library should be imported already
// change the text of download button
dlBtn.innerText = "Completed";
}
}