45 lines
1.7 KiB
Python
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') |