from __future__ import annotations from dataclasses import dataclass from typing import Dict, Optional import numpy as np from PIL import Image from generators.gradient_generator import GradientGenerator from generators.chessboard_generator import ChessboardGenerator @dataclass class GenerateMode: """CLI-режим генерации изображений: gradient/chess.""" def run( self, kind: str, size: int, channels: int, output_path: str, tile: Optional[int] = None, ) -> Dict[str, str]: """Сгенерировать изображение и сохранить в файл.""" if kind == "gradient": arr = GradientGenerator.make(size=size, channels=channels) elif kind == "chess": t = 32 if tile is None else int(tile) arr = ChessboardGenerator.make(size=size, channels=channels, tile=t) else: raise ValueError("kind должен быть 'gradient' или 'chess'.") mode = "L" if channels == 1 else "RGB" if arr.ndim == 2: img = Image.fromarray(arr, mode=mode) else: img = Image.fromarray(arr.astype(np.uint8), mode=mode) img.save(output_path) return {"status": "ok", "kind": kind, "size": str(size), "channels": str(channels), "output": output_path}