7.1 KiB
План: вторая волна EASY-инструментов
Статус: план к выполнению.
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 как отдельные страницы — они будут конфигурациями тех же операций после этой волны.