Files
2025-11-25 10:19:18 +01:00

45 lines
1.7 KiB
Python

from PIL import Image
# Wymiary (bez zmian)
SZEROKOSC = 1280
WYSOKOSC_PLYNNA = 1080
WYSOKOSC_CZARNA = 720
WYSOKOSC_GRADIENTU = WYSOKOSC_PLYNNA - WYSOKOSC_CZARNA # 360
# Stopień nieliniowości (im wyższy, tym wolniejszy spadek na początku)
# 1.0 = Liniowy, 2.0 = Quadratic (Wolniejszy start, szybszy koniec), 3.0 = Cubic
WSPOLCZYNNIK_EASING = 2.5
# 1. Utwórz przezroczysty obraz
img = Image.new('RGBA', (SZEROKOSC, WYSOKOSC_PLYNNA), (0, 0, 0, 0))
pixels = img.load()
# 2. Ustaw w pełni czarny obszar (bez zmian)
for x in range(SZEROKOSC):
for y in range(WYSOKOSC_CZARNA):
pixels[x, y] = (0, 0, 0, 255)
# 3. Zmodyfikowany gradient nieliniowy (Ease-In, czyli spowolnienie na początku)
for y in range(WYSOKOSC_CZARNA, WYSOKOSC_PLYNNA):
# 1. Oblicz współrzędną w zakresie 0.0 do 1.0 (liniowo)
y_gradient = y - WYSOKOSC_CZARNA
wspolczynnik_liniowy = y_gradient / WYSOKOSC_GRADIENTU # 0.0 na 720px, 1.0 na 1080px
# 2. Zastosuj funkcję nieliniową (np. Power/Expo Ease-In)
# Ta funkcja powoduje, że 'współczynnik_nieliniowy' rośnie wolniej na początku.
wspolczynnik_nieliniowy = wspolczynnik_liniowy ** WSPOLCZYNNIK_EASING
# 3. Konwersja na krycie (alpha)
# Ponieważ chcemy, by krycie MALAŁO od 255 do 0:
# Używamy 1.0 - wspolczynnik_nieliniowy (czyli od 1.0 do 0.0)
krycie_skalarne = 1.0 - wspolczynnik_nieliniowy
alpha = int(255 * krycie_skalarne)
# Zastosuj krycie
for x in range(SZEROKOSC):
# Użyj maks. 0, aby uniknąć ujemnych wartości na wszelki wypadek
pixels[x, y] = (0, 0, 0, max(0, alpha))
# Zapisz obraz
img.save('mask.png')