Files
labs-information-security/lab6-steganography/modes/generate_mode.py
T

41 lines
1.3 KiB
Python
Raw Normal View History

2026-07-12 14:06:45 +04:00
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}