diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index ff6c8ca..b68cc1c 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -5,6 +5,7 @@ on: branches: - main - master + - claude/google-nanobanano-image-tool-011CULCaAxWF92Lzs45Tp9pm workflow_dispatch: permissions: diff --git a/package.json b/package.json index 7ee8d96..c275dc0 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ }, "dependencies": { "@google/generative-ai": "^0.21.0", + "jszip": "^3.10.1", "react": "^18.3.1", "react-dom": "^18.3.1" }, diff --git a/src/components/ImageGallery.jsx b/src/components/ImageGallery.jsx index 3c8d691..ca7c927 100644 --- a/src/components/ImageGallery.jsx +++ b/src/components/ImageGallery.jsx @@ -1,4 +1,5 @@ import { useState } from 'react'; +import JSZip from 'jszip'; export default function ImageGallery({ results, onRegenerate, onSaveAll, onRetryErrors }) { const [selectedImage, setSelectedImage] = useState(null); @@ -12,14 +13,35 @@ export default function ImageGallery({ results, onRegenerate, onSaveAll, onRetry document.body.removeChild(link); }; - const saveAllImages = () => { + const saveAllImages = async () => { + const zip = new JSZip(); + + // Добавляем все обработанные изображения в ZIP results.forEach((result, index) => { if (result.result) { - setTimeout(() => { - downloadImage(result.result, `processed_${result.originalName || `image_${index}`}`); - }, index * 100); + // Извлекаем base64 данные из data URL + const base64Data = result.result.split(',')[1]; + const filename = `processed_${result.originalName || `image_${index}.png`}`; + + // Добавляем файл в ZIP + zip.file(filename, base64Data, { base64: true }); } }); + + // Генерируем ZIP файл + const blob = await zip.generateAsync({ type: 'blob' }); + + // Создаем ссылку для скачивания + const link = document.createElement('a'); + link.href = URL.createObjectURL(blob); + link.download = `processed_images_${Date.now()}.zip`; + document.body.appendChild(link); + link.click(); + document.body.removeChild(link); + + // Освобождаем память + URL.revokeObjectURL(link.href); + if (onSaveAll) onSaveAll(); }; diff --git a/src/components/ImageUploader.jsx b/src/components/ImageUploader.jsx index 6135734..c9ba46a 100644 --- a/src/components/ImageUploader.jsx +++ b/src/components/ImageUploader.jsx @@ -97,9 +97,9 @@ export default function ImageUploader({ onImagesLoad }) { Перетащите изображения сюда
или
- +