mod: ядро (03) уменьшены максимальные значения "плотности галлюцинации" т.к. браузер большую сетку может не тянуть...
This commit is contained in:
@@ -32,9 +32,9 @@ class HalftoneGenerateForm(forms.Form):
|
|||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
cols = forms.IntegerField(
|
cols = forms.IntegerField(
|
||||||
min_value=20,
|
min_value=10,
|
||||||
max_value=200,
|
max_value=80,
|
||||||
initial=80,
|
initial=35,
|
||||||
required=False,
|
required=False,
|
||||||
)
|
)
|
||||||
max_radius = forms.IntegerField(
|
max_radius = forms.IntegerField(
|
||||||
|
|||||||
@@ -66,6 +66,19 @@ class HalftoneServiceTests(TestCase):
|
|||||||
svg = generate_halftone_svg(buf.getvalue(), cols=20)
|
svg = generate_halftone_svg(buf.getvalue(), cols=20)
|
||||||
self.assertIn("<svg", svg)
|
self.assertIn("<svg", svg)
|
||||||
|
|
||||||
|
def test_generate_aspect_ratios(self):
|
||||||
|
# Проверяем, что для вертикального изображения (100x300) сетка не раздувается
|
||||||
|
tall_img = Image.new("RGB", (100, 300), color="black")
|
||||||
|
svg_tall = generate_halftone_svg(tall_img, cols=30, max_radius=5)
|
||||||
|
# При cols=30 наибольшая сторона (высота) должна иметь 30 точек, а ширина 10
|
||||||
|
# step = 5 * 2 + 2 = 12 -> width = 10 * 12 = 120, height = 30 * 12 = 360
|
||||||
|
self.assertIn('viewBox="0 0 120 360"', svg_tall)
|
||||||
|
|
||||||
|
# Для горизонтального изображения (300x100)
|
||||||
|
wide_img = Image.new("RGB", (300, 100), color="black")
|
||||||
|
svg_wide = generate_halftone_svg(wide_img, cols=30, max_radius=5)
|
||||||
|
self.assertIn('viewBox="0 0 360 120"', svg_wide)
|
||||||
|
|
||||||
|
|
||||||
class HalftoneFormTests(TestCase):
|
class HalftoneFormTests(TestCase):
|
||||||
"""Тестирование формы валидации HalftoneGenerateForm."""
|
"""Тестирование формы валидации HalftoneGenerateForm."""
|
||||||
|
|||||||
@@ -11,7 +11,7 @@
|
|||||||
colors: ['#a855ff'],
|
colors: ['#a855ff'],
|
||||||
|
|
||||||
/* Параметры сетки и трансформаций */
|
/* Параметры сетки и трансформаций */
|
||||||
cols: 80, /* Плотность галлюцинации (число колонок сетки, 20-200) */
|
cols: 35, /* Плотность галлюцинации (число ячеек сетки по длинной стороне, 10-80) */
|
||||||
radius: 8, /* Размер гипно-точки (максимальный радиус элементов, 3-20) */
|
radius: 8, /* Размер гипно-точки (максимальный радиус элементов, 3-20) */
|
||||||
blink: 6, /* Интенсивность мерцания CSS-анимации (0-10) */
|
blink: 6, /* Интенсивность мерцания CSS-анимации (0-10) */
|
||||||
rotation: 0, /* Укачивание (угол поворота элементов, от -15° до +15°) */
|
rotation: 0, /* Укачивание (угол поворота элементов, от -15° до +15°) */
|
||||||
@@ -292,12 +292,12 @@
|
|||||||
<div class="flex justify-between mb-1">
|
<div class="flex justify-between mb-1">
|
||||||
<label class="text-xs font-bold text-stone-400 uppercase">Плотность галлюцинации</label>
|
<label class="text-xs font-bold text-stone-400 uppercase">Плотность галлюцинации</label>
|
||||||
<span class="text-xs transition-colors duration-300"
|
<span class="text-xs transition-colors duration-300"
|
||||||
:class="cols >= 140 ? 'text-red-600' : (cols > 80 ? 'text-yellow-500' : 'text-emerald-600')"
|
:class="cols >= 60 ? 'text-red-600' : (cols > 50 ? 'text-yellow-500' : 'text-emerald-600')"
|
||||||
x-text="cols"></span>
|
x-text="cols"></span>
|
||||||
</div>
|
</div>
|
||||||
<input type="range" name="cols" min="20" max="200" x-model="cols"
|
<input type="range" name="cols" min="10" max="80" x-model="cols"
|
||||||
@input="$el.dispatchEvent(new CustomEvent('input-change'))"
|
@input="$el.dispatchEvent(new CustomEvent('input-change'))"
|
||||||
:class="cols >= 140 ? 'accent-red-600' : (cols > 80 ? 'accent-yellow-500' : 'accent-emerald-500')"
|
:class="cols >= 60 ? 'accent-red-600' : (cols > 50 ? 'accent-yellow-500' : 'accent-emerald-500')"
|
||||||
class="w-full transition-all duration-300">
|
class="w-full transition-all duration-300">
|
||||||
</div>
|
</div>
|
||||||
{# РАЗМЕР ЭЛЕМЕНТА #}<div>
|
{# РАЗМЕР ЭЛЕМЕНТА #}<div>
|
||||||
|
|||||||
Reference in New Issue
Block a user