From 9e81d7a3e022692bc1a00974f2e622639f95748f Mon Sep 17 00:00:00 2001 From: second_constantine Date: Sat, 22 Aug 2026 15:12:01 +0300 Subject: [PATCH] =?UTF-8?q?handwrite.py:=20=D1=80=D1=83=D0=BA=D0=BE=D0=BF?= =?UTF-8?q?=D0=B8=D1=81=D0=BD=D1=8B=D0=B9=20=D1=80=D0=B5=D0=BD=D0=B4=D0=B5?= =?UTF-8?q?=D1=80=20=D0=BA=D0=B8=D1=80=D0=B8=D0=BB=D0=BB=D0=B8=D1=86=D1=8B?= =?UTF-8?q?=20=D1=81=D0=B8=D0=BD=D0=B8=D0=BC=D0=B8=20=D1=87=D0=B5=D1=80?= =?UTF-8?q?=D0=BD=D0=B8=D0=BB=D0=B0=D0=BC=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit CLI-утилита (Pillow) для превращения текста в картинку рукописного текста. Полная поддержка кириллицы, синие чернила с имитацией письма ручкой (дрейф давления, полупрозрачность, неровный край), корректное выравнивание (б/й/н на baseline, р/у/д с хвостами, точки внизу, спецсимволы), перенос по словам + сохранение переносов строк, тетрадная бумага, --list-fonts. run.sh: команды-обёртки (init/upd/render/lined/big/calm/plain/poetry/render-file/render-stdin/list-fonts/examples). Документация: README.md, AGENTS.md. Примеры в examples/. --- .gitignore | 14 + AGENTS.md | 126 ++++++++ README.md | 170 ++++++++++ examples/blue_pen.png | Bin 0 -> 52426 bytes examples/blue_pen_lined.png | Bin 0 -> 46061 bytes examples/multiline.png | Bin 0 -> 53064 bytes examples/sample_input.txt | 3 + handwrite.py | 626 ++++++++++++++++++++++++++++++++++++ requirements.txt | 1 + run.sh | 176 ++++++++++ text.txt | 6 + 11 files changed, 1122 insertions(+) create mode 100644 .gitignore create mode 100644 AGENTS.md create mode 100644 README.md create mode 100644 examples/blue_pen.png create mode 100644 examples/blue_pen_lined.png create mode 100644 examples/multiline.png create mode 100644 examples/sample_input.txt create mode 100755 handwrite.py create mode 100644 requirements.txt create mode 100755 run.sh create mode 100644 text.txt diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7eb7b59 --- /dev/null +++ b/.gitignore @@ -0,0 +1,14 @@ +# Python +__pycache__/ +*.pyc +.venv/ + +# macOS +.DS_Store + +# Вывод рендера (генерируется через run.sh) +out/ + +# Временные картинки +*.png +!examples/*.png diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..feb8983 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,126 @@ +# AGENTS.md — hand-writter + +Руководство для агентов (и людей), работающих с репозиторием `hand-writter`. + +## О проекте + +`handwrite.py` — CLI-утилита на Python, превращающая текст в картинку рукописного +текста с **поддержкой кириллицы** (полный русский алфавит, включая `Ё`, `щ`, `ъ`, +`э`, `ю`, `я`). Единственная зависимость — **Pillow** (`PIL`). + +Ключевые особенности: +- Автоподбор рукописного шрифта из системы с проверкой покрытия кириллицы + (без сторонних библиотек — только Pillow: рендер символа и сравнение с + `notdef`-глифом). Приоритет: `Marker Felt`, затем `Snell Roundhand`, затем + любой шрифт с кириллицей. +- Синие чернила по умолчанию (`#1a3b8c`) с имитацией письма ручкой: коррелированный + дрейф «давления» (тёмные/светлые участки), полупрозрачные чернила, неровный край мазка. +- Выравнивание глифов — стандартное PIL ``text((x, line_top))`` (через маску в + ``_stamp_glyph``). Все обычные буквы (а, о, н, б, й) стоят на одной baseline, + буквы с нижними выносными (р, у, д, ц, щ) опускают хвосты ниже — строчная + «р» ниже обычных букв, точки/запятые внизу, спецсимволы ($ ~ % @ …) — по + дизайну шрифта. Не вводите ручное смещение «по ink_bottom» — оно ломает + б/й/н и обрезает глифы. +- Перенос по словам + сохранение `\n` из входного файла/STDIN. +- Тетрадная «линейная» бумага (`--lined`), цвета чернил/бумаги/линий, + синие палитры и градиенты оттенков. + +## Структура + +``` +hand-writter/ +├── handwrite.py # основной скрипт (точка входа) +├── requirements.txt # Pillow>=9.0.0 +├── run.sh # обёртка-команды: init/upd/render/... +├── README.md # пользовательская документация +├── AGENTS.md # этот файл +└── examples/ # примеры вывода + ├── blue_pen.png + ├── blue_pen_lined.png + ├── multiline.png + └── sample_input.txt +``` + +## Окружение и запуск + +- Python 3.8+ (в `run.sh` предполагается `python3.13`; если его нет — + отредактируйте `PY` в `run.sh` или используйте системный `python3`). +- Активация venv: `source .venv/bin/activate` (через `./run.sh init`). +- Прямой запуск: `python3 handwrite.py "Текст" -o out.png`. +- Команды-обёртки: `./run.sh render "Текст"` и др. (см. ниже). + +## Правила работы с кодом + +1. **Не добавляйте новых зависимостей** без крайней необходимости. Скрипт + намеренно зависит только от Pillow — это упрощает установку в + изолированных средах. Любая новая зависимость должна быть обоснована + и добавлена в `requirements.txt`. + +2. **Сохраняйте поддержку кириллицы.** Любое изменение рендера/шрифтов + должно проверяться на полном русском алфавите (см. `CYRILLIC_TEST` в + `handwrite.py`). Не полагайтесь на «визуальную» проверку — шрифт может + отрисовывать `notdef` для отсутствующих глифов; используйте + `_font_covers_cyrillic()`. + +3. **Выравнивание — стандартное PIL.** В ``_stamp_glyph`` глиф рисуется маской + с origin в канвасе и композируется так, чтобы совпадать с ``text((x, line_top))``. + НЕ прижимайте ink_bottom вручную к baseline и НЕ сдвигайте глифы по bbox — + это ломает б/й (обрезает) и делает их «слишком низкими». Канвас берётся по + абсолютным границам bbox (включая отрицательные bbox[0]/bbox[1] для Ё, р). + Знаки препинания рисуются с jitter=0 (чёткие точки), но тем же выравниванием. + +4. **Сохраняйте переносы строк.** `wrap_text` использует `splitlines()` — + каждая строка входа становится отдельной строкой на картинке. Не + «схлоптывайте» пустые строки без явного флага. + +5. **Не ломайте CLI-совместимость.** Новые параметры добавляйте с значениями + по умолчанию, не меняйте семантику существующих. + +6. **Внесение изменений:** после правок проверяйте + - `python3 -c "import ast; ast.parse(open('handwrite.py').read())"` — синтаксис; + - запуск на кириллице с точками/запятыми и многострочным файлом; + - что точки-знаки остаются в нижней зоне строки. + +## Команды (run.sh) + +| Команда | Описание | +|---|---| +| `./run.sh init` | Создать venv и установить зависимости | +| `./run.sh upd` | Обновить зависимости | +| `./run.sh render "текст"` | Рендер текста-аргумента → `out/handwriting.png` | +| `./run.sh lined "текст"` | Рендер на тетрадной бумаге | +| `./run.sh big "текст"` | Крупный шрифт (64pt) на тёплой бумаге | +| `./run.sh calm "текст"` | «Спокойный» почерк (jitter 0.3, seed 42) | +| `./run.sh plain "текст"` | Ровный текст (без дрожания/поворота строк) | +| `./run.sh render-file file.txt` | Рендер файла (с переносами строк) | +| `./run.sh poetry file.txt` | Многострочный файл → тетрадь, крупный шрифт → `out/poetry.png` | +| `./run.sh render-stdin` | Чтение из STDIN (echo "..." \| ./run.sh render-stdin) | +| `./run.sh list-fonts` | Показать доступные рукописные шрифты с кириллицей | +| `./run.sh examples` | Перегенерировать примеры в `examples/` | + +Все команды рендера (`render`, `lined`, `big`, `calm`, `plain`, `poetry`, +`render-file`, `render-stdin`) принимают доп. опции `handwrite.py` после `--`, +например: `./run.sh render "Текст" -- --jitter 0.4 --seed 7 --lined`. + +## Тестовые сценарии (обязательно прогонять при правках) + +```bash +# кириллица с б/й/р, точками и спецсимволами (б/й на baseline, р ниже, точки внизу) +python3 handwrite.py "байты йогурт река. \$ ~ % @ # конец!" -o /tmp/t1.png + +# многострочный файл (каждая строка файла → строка на картинке) +printf 'Строка 1.\nСтрока 2.\nСтрока 3.\n' > /tmp/m.txt +python3 handwrite.py -i /tmp/m.txt -o /tmp/t2.png --lined + +# синий (по умолчанию) + тетрадь +python3 handwrite.py "Текст" --lined -o /tmp/t3.png +``` + +## Чего не делать + +- Не коммитьте `.DS_Store`, `.venv/`, временные `*.png` вне `examples/`. +- Не удаляйте `examples/` — это демонстрация возможностей. +- Не «упрощайте» проверку глифов кириллицы до `textbbox`/ширины — это + ненадёжно (узкие буквы, например «г», неотличимы от `notdef` по ширине). +- Цвет чернил по умолчанию — синий. Палитры/градиенты намеренно убраны + (раньше были, но усложняли). Не возвращайте мульти-цвет без явной просьбы. diff --git a/README.md b/README.md new file mode 100644 index 0000000..5fdf296 --- /dev/null +++ b/README.md @@ -0,0 +1,170 @@ +# handwrite.py + +Python-скрипт, превращающий текст в картинку рукописного текста с **поддержкой +кириллицы** (полный русский алфавит, включая `Ё`, `щ`, `ъ`, `э`, `ю`, `я`). +Чернила — **синие**, с имитацией письма ручкой. + +## Возможности + +- 🖋️ **Синие чернила «как рукой»**: имитация письма ручкой — дрейф «давления» + (коррелированные тёмные/светлые участки), полупрозрачные чернила, неровный + край мазка +- ✅ Полная поддержка кириллицы (автоподбор рукописного шрифта с проверкой + наличия всех глифов; приоритет — `Marker Felt`) +- 📐 Корректное выравнивание: обычные буквы (`а`, `о`, `н`, `б`, `й`) на одной + базовой линии, буквы с нижними выносными (`р`, `у`, `д`, `ц`, `щ`) — с + хвостами ниже, точки/запятые — внизу строки, спецсимволы (`$ ~ % @ # & …`) — + по дизайну шрифта +- 📝 Перенос по словам + сохранение `\n` из входного файла/STDIN +- 📓 «Тетрадная» линейная бумага (`--lined`) +- 🎨 Настройка цвета чернил/бумаги/линий, размера шрифта, полей +- 📥 Ввод: аргументом, из файла (`-i`, с переносами строк), через STDIN +- 🔒 Воспроизводимый результат через `--seed` + +## Установка + +```bash +pip install -r requirements.txt # нужна только Pillow +``` + +или через обёртку (создаст venv): + +```bash +./run.sh init +``` + +## Быстрый старт + +```bash +# текст аргументом +python3 handwrite.py "Привет, мир!" -o hello.png + +# тетрадная бумага +python3 handwrite.py "Привет, мир!" -o hello.png --lined + +# из файла с переносами строк (каждая строка файла → строка на картинке) +python3 handwrite.py -i text.txt -o letter.png --lined + +# через STDIN +echo "Мама мыла раму" | python3 handwrite.py -o out.png +``` + +## Параметры + +| Параметр | По умолчанию | Описание | +|---|---|---| +| `text` | — | Текст для рендера (позиционный). | +| `-i, --input` | — | Файл с текстом (UTF-8); переносы строк сохраняются. `-` = STDIN, иначе при отсутствии текста — STDIN. | +| `-o, --output` | `handwriting.png` | Выходной PNG. | +| `--font` | авто | Путь к шрифту (`path` или `path:index` в `.ttc`). Иначе авто-подбор рукописного с кириллицей. | +| `--font-size` | `44` | Размер шрифта (pt). | +| `--line-spacing` | `1.6` | Множитель межстрочного интервала. | +| `--margin` | `64` | Поля вокруг текста (px). | +| `--chars-per-line` | `48` | Примерная ширина строки в символах для переноса. | +| `--ink` | `#1a3b8c` | Цвет чернил (`#RRGGBB`). По умолчанию — синий. | +| `--paper` | `#ffffff` | Цвет бумаги (`#RRGGBB`). | +| `--lined` | выкл. | Рисовать «тетрадные» линии. | +| `--lined-color` | `#cfe8ff` | Цвет линий бумаги. | +| `--jitter` | `1.0` | Сила «рукописного» дрожания (`0` — ровный текст). | +| `--no-rotate-lines` | выкл. | Отключить лёгкий поворот строк. | +| `--seed` | случайный | Зерно ГПСЧ для воспроизводимости. | + +## Примеры использования + +```bash +# крупный текст на тёплой бумаге +python3 handwrite.py "Стихи на полях" -o poem.png --font-size 56 --paper "#fdf6e3" --lined + +# «спокойный» почерк — меньше колебаний давления, фиксированный seed +python3 handwrite.py "Ровный аккуратный текст" -o neat.png --jitter 0.3 --seed 42 + +# полностью ровный текст (без дрожания и поворота) +python3 handwrite.py "Как печатный" -o plain.png --jitter 0 --no-rotate-lines + +# другой синий оттенок чернил +python3 handwrite.py "Глубокий синий" -o deep.png --ink "#0f2d78" + +# широкий формат (длинные строки) +python3 handwrite.py -i long_text.txt -o wide.png --chars-per-line 80 --margin 40 + +# другой рукописный шрифт (Snell Roundhand) +python3 handwrite.py "Текст" --font "/System/Library/Fonts/Supplemental/SnellRoundhand.ttc:0" + +# многострочный файл через STDIN +cat text.txt | python3 handwrite.py -o out.png --lined + +# тёмная бумага, светлые чернила (например, для презентации) +python3 handwrite.py "Белым по тёмному" -o dark.png --ink "#cfe8ff" --paper "#1a2238" +``` + +## Команды run.sh + +Удобные обёртки для типовых задач (вывод — в `out/`): + +| Команда | Описание | +|---|---| +| `./run.sh init` | Создать venv и установить зависимости | +| `./run.sh upd` | Обновить зависимости | +| `./run.sh render "текст"` | Рендер текста → `out/handwriting.png` | +| `./run.sh lined "текст"` | Рендер на тетрадной бумаге → `out/handwriting.png` | +| `./run.sh big "текст"` | Крупный шрифт (64pt) на тёплой бумаге | +| `./run.sh calm "текст"` | «Спокойный» почерк (jitter 0.3, seed 42) | +| `./run.sh plain "текст"` | Ровный текст (без дрожания/поворота) | +| `./run.sh render-file file` | Рендер файла (с переносами строк) | +| `./run.sh poetry file` | Многострочный файл → тетрадь, крупный шрифт | +| `./run.sh render-stdin` | Чтение из STDIN (`echo "..." \| ./run.sh render-stdin`) | +| `./run.sh list-fonts` | Показать доступные рукописные шрифты с кириллицей | +| `./run.sh examples` | Перегенерировать примеры в `examples/` | + +Доп. опции `handwrite.py` передаются после `--` (или просто в конце): + +```bash +./run.sh render "Текст" -- --jitter 0.4 --seed 7 +./run.sh render-file text.txt --chars-per-line 60 +./run.sh lined "Текст" -- --ink "#0f2d78" +``` + +## Примеры + +``` +examples/ +├── blue_pen.png # синий текст «от руки» +├── blue_pen_lined.png # синий текст на тетради +├── multiline.png # из файла с переносами строк +└── sample_input.txt # пример входного файла +``` + +Перегенерировать: `./run.sh examples`. + +## Подбор шрифта + +Скрипт автоматически ищет рукописный шрифт с **полным покрытием кириллицы**: + +1. Проверяет приоритетные системные шрифты (`Marker Felt`, затем `Snell Roundhand`). +2. Сканирует системные каталоги, отбирая «рукописные» имена и проверяя все + глифы кириллицы. +3. В крайнем случае берёт любой шрифт с поддержкой кириллицы. + +Проверка глифов — без сторонних библиотек (только Pillow): каждый символ +рендерится и сравнивается с формой `notdef`-глифа. Узкие буквы (например «г») +неотличимы от `notdef` по ширине, поэтому сравнение делается по форме, а не по +ширине. + +## Требования + +- Python 3.8+ +- Pillow (`pip install pillow`) + +## Файлы проекта + +``` +hand-writter/ +├── handwrite.py # основной скрипт +├── requirements.txt # Pillow +├── run.sh # команды-обёртки +├── README.md # этот файл +├── AGENTS.md # руководство для агентов/разработчиков +└── examples/ # примеры вывода +``` + +Подробности о внутреннем устройстве и правилах изменения кода — в `AGENTS.md`. diff --git a/examples/blue_pen.png b/examples/blue_pen.png new file mode 100644 index 0000000000000000000000000000000000000000..5cecf020eb26c0337abc0cad127f19f6a6a390ad GIT binary patch literal 52426 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 $~ zc_5oun~$4olxA3+XkA)>+^5QufV3W*=ZJ*i6D^0Nh$V$+Da?AgS)aXsqH2EVKc-bE zBr5EXLFbH~PR*>a+4(WK^VZ-BO$vWrET~sKUW7aVu02B?ElUVX?h%vO_RC*qr3L0r z?xWLbh$RPK<|nadquo)z?x!vc1OzQ<6##<@}*ni1ntLS~{Beyp*y$ z$U=t}JL;P{KK<#$$1g7Av*Idtj2u@NoI6tTNUhJ>xYH0I#hM0AEH+0HNuVse-5$Dmh{fjkVe>g& zsWo*tvhr&Nh#I|fm)!MBX7#sP9lWCS$DRw{{+`lg>ZqtOiN;xF8i6is4$|3Gzv8)? zX|k{quInhJWF3+a#$UUo)h)bgDee*b+unRc>&WsXXjq;$1h-k34}MJi=9PtFRabJ! z%Qvdik{kP-ZxTzZ&2nSo{K;{1CaI#P2qO}@@BU(`zpr3KsBbc#Oe=f&^JAs8HcUoO z@)s@u0A0qvS!)Xk^au}eFRzx8uA#=Jj+(mmkRW17D=KTwEv%QGYlxy|PK=dOCtxfW zj}#LW6Gukz<8AIupnhRrp&y`vGoC0uQT2COmX!*=QPmFEOxi*=>|7QNHO} zmIU7^w<2_3;-dnlj*07ZPyU1CJ32+kEkQ%0A!5P^RVHj{Pi|f?$eC45miQJSYV+QV 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 literal 0 HcmV?d00001 diff --git a/examples/multiline.png b/examples/multiline.png new file mode 100644 index 0000000000000000000000000000000000000000..3b2b7d86f4fe8ebddc9e60a1c39c9be36e5ec67e GIT binary patch literal 53064 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 Oqa?5Xu13}( pip install pillow +""" + +from __future__ import annotations + +import argparse +import os +import random +import re +import sys +import textwrap +from typing import List, Optional, Tuple + +try: + from PIL import Image, ImageDraw, ImageFont +except ImportError: # pragma: no cover + sys.stderr.write("Нужна библиотека Pillow. Установите: pip install pillow\n") + sys.exit(1) + + +# --------------------------------------------------------------------------- +# Подбор шрифта +# --------------------------------------------------------------------------- + +# Приоритетный список системных рукописных/маркерных шрифтов (путь, индекс в .ttc). +# Они проверены на полное покрытие русской кириллицы на macOS. +PREFERRED_FONTS: List[Tuple[str, int]] = [ + ("/System/Library/Fonts/MarkerFelt.ttc", 0), # Marker Felt Thin + ("/System/Library/Fonts/MarkerFelt.ttc", 1), # Marker Felt Wide + ("/System/Library/Fonts/Supplemental/SnellRoundhand.ttc", 0), # Snell Roundhand + ("/System/Library/Fonts/Supplemental/SnellRoundhand.ttc", 1), + ("/System/Library/Fonts/Supplemental/SnellRoundhand.ttc", 2), + ("/System/Library/Fonts/Supplemental/Comic Sans MS.ttf", 0), # запасной, с кириллицей +] + +# Каталоги для поиска дополнительных шрифтов-кандидатов. +FONT_DIRS = [ + "/System/Library/Fonts", + "/System/Library/Fonts/Supplemental", + "/Library/Fonts", + os.path.expanduser("~/Library/Fonts"), + "/usr/share/fonts", + "/usr/local/share/fonts", +] + +# Имена файлов, похожие на рукописные. +HANDWRITING_HINTS = ( + "marker", "bradley", "comic", "hand", "script", "chalk", + "caveat", "snan", "note", "pen", "sign", "cursive", + "brush", "crayon", "kristen", "noteworthy", "snell", "marck", +) + +# Полный набор кириллических символов для проверки покрытия. +CYRILLIC_TEST = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяЁё" + + +_GLYPH_BOX = 72 + + +def _glyph_pixels(path: str, ch: str, index: int = 0, size: int = 60, + box: int = _GLYPH_BOX) -> "Image.Image": + """Рендерит символ в фиксированный квадрат для попиксельного сравнения.""" + f = ImageFont.truetype(path, size, index=index) + img = Image.new("L", (1, 1)) + d = ImageDraw.Draw(img) + b = d.textbbox((0, 0), ch, font=f) + img = Image.new("L", (box, box), 0) + d = ImageDraw.Draw(img) + x = (box - (b[2] - b[0])) // 2 - b[0] if (b[2] - b[0]) > 0 else box // 4 + y = (box - (b[3] - b[1])) // 2 - b[1] if (b[3] - b[1]) > 0 else box // 4 + d.text((x, y), ch, font=f, fill=255) + return img + + +def _glyph_diff(a: "Image.Image", b: "Image.Image") -> int: + """Сумма абсолютных разностей пикселей двух L-изображений.""" + ba = a.tobytes() + bb = b.tobytes() + return sum(abs(x - y) for x, y in zip(ba, bb)) + + +def _font_covers_cyrillic(path: str, index: int = 0) -> bool: + """Проверяет, что шрифт реально содержит глифы для всей кириллицы. + + Надёжный критерий без fontTools: каждый символ рендерится в фиксированный + квадрат и сравнивается с формой notdef-глифа (\uFFF0 заведомо отсутствует). + Если рендер совпадает с notdef — глифа в шрифте нет. + + Любая ошибка шрифта (включая OSError: stack overflow у некоторых битых + шрифтов) трактуется как «не покрывает» — шрифт пропускается. + """ + try: + ImageFont.truetype(path, 40, index=index) + except Exception: + return False + try: + notdef = _glyph_pixels(path, "\uFFF0", index) + for ch in CYRILLIC_TEST: + glyph = _glyph_pixels(path, ch, index) + if _glyph_diff(glyph, notdef) < 2000: # почти неотличим от notdef + return False + except Exception: + return False + return True + + +def find_handwriting_font(explicit: Optional[str] = None) -> Tuple[str, int]: + """Возвращает (путь, индекс) подходящего рукописного шрифта с кириллицей.""" + if explicit: + # Пользовательский шрифт: поддерживаем запись "path:index". + if ":" in explicit and os.path.exists(explicit.rsplit(":", 1)[0]): + path, idx = explicit.rsplit(":", 1) + return path, int(idx) + if os.path.exists(explicit): + return explicit, 0 + # Может быть именем шрифта — попытаемся найти среди каталогов. + target = explicit.lower() + for d in FONT_DIRS: + for p in _iter_font_files(d): + if target in os.path.basename(p).lower(): + for idx in range(4): + if _font_covers_cyrillic(p, idx): + return p, idx + raise FileNotFoundError(f"Шрифт не найден или не покрывает кириллицу: {explicit}") + + # 1) Приоритетные проверенные шрифты. + for path, idx in PREFERRED_FONTS: + if os.path.exists(path) and _font_covers_cyrillic(path, idx): + return path, idx + + # 2) Поиск по всем каталогам среди «рукописных» имён. + for d in FONT_DIRS: + if not os.path.isdir(d): + continue + for p in _iter_font_files(d): + base = os.path.basename(p).lower() + if not any(h in base for h in HANDWRITING_HINTS): + continue + for idx in range(4): + if _font_covers_cyrillic(p, idx): + return p, idx + + # 3) Любой шрифт с кириллицей (последний рубеж). + for d in FONT_DIRS: + if not os.path.isdir(d): + continue + for p in _iter_font_files(d): + for idx in range(4): + if _font_covers_cyrillic(p, idx): + return p, idx + + raise RuntimeError( + "Не найден системный шрифт с поддержкой кириллицы. " + "Укажите путь через --font или установите рукописный шрифт " + "(например, Caveat, Marck Script) с кириллицей." + ) + + +def list_handwriting_fonts() -> None: + """Печатает все найденные рукописные шрифты с поддержкой кириллицы.""" + seen = set() + found = [] + + # Приоритетные + for path, idx in PREFERRED_FONTS: + if os.path.exists(path) and _font_covers_cyrillic(path, idx): + key = (path, idx) + if key not in seen: + seen.add(key) + found.append(("приоритетный", path, idx)) + + # Поиск по «рукописным» именам + for d in FONT_DIRS: + if not os.path.isdir(d): + continue + for p in _iter_font_files(d): + base = os.path.basename(p).lower() + if not any(h in base for h in HANDWRITING_HINTS): + continue + for idx in range(4): + key = (p, idx) + if key in seen: + continue + if _font_covers_cyrillic(p, idx): + seen.add(key) + found.append(("рукописный", p, idx)) + + # (Третий блок «любой шрифт с кириллицей» намеренно пропущен: он медленный + # и выдаёт сотни не-рукописных шрифтов. Для рендера нужен именно рукописный.) + + if not found: + sys.stdout.write("Рукописные шрифты с кириллицей не найдены.\n") + return + sys.stdout.write(f"Найдено шрифтов с поддержкой кириллицы: {len(found)}\n") + for kind, path, idx in found: + mark = " ← используется по умолчанию" if (path, idx) == (PREFERRED_FONTS[0][0], PREFERRED_FONTS[0][1]) and os.path.exists(path) else "" + sys.stdout.write(f" [{kind}] {path}#{idx}{mark}\n") + + +def _iter_font_files(root: str): + for dirpath, _dirs, files in os.walk(root): + for fn in files: + if fn.lower().endswith((".ttf", ".ttc", ".otf")): + yield os.path.join(dirpath, fn) + + +# --------------------------------------------------------------------------- +# Рендеринг +# --------------------------------------------------------------------------- + +def _load_font(path: str, index: int, size: int) -> ImageFont.FreeTypeFont: + return ImageFont.truetype(path, size, index=index) + + +def _word_widths(text: str, font: ImageFont.FreeTypeFont, draw: ImageDraw.ImageDraw) -> List[Tuple[str, int]]: + """Возвращает список (слово, ширина в пикселях) с пробелом-разделителем.""" + space = draw.textlength(" ", font=font) + parts = [] + for i, word in enumerate(text.split(" ")): + w = draw.textlength(word, font=font) + parts.append((word, w)) + # между словами — пробел + result = [] + for i, (word, w) in enumerate(parts): + result.append((word, w)) + if i < len(parts) - 1: + result.append((" ", space)) + return result + + +def wrap_text(text: str, font: ImageFont.FreeTypeFont, draw: ImageDraw.ImageDraw, + max_width: int) -> List[str]: + """Перенос текста по словам с учётом ширины строки.""" + lines_in = text.splitlines() or [""] + out: List[str] = [] + for line in lines_in: + if not line.strip(): + out.append("") + continue + tokens = _word_widths(line, font, draw) + cur = "" + cur_w = 0.0 + for tok, w in tokens: + if cur_w + w <= max_width or not cur: + cur += tok + cur_w += w + else: + out.append(cur.rstrip()) + cur = tok if tok.strip() else "" + cur_w = w if tok.strip() else 0.0 + if cur: + out.append(cur.rstrip()) + return out or [""] + + +def render_handwriting( + text: str, + output: str, + font_path: str, + font_index: int, + font_size: int = 44, + line_spacing: float = 1.6, + margin: int = 64, + max_chars_per_line: Optional[int] = None, + ink_color: str = "#1a3b8c", # синие чернила (можно переопределить через --ink) + paper_color: str = "#ffffff", + lined: bool = False, + lined_color: str = "#cfe8ff", + jitter: float = 1.0, + rotate_lines: bool = True, + seed: Optional[int] = None, +) -> Tuple[int, int]: + """Рендерит текст в рукописную картинку и сохраняет в ``output``.""" + rng = random.Random(seed) + ink = _parse_color(ink_color) + paper = _parse_color(paper_color) + line_color = _parse_color(lined_color) + + # предварительный шрифт для замера + probe_font = _load_font(font_path, font_index, font_size) + probe_img = Image.new("RGB", (10, 10), paper) + probe_draw = ImageDraw.Draw(probe_img) + + # ширина строки по символам + avg_char = probe_draw.textlength("А", font=probe_font) + if max_chars_per_line is None: + max_chars_per_line = 48 + target_width = int(avg_char * max_chars_per_line) + margin * 2 + + lines = wrap_text(text, probe_font, probe_draw, target_width - margin * 2) + + # размеры строк + line_h = int(font_size * line_spacing) + ascent, descent = probe_font.getmetrics() + text_h = ascent + descent + + # Реальная ширина самой длинной строки (после переноса) + запас под поворот + # строки и лёгкое смещение. Иначе правый край (например «5.» в конце формулы) + # обрезался бы границей картинки при повороте строки. + max_lw = 0.0 + for line in lines: + if line: + max_lw = max(max_lw, probe_draw.textlength(line, font=probe_font)) + # запас под поворот: при угле до ~0.8° и высоте строки text_h дополнительная + # ширина невелика, берём с запасом. + rot_pad = int(text_h * 0.1) + 6 + needed_w = int(max_lw) + margin * 2 + rot_pad + 6 + img_w = max(target_width, needed_w) + img_h = margin * 2 + line_h * len(lines) + + img = Image.new("RGBA", (img_w, img_h), paper + (255,)) + draw = ImageDraw.Draw(img) + + # линейная бумага + if lined: + y = margin + line_h + while y < img_h - margin // 2: + draw.line([(margin // 2, y), (img_w - margin // 2, y)], + fill=line_color, width=1) + y += line_h + + for li, line in enumerate(lines): + # небольшое базовое смещение строки по горизонтали и наклон + x0 = margin + rng.randint(-3, 3) + y0 = margin + li * line_h + rng.randint(-2, 2) + + # лёгкий поворот строки для «живости» + line_layer = None + if rotate_lines and line.strip(): + angle = rng.uniform(-0.8, 0.8) * jitter + lw = draw.textlength(line, font=probe_font) + lh = text_h + 6 + limg = Image.new("RGBA", (int(lw) + 10, lh + 10), (0, 0, 0, 0)) + ldraw = ImageDraw.Draw(limg) + _draw_jittered_line(ldraw, line, 5, 5, probe_font, ink, + jitter=jitter, rng=rng) + lrot = limg.rotate(angle, expand=True, resample=Image.BICUBIC, + fillcolor=(0, 0, 0, 0)) + img.paste(lrot, (x0, y0), lrot) + else: + lw = draw.textlength(line, font=probe_font) + _draw_jittered_line(draw, line, x0, y0 + 4, probe_font, ink, + jitter=jitter, rng=rng) + + img.convert("RGB").save(output) + return img.size + + +_PUNCT_CHARS = frozenset([ + ".", ",", ";", ":", "!", "?", + "-", "\u2014", "\u2013", "\u2026", + "\u00ab", "\u00bb", "(", ")", "[", "]", + "\u201e", "\u201c", "\u201d", "\u2018", "\u2019", + "\u2010", "\u2011", "\u2012", + "'", '"', + "/", "@", "#", "%", "*", "+", "=", "<", ">", +]) + + +def _draw_jittered_line(draw: ImageDraw.ImageDraw, line: str, x: int, y: int, + font: ImageFont.FreeTypeFont, + ink: Tuple[int, int, int], jitter: float, + rng: random.Random) -> None: + """Рисует строку в стиле «рукописной ручки» (синие чернила). + + Эффект «как-будто рукой написано» строится из трёх составляющих: + 1. Давление — коррелированное случайное блуждание яркости (соседние буквы + получаются близкими по тону, иногда рука «надавливает» сильнее/слабее). + 2. Полупрозрачные чернила — каждый символ рисуется с переменной альфой + (pressure), поверх бумаги, поэтому тонкие/слабые участки светлее. + 3. Неровный край мазка — лёгкое эрозионное «истончение» маски символа, + имитирующее, как чернила ложатся на бумагу неидеально ровно. + """ + if not line: + return + + # коррелированное «давление»: яркость/прозрачность медленно дрейфует, + # имитируя непрерывное ведение пера рукой (а не независимый шум). + pressure = 1.0 # 1.0 — нормальное, >1 — темнее/гуще, <1 — слабее/светлее + cx = float(x) + + # ЕДИНОЕ вертикальное смещение для всей строки: все символы (и буквы, и + # знаки препинания) лежат на одной базовой линии, поэтому точка не + # «отлетает» вверх/вниз относительно букв. + line_dy = rng.randint(-1, 1) if jitter else 0 + + # накопление лёгкой «неравномерности» хода пера по горизонтали. Для знаков + # препинания зазор минимален — точка/запятая примыкают к слову. + advance_noise = 0.0 + + # верх строки на экране (одно смещение для всей строки). Все глифы + # рисуются со стандартным PIL-выравниванием от этого верха — поэтому + # б/й/н на одной baseline, р/у/д — с хвостами ниже, точки — внизу. + line_top = y + line_dy + + for ch in line: + # дрейф давления: случайный шаг с возвратом к норме (mean-reverting) + step = rng.uniform(-0.10, 0.13) * jitter + pressure += step + pressure = max(0.62, min(1.28, pressure * 0.92 + 0.08 * 1.0)) + + is_punct = ch in _PUNCT_CHARS + + # яркость/насыщенность синего управляются давлением (все каналы в одну сторону) + col = _apply_pressure_color(ink, pressure, rng, jitter) + # прозрачность тоже зависит от давления (слабое нажатие → светлее) + alpha = int(max(120, min(255, 200 + 55 * (pressure - 0.6)))) + + # рисуем символ-маску и композируем с альфой поверх «бумаги». + # Знаки препинания рисуем чётко (без «рваного» края), чтобы точка + # оставалась аккуратной, чёткой и строго на базовой линии. + _stamp_glyph(draw, ch, cx, line_top, font, col, alpha, rng, + jitter=0.0 if is_punct else jitter) + + adv = draw.textlength(ch, font=font) + # для знаков препинания почти не добавляем горизонтальный зазор, + # чтобы точка/запятая примыкали к слову + step_j = 0.0 if is_punct else rng.uniform(-0.4, 0.6) * jitter + advance_noise = advance_noise * 0.5 + step_j + cx += adv + advance_noise + + +def _stamp_glyph(draw: ImageDraw.ImageDraw, ch: str, x: float, line_top: int, + font: ImageFont.FreeTypeFont, color: Tuple[int, int, int], + alpha: int, rng: random.Random, jitter: float, + is_punct: bool = False) -> None: + """Отрисовывает один символ «мазком пера» со стандартным выравниванием PIL. + + Глиф позиционируется в точности как ``text((x, line_top))`` — с одинаковым + верхом строки для всех символов. Благодаря этому выравнивание совпадает + с обычным текстом: + - обычные буквы (а, о, н, б, й) и заглавные стоят на одной baseline; + - буквы с нижними выносными (р, у, д, ц, щ) опускают хвосты ниже baseline + (строчная «р» ниже обычных букв — как в рукописи); + - точки/запятые находятся внизу строки (на baseline); + - спецсимволы ($ ~ % @ # ...) располагаются согласно дизайну шрифта. + + «Рукописный» эффект (полупрозрачные чернила + неровный край) применяется к + маске глифа, которая композируется поверх бумаги по тем же координатам, что + и text(). Знаки препинания рисуются с jitter=0 (без «рваного» края), чтобы + точка/запятая оставались чёткими. + """ + if ch == " " or not ch.strip(): + return # пробел/пробельный — курсор продвигается выше + bbox = draw.textbbox((0, 0), ch, font=font) + # bbox отсчитывается от origin (0,0) text(): может иметь отрицательные + # bbox[0]/bbox[1] (глиф выпирает влево/вверх, напр. Й, р с хвостом вниз). + # Размер канваса берём по абсолютным границам bbox + запас PAD с каждой стороны. + PAD = 8 + x0 = min(bbox[0], 0) + y0 = min(bbox[1], 0) + x1 = max(bbox[2], 0) + y1 = max(bbox[3], 0) + mask_w = (x1 - x0) + PAD * 2 + mask_h = (y1 - y0) + PAD * 2 + mask = Image.new("L", (mask_w, mask_h), 0) + mdraw = ImageDraw.Draw(mask) + # Рисуем глиф с origin (PAD - x0, PAD - y0), чтобы bbox целиком попал в канвас. + mdraw.text((PAD - x0, PAD - y0), ch, font=font, fill=255) + + if jitter > 0: + _roughen_mask(mask, rng, jitter) + + stamp = Image.new("RGBA", mask.size, color + (alpha,)) + stamp.putalpha(mask) + # origin глифа в канвасе = (PAD - x0, PAD - y0). Чтобы он совпал с экранной + # точкой (x, line_top), левый-верх канваса = (x - (PAD - x0), line_top - (PAD - y0)). + left = int(x) - (PAD - x0) + top = line_top - (PAD - y0) + draw._image.alpha_composite(stamp, (left, top)) + + +def _roughen_mask(mask: "Image.Image", rng: random.Random, jitter: float) -> None: + """Слегка «рвёт» край маски символа, имитируя неровный мазок пера.""" + # дёшево и быстро: точечное прореживание по краю через случайные пиксели + w, h = mask.size + px = mask.load() + # выборочно затемняем/осветляем граничные пиксели (где значение 1..254) + n = int(w * h * 0.02 * jitter) + for _ in range(n): + xg = rng.randint(1, w - 2) + yg = rng.randint(1, h - 2) + v = px[xg, yg] + if 0 < v < 255: # крайний (полупрозрачный от антиалиасинга) пиксель + px[xg, yg] = max(0, v - rng.randint(40, 110)) + + +def _parse_color(s: str) -> Tuple[int, int, int]: + raw = s.strip().lstrip("#") + if len(raw) == 3: + raw = "".join(c * 2 for c in raw) + if len(raw) == 6: + try: + return (int(raw[0:2], 16), int(raw[2:4], 16), int(raw[4:6], 16)) + except ValueError: + pass + raise SystemExit(f"Некорректный цвет {s!r} — используйте формат #RRGGBB (например #1a3b8c).") + + +def _jitter_color(c, rng: random.Random, amount: int = 6): + return ( + max(0, min(255, c[0] + rng.randint(-amount, amount))), + max(0, min(255, c[1] + rng.randint(-amount, amount))), + max(0, min(255, c[2] + rng.randint(-amount, amount))), + ) + + +def _apply_pressure_color(base: Tuple[int, int, int], pressure: float, + rng: random.Random, jitter: float) -> Tuple[int, int, int]: + """Цвет чернил с учётом «давления пера». + + pressure > 1 — рука надавила сильнее → темнее/гуще; + pressure < 1 — слабее → светлее. Все каналы смещаются согласованно + (в одну сторону), плюс крошечный случайный «оттенок» для живости. + """ + # фактор яркости: pressure>1 → затемнение, <1 → высветление + shift = int((1.0 - pressure) * 70) # насколько изменить яркость + base_amt = int(4 * jitter) + return ( + max(0, min(255, base[0] + shift + rng.randint(-base_amt, base_amt))), + max(0, min(255, base[1] + shift + rng.randint(-base_amt, base_amt))), + max(0, min(255, base[2] + shift + rng.randint(-base_amt, base_amt))), + ) + +# --------------------------------------------------------------------------- +# Палитры / градиенты чернил +# --------------------------------------------------------------------------- + +# --------------------------------------------------------------------------- +# CLI +# --------------------------------------------------------------------------- + +def _read_input(args) -> str: + if args.input and args.input != "-": + with open(args.input, "r", encoding="utf-8") as f: + return f.read() + if not sys.stdin.isatty(): + data = sys.stdin.read() + if data: + return data + if args.text: + return args.text + sys.stderr.write("Нет входного текста. Укажите текст аргументом, -i файл или STDIN.\n") + sys.exit(2) + + +def main(argv=None) -> int: + p = argparse.ArgumentParser( + prog="handwrite", + description="Рендер текста в рукописную картинку с поддержкой кириллицы.", + ) + p.add_argument("text", nargs="?", default=None, help="Текст для рендера.") + p.add_argument("-i", "--input", default=None, + help="Файл с текстом (UTF-8); переносы строк сохраняются. " + "'-' = STDIN, иначе при отсутствии текста — STDIN.") + p.add_argument("-o", "--output", default="handwriting.png", help="Выходной PNG.") + p.add_argument("--font", default=None, + help="Путь к шрифту (или path:index). Иначе авто-подбор рукописного.") + p.add_argument("--font-size", type=int, default=44, help="Размер шрифта (pt).") + p.add_argument("--line-spacing", type=float, default=1.6, help="Множитель межстрочного интервала.") + p.add_argument("--margin", type=int, default=64, help="Поля вокруг текста (px).") + p.add_argument("--chars-per-line", type=int, default=48, + help="Примерная ширина строки в символах для переноса.") + p.add_argument("--ink", default="#1a3b8c", + help="Цвет чернил (#RRGGBB). По умолчанию — синий.") + p.add_argument("--paper", default="#ffffff", help="Цвет бумаги (#RRGGBB).") + p.add_argument("--lined", action="store_true", help="Рисовать линейную «тетрадную» бумагу.") + p.add_argument("--lined-color", default="#cfe8ff", help="Цвет линий бумаги.") + p.add_argument("--jitter", type=float, default=1.0, + help="Сила «рукописного» дрожания (0 — ровный текст).") + p.add_argument("--no-rotate-lines", dest="rotate_lines", action="store_false", + help="Отключить лёгкий поворот строк.") + p.add_argument("--seed", type=int, default=None, help="Зерно ГПСЧ для воспроизводимости.") + p.add_argument("--list-fonts", action="store_true", + help="Вывести доступные рукописные шрифты с кириллицей и выйти.") + args = p.parse_args(argv) + + if args.list_fonts: + list_handwriting_fonts() + return 0 + + text = _read_input(args) + text = text.replace("\r\n", "\n").rstrip() + "\n" + + font_path, font_index = find_handwriting_font(args.font) + w, h = render_handwriting( + text=text, + output=args.output, + font_path=font_path, + font_index=font_index, + font_size=args.font_size, + line_spacing=args.line_spacing, + margin=args.margin, + max_chars_per_line=args.chars_per_line, + ink_color=args.ink, + paper_color=args.paper, + lined=args.lined, + lined_color=args.lined_color, + jitter=args.jitter, + rotate_lines=args.rotate_lines, + seed=args.seed, + ) + sys.stdout.write( + f"Готово: {args.output} ({w}x{h}px), шрифт: " + f"{os.path.basename(font_path)}#{font_index}\n" + ) + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e3fd7e2 --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +Pillow>=9.0.0 diff --git a/run.sh b/run.sh new file mode 100755 index 0000000..e3c24e9 --- /dev/null +++ b/run.sh @@ -0,0 +1,176 @@ +#!/bin/bash +# run.sh — команды-обёртки для hand-writter. +# Использование: ./run.sh <команда> [аргументы] [-- опции handwrite.py] + +set -e + +OS_NAME=$(uname -s) +# Python-интерпретатор. По умолчанию python3.13; если нет — системный python3. +PY="python3.13" +command -v "$PY" >/dev/null 2>&1 || PY="python3" +SCRIPT="$(dirname "$0")/handwrite.py" +OUT_DIR="$(dirname "$0")/out" +mkdir -p "$OUT_DIR" + +activate() { + source "$(dirname "$0")/.venv/bin/activate" 2>/dev/null || true +} + +usage() { + cat <<'USAGE' +Команды: + init Создать venv и установить зависимости + upd Обновить зависимости + render "текст" Рендер текста-аргумента → out/handwriting.png + lined "текст" Рендер на тетрадной бумаге → out/handwriting.png + big "текст" Крупный шрифт (64pt) на тёплой бумаге + calm "текст" «Спокойный» почерк (jitter 0.3, seed 42) + plain "текст" Ровный текст (без дрожания/поворота строк) + render-file file Рендер файла (с переносами строк) → out/handwriting.png + poetry file Многострочный файл → тетрадь, крупный шрифт → out/poetry.png + render-stdin Чтение из STDIN (echo "..." | ./run.sh render-stdin) + list-fonts Показать доступные рукописные шрифты с кириллицей + examples Перегенерировать примеры в examples/ + +Доп. опции handwrite.py можно передать после -- (или просто в конце): + ./run.sh render "Текст" -- --jitter 0.4 --seed 7 + ./run.sh lined "Текст" -- --ink "#0f2d78" + ./run.sh render-file text.txt --chars-per-line 60 + ./run.sh poetry poem.txt -- --seed 1 +USAGE +} + +init() { + "$PY" -m venv "$(dirname "$0")/.venv" + upd +} + +upd() { + activate + pip install -r "$(dirname "$0")/requirements.txt" --upgrade + git submodule update --init --recursive 2>/dev/null || true +} + +# Удалить ведущий "--" из оставшихся аргументов (разделитель опций handwrite.py) +strip_dashdash() { + if [[ "$1" == "--" ]]; then shift; fi + echo "$@" +} + +# Рендер текста-аргумента в out/handwriting.png +render() { + activate + local text="$1"; shift || true + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" "$text" -o "$out" $opts +} + +# Рендер из файла (с сохранением переносов строк) +render_file() { + activate + local file="$1"; shift || true + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" -i "$file" -o "$out" $opts +} + +# Чтение из STDIN +render_stdin() { + activate + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" -o "$out" $opts +} + +# Тетрадная бумага (синие чернила + линии) +lined() { + activate + local text="$1"; shift || true + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" "$text" -o "$out" --lined $opts +} + +# Крупный шрифт (64pt) на тёплой бумаге +big() { + activate + local text="$1"; shift || true + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" "$text" -o "$out" --font-size 64 --paper "#fdf6e3" $opts +} + +# «Спокойный» почерк: меньше дрожания, воспроизводимо (seed 42) +calm() { + activate + local text="$1"; shift || true + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" "$text" -o "$out" --jitter 0.3 --seed 42 $opts +} + +# Ровный текст: без дрожания и без поворота строк +plain() { + activate + local text="$1"; shift || true + local out="$OUT_DIR/handwriting.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" "$text" -o "$out" --jitter 0 --no-rotate-lines $opts +} + +# Многострочный файл как «тетрадь»: тетрадные линии + крупный шрифт +poetry() { + activate + local file="$1"; shift || true + local out="$OUT_DIR/poetry.png" + local opts; opts=$(strip_dashdash "$@") + "$PY" "$SCRIPT" -i "$file" -o "$out" --lined --font-size 56 --paper "#fdf6e3" $opts +} + +# Список доступных рукописных шрифтов с кириллицей +list_fonts() { + activate + "$PY" "$SCRIPT" --list-fonts +} + +# Перегенерировать примеры в examples/ +examples() { + activate + local E="$(dirname "$0")/examples" + mkdir -p "$E" + printf 'Многострочный текст\nс переносами строк.\nТочки, запятые — внизу.\n' > "$E/sample_input.txt" + "$PY" "$SCRIPT" "Синий текст написанный от руки на кириллице: щипцы, ёж, юла, река." \ + -o "$E/blue_pen.png" --lined + "$PY" "$SCRIPT" "Глеб шёл по тропинке, и тетрадь ложилась ровно под перо." \ + -o "$E/blue_pen_lined.png" --lined + "$PY" "$SCRIPT" -i "$E/sample_input.txt" -o "$E/multiline.png" --lined + echo "Примеры перегенерированы в $E/" +} + +echo "_= hand-writter =_" +if [ -n "$1" ]; then + case "$1" in + init) init ;; + upd) upd ;; + render) shift; render "$@" ;; + lined) shift; lined "$@" ;; + big) shift; big "$@" ;; + calm) shift; calm "$@" ;; + plain) shift; plain "$@" ;; + render-file) shift; render_file "$@" ;; + poetry) shift; poetry "$@" ;; + render-stdin) shift; render_stdin "$@" ;; + list-fonts) list_fonts ;; + examples) examples ;; + help|--help|-h) shift; usage ;; + *) + echo "Неизвестная команда: $1" + usage + exit 1 + ;; + esac +else + usage +fi + diff --git a/text.txt b/text.txt new file mode 100644 index 0000000..529a9a4 --- /dev/null +++ b/text.txt @@ -0,0 +1,6 @@ +Привет, мир! Это рукописный текст на кириллице. УУуууу АаааАА. x + y = 5. +Что еще нужно? +Проверяем проверяем проверяем... +скор-ие, сильное вос-тие! +~$100 ййй ёёё +{ скобки } (в скобках) "да"