Initial commit
This commit is contained in:
@@ -0,0 +1,40 @@
|
||||
|
||||
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}
|
||||
Reference in New Issue
Block a user