Files
2026-image-hatftone-effect/README.md
T

51 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Image Halftone Experiment
![Version](https://img.shields.io/badge/Python-3.14-blue)
![Version](https://img.shields.io/badge/version-0.1.1-blue)
![License](https://img.shields.io/badge/license-MIT-green)
[![Static Badge](https://img.shields.io/badge/ОРИГИНАЛ-git.cube2.ru-green)](https://git.cube2.ru/erjemin/2026-image-hatftone-effect)
Генерирует SVG халфтоновый эффект из изображения с анимацией мерцания точек.
Например:
![Пример](img/lp.svg)
## Что делает
Скрипт преобразует любое изображение в компактный SVG с:
- **Халфтоновым растром** — изображение из точек разного размера (как на плакате)
- **CSS-анимацией** — каждая точка пульсирует с уникальной задержкой
- **Прозрачным фоном** — работает на любом фоне (темная/светлая тема)
- **Минимальным размером** — оптимизирован через переиспользование CSS-классов
## Быстрый старт
```bash
# Установить зависимости
poetry install
# Запустить
poetry run python main.py img/img_2.jpg
```
На выходе получишь `img_2j.svg` с анимацией.
## Параметры
В коде (строка 53) можно менять:
- `cols=90` — кол-во колонок (больше = детальнее, но тяжелее)
- `max_radius=5` — макс размер точки
Параметры анимации в функции `generate_halftone_svg()`:
- `animation_variants=12` — кол-во групп точек с разными задержками (чем меньше --> компактнее SVG)
В стилях CSS можно поиграться:
- `animation:noise 1s` — скорость пульсации (чем меньше --> быстрее)
- `animation-delay: calc(var(--i) * 0.1s)` — задержка для каждой точки (чем меньше --> быстрее)
- `animation-iteration-count: infinite` — бесконечная анимация (можно убрать, если нужно один раз)
- `transform:scale(0.99)` — масштабирование групп точек (можно экстремально всю картинку "схлопнуть"
или наоборот ""распустить")
- `fill:#80000090` -- цвет точек (с прозрачностью)
![Еще пример](img/cc.svg)