mod: ядро (03) уменьшены максимальные значения "плотности галлюцинации" т.к. браузер большую сетку может не тянуть...
This commit is contained in:
@@ -32,9 +32,9 @@ class HalftoneGenerateForm(forms.Form):
|
||||
required=False,
|
||||
)
|
||||
cols = forms.IntegerField(
|
||||
min_value=20,
|
||||
max_value=200,
|
||||
initial=80,
|
||||
min_value=10,
|
||||
max_value=80,
|
||||
initial=35,
|
||||
required=False,
|
||||
)
|
||||
max_radius = forms.IntegerField(
|
||||
|
||||
@@ -66,6 +66,19 @@ class HalftoneServiceTests(TestCase):
|
||||
svg = generate_halftone_svg(buf.getvalue(), cols=20)
|
||||
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):
|
||||
"""Тестирование формы валидации HalftoneGenerateForm."""
|
||||
|
||||
@@ -11,7 +11,7 @@
|
||||
colors: ['#a855ff'],
|
||||
|
||||
/* Параметры сетки и трансформаций */
|
||||
cols: 80, /* Плотность галлюцинации (число колонок сетки, 20-200) */
|
||||
cols: 35, /* Плотность галлюцинации (число ячеек сетки по длинной стороне, 10-80) */
|
||||
radius: 8, /* Размер гипно-точки (максимальный радиус элементов, 3-20) */
|
||||
blink: 6, /* Интенсивность мерцания CSS-анимации (0-10) */
|
||||
rotation: 0, /* Укачивание (угол поворота элементов, от -15° до +15°) */
|
||||
@@ -292,12 +292,12 @@
|
||||
<div class="flex justify-between mb-1">
|
||||
<label class="text-xs font-bold text-stone-400 uppercase">Плотность галлюцинации</label>
|
||||
<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>
|
||||
</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'))"
|
||||
: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">
|
||||
</div>
|
||||
{# РАЗМЕР ЭЛЕМЕНТА #}<div>
|
||||
|
||||
Reference in New Issue
Block a user