from __future__ import annotations import numpy as np class GradientGenerator: """Градиентное изображение произвольного размера и каналов.""" @staticmethod def make(size: int = 512, channels: int = 3) -> np.ndarray: """Создать квадратный градиент size×size для 1 или 3 каналов.""" if not isinstance(size, int) or size <= 0: raise ValueError("size должен быть положительным целым.") if channels not in (1, 3): raise ValueError("channels должен быть 1 или 3.") x = np.linspace(0.0, 255.0, num=size, dtype=np.float64) h = np.tile(x, (size, 1)) # горизонтальный градиент v = np.tile(x[:, None], (1, size)) # вертикальный градиент d = (0.5 * (h + v)) # диагональный градиент if channels == 1: return d.astype(np.uint8) rgb = np.stack([h, v, d], axis=2).astype(np.uint8) # R=горизонталь, G=вертикаль, B=диагональ return rgb