27 lines
1.2 KiB
Python
27 lines
1.2 KiB
Python
|
|
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
|