mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 21:46:35 +00:00
100 lines
7.2 KiB
Markdown
100 lines
7.2 KiB
Markdown
# План: вторая волна EASY-инструментов
|
|
|
|
> **СТАТУС: ВЫПОЛНЕН 2026-08-23.**
|
|
|
|
## 1. Принципы отбора
|
|
|
|
- Максимум переиспользования: готовые контракты записей (`run`, `preview`,
|
|
формат вывода, info-режим) и существующие операции ядра.
|
|
- Новые механизмы ядра — минимальные, чистые, покрытые тестами до подключения
|
|
инструментов.
|
|
- Canvas/DOM-зависимые утилиты (SVG-вход, надписи и водяные знаки, эффекты через
|
|
фильтры контекста) — вне этого пакета, отдельная волна.
|
|
- Целевой объём волны: около 37 новых инструментов, каталог вырастает с 11 до
|
|
~48.
|
|
|
|
## 2. Новые механизмы
|
|
|
|
- **Генераторы без входного файла**: у записи появляется признак «источник не
|
|
нужен»; страница такого инструмента не показывает левую панель и зону
|
|
перетаскивания — только параметры и результат.
|
|
- **Текстовый ввод и вывод**: часть утилит принимает вставленный текст вместо
|
|
файла и выдаёт текстовый результат (панель с полем только для чтения, кнопки
|
|
«копировать» и «скачать как текст»). Распространяется на base64, data-uri,
|
|
hex.
|
|
- **BMP-энкодер в ядре**: 24-битный, чистая функция из пикселей в байты, с
|
|
тестами на маленьких матрицах (заголовок, порядок каналов BGR, паддинг
|
|
строки).
|
|
|
|
## 3. Состав пакета
|
|
|
|
**Конвертация — 6** `jpg-to-png`, `webp-to-png`, `gif-to-png` (первый кадр),
|
|
`bmp-to-png`, `ico-to-png` — всё через уже умеющий декодировать ввод, сохранение
|
|
в PNG; плюс `png-to-bmp` на новом энкодере.
|
|
|
|
**Текстовые представления — 6** `png-to-base64`, `base64-to-png`,
|
|
`png-to-data-uri`, `data-uri-to-png`, `png-to-hex`, `hex-to-png`.
|
|
|
|
**Цвет — 9** `change-opacity` (множитель прозрачности), `sepia`, `change-hue`
|
|
(сдвиг тона), `extract-channel` (выбор R/G/B в оттенках серого), `swap-channels`
|
|
(перестановка парой), `threshold-black-white` (порог яркости), `posterize`
|
|
(число уровней), `two-colors` (два цвета + порог), `invert-alpha`.
|
|
|
|
**Прозрачность и холст — 7** `remove-alpha-channel` (подложка белым),
|
|
`set-alpha-channel` (константная прозрачность), `extract-alpha-mask` (альфа в
|
|
чёрно-белую маску), `add-padding` (отступ + цвет/прозрачность), `add-border`
|
|
(толщина + цвет), `round-corners` (радиус), `fit-on-background` (вписать на
|
|
полотно цвета с полями).
|
|
|
|
**Композиция — 2** `tile` (повтор по сетке), `center-by-alpha` (центрирование по
|
|
непрозрачному содержимому).
|
|
|
|
**Генераторы — 4** `create-empty` (размер + цвет или прозрачность),
|
|
`single-color`, `random-noise` (с фиксированным зерном для воспроизводимости),
|
|
`linear-gradient` (два цвета, направление).
|
|
|
|
**Анализ — 3** `is-grayscale`, `is-transparent`, `orientation`
|
|
(портрет/ландшафт/квадрат) — текстовые сводки в info-режиме.
|
|
|
|
## 4. Новые операции ядра (все — чистые функции с тестами)
|
|
|
|
- Холст: расширение полотна (общая база для padding/border/fit), тайлинг, центр
|
|
по bounding-box альфы, скругление углов маской радиуса.
|
|
- Цвет: сепия, сдвиг тона через HSL, множитель альфы, извлечение/перестановка
|
|
каналов, пороги (яркость и двухцветный), постеризация уровней, инверсия альфы.
|
|
- Генерация: заливка цветом, шум с зерном, линейный градиент.
|
|
- Форматы: BMP-энкодер; кодеки текстовых представлений (base64/data-uri/hex в
|
|
обе стороны).
|
|
- Анализ: проверка монохромности, полной непрозрачности, ориентации.
|
|
|
|
## 5. Этапы и проверки
|
|
|
|
- **A. Механизмы** — генераторный режим страницы, текстовый ввод/вывод,
|
|
BMP-энкодер. Проверка: `test/check/build`.
|
|
- **B. Конвертация и текстовые представления** — 12 инструментов. Проверка:
|
|
ручной прогон каждой конвертации туда-обратно.
|
|
- **C. Цвет** — 9 инструментов. Проверка: юнит-тесты операций + визуально.
|
|
- **D. Прозрачность, холст, композиция** — 9 инструментов. Проверка:
|
|
юнит-тесты + визуально.
|
|
- **E. Генераторы и анализ** — 7 инструментов. Проверка: детерминизм шума (одно
|
|
зерно — одно изображение), своды анализа.
|
|
- **F. Итог** — полный прогон, смоук всех новых инструментов «настроить →
|
|
скачать», регресс старых одиннадцати.
|
|
|
|
## 6. Критерии готовности
|
|
|
|
- Каталог содержит ~48 рабочих инструментов, каждый доступен страницей с формы
|
|
из реестра.
|
|
- Все новые операции ядра покрыты тестами; обратимые конвертации проверены
|
|
круговым прогоном (например PNG → base64 → PNG даёт те же пиксели).
|
|
- Генераторы работают без загрузки файла; текстовые представления копируются и
|
|
скачиваются.
|
|
- `test/check/build` зелёные.
|
|
|
|
## 7. Что сознательно не делаем
|
|
|
|
- SVG-вход, рисование текста и водяных знаков, эффекты через фильтры контекста,
|
|
GIF/APNG-энкодинг, пакетная обработка — последующие волны.
|
|
- Семейства logo/icon/signature/stamp как отдельные страницы — они будут
|
|
конфигурациями тех же операций после этой волны.
|