From ceee9adead94c437785ede7053e4563a7cbf5054 Mon Sep 17 00:00:00 2001 From: Ku6epXBOCTuK Date: Sat, 12 Sep 2026 14:46:01 +0500 Subject: [PATCH] feat: add download zip with result files --- web/src/lib/zip.ts | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 web/src/lib/zip.ts diff --git a/web/src/lib/zip.ts b/web/src/lib/zip.ts new file mode 100644 index 0000000..4b5b8f6 --- /dev/null +++ b/web/src/lib/zip.ts @@ -0,0 +1,21 @@ +import { zipSync } from "fflate"; +import { downloadBlob, encode } from "./core/io"; +import type { ToolImageFile } from "./registry"; + +/** + * Собирает набор картинок (1 → many) в zip-архив и скачивает его. + * Картинки кодируются как PNG; кодирование требует DOM — вызов из UI-слоя. + */ +export async function downloadZip( + files: ToolImageFile[], + zipName: string, +): Promise { + if (files.length === 0) return; + const entries: Record = {}; + for (const file of files) { + const blob = await encode(file.image, "image/png"); + entries[file.name] = new Uint8Array(await blob.arrayBuffer()); + } + const zipped = zipSync(entries); + downloadBlob(new Blob([zipped], { type: "application/zip" }), zipName); +}