mirror of
https://github.com/Ku6epXBOCTuK/easy-png-tools.git
synced 2026-09-14 21:46:35 +00:00
964 lines
49 KiB
TypeScript
964 lines
49 KiB
TypeScript
import type { Dict } from './dict';
|
||
|
||
export const ru: Dict = {
|
||
header: {
|
||
workspace: 'Рабочая область',
|
||
catalog: 'Каталог',
|
||
sectionsAria: 'Разделы',
|
||
footerNote:
|
||
'Все операции выполняются локально в вашем браузере — файлы никуда не отправляются.'
|
||
},
|
||
categories: {
|
||
convert: 'Конвертация',
|
||
alpha: 'Прозрачность',
|
||
color: 'Цвет',
|
||
geometry: 'Геометрия',
|
||
filters: 'Фильтры',
|
||
text: 'Текст',
|
||
analyze: 'Анализ',
|
||
generate: 'Генерация'
|
||
},
|
||
home: {
|
||
defaultTitle: 'easy-png-tools — PNG-утилиты прямо в браузере',
|
||
heroTitle: 'Что делаем с изображением?',
|
||
heroLead: 'Найдите инструмент — все операции выполняются локально в браузере.',
|
||
restoreLast: '↩ Вернуть последний: {title}',
|
||
changeTool: '← Сменить инструмент'
|
||
},
|
||
catalog: {
|
||
pageTitle: 'Все инструменты — easy-png-tools',
|
||
metaDescription:
|
||
'Полный каталог PNG-утилит: конвертация, прозрачность, цвет, геометрия, анализ и генерация изображений.',
|
||
heading: 'Каталог инструментов',
|
||
lead: '{count} утилит для работы с PNG. Все операции выполняются локально в браузере.'
|
||
},
|
||
toolPage: {
|
||
fallbackTitle: 'Инструмент',
|
||
legendSource: 'Исходник',
|
||
legendSummary: 'Сводка',
|
||
legendResult: 'Результат',
|
||
legendParams: 'Параметры',
|
||
stepHeading: 'Шаг {n}',
|
||
removeStepAria: 'Убрать шаг',
|
||
stepError: 'Шаг {n} ({title}): {msg}'
|
||
},
|
||
chain: {
|
||
stepLabel: 'Шаг {n}: {title}',
|
||
inputLegend: 'Вход',
|
||
resultLegend: 'Результат',
|
||
paramsLegend: 'Параметры',
|
||
busyTitle: 'Обработка…',
|
||
busyHint: 'Выполняется шаг цепочки',
|
||
removeStepAria: 'Убрать шаг'
|
||
},
|
||
sourceCard: {
|
||
replaceImage: 'Заменить изображение'
|
||
},
|
||
resultCard: {
|
||
emptyTitle: 'Результат появится здесь',
|
||
emptyHint: 'Сначала загрузите исходное изображение слева',
|
||
processingTitle: 'Обработка…',
|
||
processingHint: 'Изображение обрабатывается, это займёт немного времени',
|
||
recalc: 'Пересчёт…',
|
||
nextTool: '⛓ Следующий инструмент',
|
||
breakChain: '✂ Оборвать цепочку'
|
||
},
|
||
paramsCard: {
|
||
noParams: 'У этого инструмента нет параметров — результат уже готов.'
|
||
},
|
||
textInput: {
|
||
heading: 'Текст',
|
||
placeholder: 'Вставьте данные сюда',
|
||
aria: 'Текстовые данные',
|
||
decode: 'Декодировать'
|
||
},
|
||
textResult: {
|
||
outputAria: 'Текстовый результат',
|
||
copied: 'Скопировано',
|
||
copy: 'Копировать',
|
||
downloadTxt: 'Скачать .txt'
|
||
},
|
||
download: {
|
||
busy: 'Готовим файл…',
|
||
file: 'Скачать .{ext}'
|
||
},
|
||
infoPanel: {
|
||
dimensions: 'Размеры',
|
||
alpha: 'Альфа-канал',
|
||
alphaYes: 'есть — есть полупрозрачные пиксели',
|
||
alphaNo: 'нет',
|
||
colorCount: 'Уникальных цветов (RGBA)'
|
||
},
|
||
dropZone: {
|
||
pickDefault: 'Перетащите изображение сюда или нажмите, чтобы выбрать файл',
|
||
overlayDefault: 'Отпустите файл, чтобы заменить изображение'
|
||
},
|
||
search: {
|
||
placeholder: 'Найдите инструмент…',
|
||
aria: 'Поиск инструмента',
|
||
nothingFound: 'Ничего не найдено — попробуйте другое слово.'
|
||
},
|
||
ui: {
|
||
showMask: 'Показать маску',
|
||
decrease: 'Уменьшить',
|
||
increase: 'Увеличить',
|
||
reset: 'Сбросить',
|
||
pipette: 'Пипетка',
|
||
themeLight: 'Светлая тема',
|
||
themeDark: 'Тёмная тема',
|
||
overlayTitle: 'Знак',
|
||
overlayDrop: 'Перетащите PNG-знак или нажмите',
|
||
overlayRemove: 'Убрать знак'
|
||
},
|
||
errors: {
|
||
noImageRun: 'Этот инструмент не обрабатывает изображения',
|
||
workerFailed: 'Ошибка исполнения в воркере',
|
||
workerUnavailable: 'Воркер недоступен',
|
||
notFound: 'Инструмент не найден',
|
||
noWatermark: 'Сначала выберите картинку-знак',
|
||
badTransform: 'Вырожденная матрица трансформации',
|
||
skewAngle: 'Углы наклона не могут быть 90° или -90°',
|
||
badHex: 'Некорректный HEX-цвет: "{value}"',
|
||
radiusInt: 'Радиус должен быть целым неотрицательным числом',
|
||
kernelSize: 'Ядро не совпадает с изображением по размеру',
|
||
sizeInt: 'Ширина и высота должны быть целыми числами ≥ 1',
|
||
cropBounds: 'Область обрезки не пересекает изображение',
|
||
noCanvasCtx: 'Canvas 2D context недоступен в этом окружении',
|
||
badBase64: 'Ожидается base64-строка или data-uri изображения',
|
||
qualityRange: 'quality должно быть в диапазоне 0..1',
|
||
svgSize: 'Не удалось определить размер SVG',
|
||
svgLoad: 'Не удалось загрузить SVG — проверьте разметку',
|
||
encodeUnsupported: 'Браузер не поддерживает кодирование в {mime}',
|
||
unsupportedFile:
|
||
'Неподдерживаемый формат файла ({type}). Поддерживаются PNG, JPEG, WebP, GIF и BMP.',
|
||
widthInt: 'Ширина изображения должна быть целым числом ≥ 1',
|
||
noHexPixels: 'Не найдено hex-значений пикселей',
|
||
badPixelToken: 'Каждый пиксель — 8 hex-символов RRGGBBAA, значения через пробел',
|
||
pixelCountMismatch: 'Число пикселей ({count}) не делится на ширину {width} без остатка',
|
||
toolNotFound: 'Инструмент "{id}" не найден',
|
||
badJson: 'Файл не является корректным JSON',
|
||
badPipelineShape: 'Структура файла не похожа на цепочку шагов',
|
||
pipelineVersion: 'Неподдерживаемая версия цепочки: {version}',
|
||
noSteps: 'В файле нет списка шагов',
|
||
paramNumber: 'Параметр "{id}" должен быть числом',
|
||
paramString: 'Параметр "{id}" должен быть строкой',
|
||
paramBool: 'Параметр "{id}" должен быть значением флажка',
|
||
resizeSize: 'Ширина и/или высота должны быть положительными',
|
||
cropSize: 'Ширина и высота области обрезки должны быть положительными',
|
||
sizePositive: 'Размеры должны быть положительными и конечными'
|
||
},
|
||
tools: {
|
||
'jpg-to-png': {
|
||
title: 'Конвертировать JPG в PNG',
|
||
description: 'Открывает JPEG и сохраняет его как PNG без потерь. Прозрачность, если была, сохраняется.'
|
||
},
|
||
'webp-to-png': {
|
||
title: 'Конвертировать WebP в PNG',
|
||
description: 'Перекодирует WebP-изображение в универсальный PNG.'
|
||
},
|
||
'gif-to-png': {
|
||
title: 'Конвертировать GIF в PNG',
|
||
description: 'Достаёт первый кадр GIF-анимации и сохраняет его как PNG.'
|
||
},
|
||
'bmp-to-png': {
|
||
title: 'Конвертировать BMP в PNG',
|
||
description: 'Перекодирует BMP в компактный PNG без потерь.'
|
||
},
|
||
'ico-to-png': {
|
||
title: 'Конвертировать ICO в PNG',
|
||
description: 'Превращает иконку .ico в обычный PNG нужного размера.'
|
||
},
|
||
'png-to-bmp': {
|
||
title: 'Конвертировать PNG в BMP',
|
||
description: 'Сохраняет изображение в 24-битный BMP без альфа-канала: прозрачность заменяется чёрным фоном.'
|
||
},
|
||
'png-to-base64': {
|
||
title: 'PNG в Base64',
|
||
description: 'Кодирует изображение в base64-строку для вставки в код или стили.'
|
||
},
|
||
'base64-to-png': {
|
||
title: 'Base64 в PNG',
|
||
description: 'Декодирует base64-строку или data-uri обратно в картинку. Вставьте строку слева.'
|
||
},
|
||
'png-to-data-uri': {
|
||
title: 'PNG в Data URI',
|
||
description: 'Строит полный data-uri (data:image/png;base64,…) для встраивания в HTML/CSS.'
|
||
},
|
||
'data-uri-to-png': {
|
||
title: 'Data URI в PNG',
|
||
description: 'Декодирует data:image/…;base64,… обратно в файл картинки.'
|
||
},
|
||
'png-to-hex': {
|
||
title: 'PNG в HEX-пиксели',
|
||
description: 'Показывает все пиксели как hex-значения rrggbbaa — по строкам, через пробел.'
|
||
},
|
||
'hex-to-png': {
|
||
title: 'HEX-пиксели в PNG',
|
||
description: 'Собирает картинку из hex-значений rrggbbaa (через пробел). Укажите ширину — высота рассчитается сама.',
|
||
params: { width: 'Ширина изображения' }
|
||
},
|
||
'resize-png': {
|
||
title: 'Изменить размер PNG',
|
||
description: 'Масштабирование изображения с билинейной интерполяцией. При сохранении пропорций одна сторона задаёт масштаб, а если указаны обе — изображение вписывается в эти размеры.',
|
||
params: { width: 'Ширина (0 — авто)', height: 'Высота (0 — авто)', keepAspect: 'Сохранять пропорции' }
|
||
},
|
||
'crop-png': {
|
||
title: 'Обрезать PNG',
|
||
description: 'Вырезает прямоугольную область. Координаты и размеры выходят за границы изображения — область усекается до пересечения с картинкой.',
|
||
params: { x: 'X (слева)', y: 'Y (сверху)', width: 'Ширина области', height: 'Высота области' }
|
||
},
|
||
'rotate-png': {
|
||
title: 'Повернуть PNG',
|
||
description: 'Поворот на 90°, 180° или 270° по часовой стрелке без потери качества.',
|
||
params: { angle: 'Угол поворота' },
|
||
options: { angle: { '90': '90° по часовой', '180': '180°', '270': '270° по часовой' } }
|
||
},
|
||
'flip-png': {
|
||
title: 'Отразить PNG',
|
||
description: 'Зеркальное отражение по горизонтали или вертикали без потери качества.',
|
||
params: { axis: 'Ось отражения' },
|
||
options: {
|
||
axis: {
|
||
horizontal: 'По горизонтали (слева направо)',
|
||
vertical: 'По вертикали (сверху вниз)'
|
||
}
|
||
}
|
||
},
|
||
'add-padding-png': {
|
||
title: 'Добавить поля PNG',
|
||
description: 'Расширяет холст во все стороны на выбранное число пикселей.',
|
||
params: { padding: 'Поля, px', transparent: 'Прозрачные поля', color: 'Цвет полей' }
|
||
},
|
||
'add-border-png': {
|
||
title: 'Добавить рамку PNG',
|
||
description: 'Рисует цветную рамку вокруг изображения выбранной толщины.',
|
||
params: { thickness: 'Толщина рамки, px', color: 'Цвет рамки' }
|
||
},
|
||
'fit-on-background-png': {
|
||
title: 'Вписать PNG на фон',
|
||
description: 'Помещает изображение по центру полотна заданного размера с прозрачным или цветным фоном.',
|
||
params: {
|
||
width: 'Ширина полотна',
|
||
height: 'Высота полотна',
|
||
transparent: 'Прозрачный фон',
|
||
color: 'Цвет фона'
|
||
}
|
||
},
|
||
'tile-png': {
|
||
title: 'Замостить PNG',
|
||
description: 'Повторяет изображение сеткой из выбранного числа столбцов и строк.',
|
||
params: { columns: 'Столбцов', rows: 'Строк' }
|
||
},
|
||
'center-by-alpha-png': {
|
||
title: 'Центрировать PNG по содержимому',
|
||
description: 'Находит непрозрачную часть изображения и размещает её по центру прежнего холста.'
|
||
},
|
||
'blur-png': {
|
||
title: 'Размытие PNG',
|
||
description: 'Гауссово размытие: три прохода разделяемого бокса — быстро при любом радиусе. Прозрачные края не темнеют.',
|
||
params: { radius: 'Радиус, px' }
|
||
},
|
||
'sharpen-png': {
|
||
title: 'Резкость PNG',
|
||
description: 'Подчёркивает края ядром резкости; сила задаёт смесь с оригиналом. 0% — без изменений.',
|
||
params: { strength: 'Сила, %' }
|
||
},
|
||
'grayscale-png': {
|
||
title: 'Чёрно-белый PNG',
|
||
description: 'Переводит изображение в оттенки серого по яркостной формуле BT.601. Альфа сохраняется.'
|
||
},
|
||
'invert-colors-png': {
|
||
title: 'Инвертировать цвета PNG',
|
||
description: 'Обращает каждый цветовой канал (255 − значение). Альфа не меняется.'
|
||
},
|
||
'adjust-brightness-contrast-png': {
|
||
title: 'Яркость и контраст PNG',
|
||
description: 'Изменяет яркость и контраст в диапазоне от −100 до +100. Значение 0 — без изменений.',
|
||
params: { brightness: 'Яркость', contrast: 'Контраст' }
|
||
},
|
||
'change-png-opacity': {
|
||
title: 'Изменить прозрачность PNG',
|
||
description: 'Умножает альфа-канал на процент: 0% — полностью прозрачный, 100% — без изменений.',
|
||
params: { percent: 'Прозрачность, %' }
|
||
},
|
||
'sepia-png': {
|
||
title: 'Эффект сепии',
|
||
description: 'Тонирует изображение в тёплые коричневые тона классической сепии.'
|
||
},
|
||
'change-png-hue': {
|
||
title: 'Сменить оттенок PNG',
|
||
description: 'Сдвиг цветового тона по кругу. Насыщенность и яркость сохраняются.',
|
||
params: { degrees: 'Сдвиг тона, °' }
|
||
},
|
||
'extract-channel-png': {
|
||
title: 'Извлечь канал PNG',
|
||
description: 'Оставляет выбранный канал — красный, зелёный или синий — в оттенках серого.',
|
||
params: { channel: 'Канал' },
|
||
options: { channel: { red: 'Красный', green: 'Зелёный', blue: 'Синий' } }
|
||
},
|
||
'swap-channels-png': {
|
||
title: 'Переставить каналы PNG',
|
||
description: 'Меняет местами два цветовых канала — быстрый способ получить необычный окрас.',
|
||
params: { pair: 'Пара каналов' },
|
||
options: {
|
||
pair: { 'r-g': 'Красный ↔ Зелёный', 'r-b': 'Красный ↔ Синий', 'g-b': 'Зелёный ↔ Синий' }
|
||
}
|
||
},
|
||
'black-and-white-png': {
|
||
title: 'Чёрно-белый PNG по порогу',
|
||
description: 'Жёсткая бинаризация по яркости: каждый пиксель становится чёрным или белым.',
|
||
params: { threshold: 'Порог яркости, %' }
|
||
},
|
||
'posterize-png': {
|
||
title: 'Постеризация PNG',
|
||
description: 'Уменьшает число уровней каждого канала — плакатный эффект.',
|
||
params: { levels: 'Уровней на канал' }
|
||
},
|
||
'two-colors-png': {
|
||
title: 'Два цвета PNG',
|
||
description: 'Перекрашивает изображение в два выбранных цвета по порогу яркости.',
|
||
params: {
|
||
lightColor: 'Цвет светлых участков',
|
||
darkColor: 'Цвет тёмных участков',
|
||
threshold: 'Порог яркости, %'
|
||
}
|
||
},
|
||
'convert-png-to-jpg': {
|
||
title: 'Конвертировать PNG в JPG',
|
||
description: 'Прозрачность накладывается на выбранный цвет подложки (по умолчанию белый), результат сохраняется в JPEG.',
|
||
params: { background: 'Цвет подложки', quality: 'Качество JPEG' }
|
||
},
|
||
'convert-png-to-webp': {
|
||
title: 'Конвертировать PNG в WebP',
|
||
description: 'Перекодирует изображение в WebP с настраиваемым качеством. Прозрачность сохраняется.',
|
||
params: { quality: 'Качество WebP' }
|
||
},
|
||
'remove-alpha-channel-png': {
|
||
title: 'Убрать альфа-канал PNG',
|
||
description: 'Накладывает изображение на белый фон и сохраняет без прозрачности.'
|
||
},
|
||
'set-alpha-channel-png': {
|
||
title: 'Задать альфа-канал PNG',
|
||
description: 'Присваивает всем пикселям одинаковую прозрачность, цвета не меняются.',
|
||
params: { percent: 'Прозрачность, %' }
|
||
},
|
||
'extract-alpha-mask-png': {
|
||
title: 'Извлечь маску альфы PNG',
|
||
description: 'Превращает прозрачность в чёрно-белую непрозрачную маску.'
|
||
},
|
||
'round-corners-png': {
|
||
title: 'Скруглить углы PNG',
|
||
description: 'Обрезает углы по радиусу, заданному в процентах от половины меньшей стороны.',
|
||
params: { radius: 'Радиус скругления, %' }
|
||
},
|
||
'invert-alpha-png': {
|
||
title: 'Инвертировать альфа-канал PNG',
|
||
description: 'Непрозрачные области становятся прозрачными и наоборот.'
|
||
},
|
||
'remove-background-png': {
|
||
title: 'Удалить фон PNG (умно)',
|
||
description: 'Убирает однотонный фон: по цвету с допуском, только внешние области от краёв или весь совпадающий цвет. Умеет сглаживать границу.',
|
||
params: {
|
||
color: 'Цвет фона',
|
||
tolerance: 'Допуск похожести, %',
|
||
outerOnly: 'Только внешние области',
|
||
smooth: 'Сглаживание границы, проходы'
|
||
}
|
||
},
|
||
'add-stroke-png': {
|
||
title: 'Обвести PNG',
|
||
description: 'Добавляет цветную обводку-кольцо вокруг непрозрачного содержимого заданной толщины.',
|
||
params: { color: 'Цвет обводки', thickness: 'Толщина, px' }
|
||
},
|
||
'find-contour-png': {
|
||
title: 'Найти контур PNG',
|
||
description: 'Оставляет только линию по границе непрозрачных областей выбранного цвета и толщины.',
|
||
params: { color: 'Цвет линии', thickness: 'Толщина линии, px' }
|
||
},
|
||
'make-thicker-png': {
|
||
title: 'Утолщить PNG',
|
||
description: 'Расширяет непрозрачные области на заданное число пикселей.',
|
||
params: { radius: 'На сколько px' }
|
||
},
|
||
'make-thinner-png': {
|
||
title: 'Утончить PNG',
|
||
description: 'Сужает непрозрачные области — утоньшает штрихи надписей и деталей.',
|
||
params: { radius: 'На сколько px' }
|
||
},
|
||
'harden-alpha-png': {
|
||
title: 'Жёсткие края PNG',
|
||
description: 'Бинаризует альфа-канал по порогу: полупрозрачные пиксели становятся либо полностью прозрачными, либо непрозрачными.',
|
||
params: { threshold: 'Порог альфы, %' }
|
||
},
|
||
'despeckle-alpha-png': {
|
||
title: 'Убрать мусор PNG',
|
||
description: 'Открытие: убирает одиночные полупрозрачные пиксели и мелкие крапинки.',
|
||
params: { radius: 'Радиус очистки, px' }
|
||
},
|
||
'close-holes-png': {
|
||
title: 'Закрыть дыры PNG',
|
||
description: 'Закрытие: заполняет одиночные прозрачные точки внутри объекта.',
|
||
params: { radius: 'Радиус закрытия, px' }
|
||
},
|
||
'remove-color-from-png': {
|
||
title: 'Удалить цвет из PNG (прозрачность)',
|
||
description: 'Делает прозрачными все пиксели, близкие к выбранному цвету. Порог задаёт допустимое отклонение в процентах от максимального цветового расстояния.',
|
||
params: { targetColor: 'Цвет для удаления', tolerance: 'Порог похожести, %' }
|
||
},
|
||
'png-info': {
|
||
title: 'Информация о PNG',
|
||
description: 'Показывает размеры, наличие альфа-канала и количество уникальных цветов загруженного изображения.'
|
||
},
|
||
'create-empty-png': {
|
||
title: 'Создать пустой PNG',
|
||
description: 'Генерирует холст выбранного размера — прозрачный или залитый цветом.',
|
||
params: { width: 'Ширина', height: 'Высота', transparent: 'Прозрачный', color: 'Цвет' }
|
||
},
|
||
'single-color-png': {
|
||
title: 'Создать одноцветный PNG',
|
||
description: 'Генерирует прямоугольник заданного размера и цвета.',
|
||
params: { width: 'Ширина', height: 'Высота', color: 'Цвет' }
|
||
},
|
||
'random-noise-png': {
|
||
title: 'Создать случайный шум PNG',
|
||
description: 'Генерирует картинку со случайными пикселями. Зерно фиксирует результат: одно зерно — одна картинка.',
|
||
params: { width: 'Ширина', height: 'Высота', seed: 'Зерно' }
|
||
},
|
||
'linear-gradient-png': {
|
||
title: 'Создать градиент PNG',
|
||
description: 'Генерирует плавный переход между двумя цветами по горизонтали или вертикали.',
|
||
params: {
|
||
width: 'Ширина',
|
||
height: 'Высота',
|
||
fromColor: 'Цвет начала',
|
||
toColor: 'Цвет конца',
|
||
direction: 'Направление'
|
||
},
|
||
options: { direction: { horizontal: 'По горизонтали', vertical: 'По вертикали' } }
|
||
},
|
||
'color-wheel-png': {
|
||
title: 'Цветовой круг PNG',
|
||
description:
|
||
'Круг HSL: оттенок по окружности, насыщенность от центра к краю, выбранная светлота.',
|
||
params: { width: 'Размер', lightness: 'Светлота, %' }
|
||
},
|
||
'complementary-png': {
|
||
title: 'Комплементарная палитра PNG',
|
||
description: 'Два противоположных цвета круга — базовый и его дополнение.',
|
||
params: {
|
||
baseColor: 'Базовый цвет',
|
||
width: 'Ширина',
|
||
layout: 'Раскладка'
|
||
},
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'triadic-png': {
|
||
title: 'Триадная палитра PNG',
|
||
description: 'Три цвета через 120° друг от друга на цветовом круге.',
|
||
params: { baseColor: 'Базовый цвет', width: 'Ширина', layout: 'Раскладка' },
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'tetradic-png': {
|
||
title: 'Тетрадная палитра PNG',
|
||
description: 'Четыре цвета — две комплементарные пары, шаг 90° по кругу.',
|
||
params: { baseColor: 'Базовый цвет', width: 'Ширина', layout: 'Раскладка' },
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'analogous-png': {
|
||
title: 'Аналоговая палитра PNG',
|
||
description: 'Соседние оттенки вокруг базового — спокойная родственная гамма.',
|
||
params: {
|
||
baseColor: 'Базовый цвет',
|
||
width: 'Ширина',
|
||
layout: 'Раскладка',
|
||
spread: 'Разброс оттенка, °',
|
||
count: 'Сколько цветов'
|
||
},
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'monochromatic-png': {
|
||
title: 'Монохромная палитра PNG',
|
||
description:
|
||
'Тоны одного оттенка: меняется светлота в выбранном диапазоне, тон и насыщенность фиксированы.',
|
||
params: {
|
||
baseColor: 'Базовый цвет',
|
||
width: 'Ширина',
|
||
layout: 'Раскладка',
|
||
count: 'Сколько цветов',
|
||
range: 'Диапазон светлоты, %'
|
||
},
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'shades-png': {
|
||
title: 'Градация оттенка PNG',
|
||
description: 'Ступени базового цвета от исходного к более тёмному.',
|
||
params: {
|
||
baseColor: 'Базовый цвет',
|
||
width: 'Ширина',
|
||
layout: 'Раскладка',
|
||
count: 'Сколько цветов',
|
||
depth: 'Глубина затемнения, %'
|
||
},
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'mix-colors-png': {
|
||
title: 'Смешать цвета PNG',
|
||
description:
|
||
'Усредняет несколько hex-цветов в один свотч. Введите значения через запятую; неверные токены пропускаются.',
|
||
params: { colors: 'Цвета (hex через запятую)', width: 'Ширина' }
|
||
},
|
||
'blend-two-png': {
|
||
title: 'Перелив двух цветов PNG',
|
||
description: 'Непрерывный горизонтальный градиент между двумя цветами.',
|
||
params: { colorA: 'Цвет A', colorB: 'Цвет B', width: 'Ширина' }
|
||
},
|
||
'step-colors-png': {
|
||
title: 'Ступени между цветами PNG',
|
||
description: 'Дискретный набор равномерно распределённых ступеней между двумя цветами.',
|
||
params: {
|
||
colorA: 'Цвет A',
|
||
colorB: 'Цвет B',
|
||
steps: 'Сколько ступеней',
|
||
width: 'Ширина',
|
||
layout: 'Раскладка'
|
||
},
|
||
options: { layout: { grid: 'Сетка', strip: 'Полоса' } }
|
||
},
|
||
'sort-colors-png': {
|
||
title: 'Отсортировать цвета PNG',
|
||
description:
|
||
'Рисует ваш hex-список свотчами, отсортированными по тону, яркости или насыщенности. Неверные токены пропускаются.',
|
||
params: {
|
||
colors: 'Цвета (hex через запятую)',
|
||
order: 'Сортировка',
|
||
width: 'Ширина',
|
||
layout: 'Раскладка'
|
||
},
|
||
options: {
|
||
order: { hue: 'Оттенок', luma: 'Яркость', sat: 'Насыщенность' },
|
||
layout: { grid: 'Сетка', strip: 'Полоса' }
|
||
}
|
||
},
|
||
'png-is-grayscale': {
|
||
title: 'Проверить: PNG монохромный?',
|
||
description: 'Сообщает, состоит ли изображение только из оттенков серого.',
|
||
results: {
|
||
grayscaleYes: 'Да — все пиксели являются оттенками серого.',
|
||
grayscaleNo: 'Нет — найдены цветные пиксели.'
|
||
}
|
||
},
|
||
'png-to-hsl': {
|
||
title: 'Разложить PNG в HSL',
|
||
description: 'Раскладывает изображение на компоненты Тон, Насыщенность и Светлота.',
|
||
params: { component: 'Компонент', display: 'Режим показа' },
|
||
options: {
|
||
component: { h: 'Тон (H)', s: 'Насыщенность (S)', l: 'Светлота (L)' },
|
||
display: { gray: 'Градациями серого', color: 'Пространство как RGB' }
|
||
}
|
||
},
|
||
'png-to-hsv': {
|
||
title: 'Разложить PNG в HSV',
|
||
description: 'Раскладывает изображение на Тон, Насыщенность и Яркость (Value).',
|
||
params: { component: 'Компонент', display: 'Режим показа' },
|
||
options: {
|
||
component: { h: 'Тон (H)', s: 'Насыщенность (S)', v: 'Яркость (V)' },
|
||
display: { gray: 'Градациями серого', color: 'Пространство как RGB' }
|
||
}
|
||
},
|
||
'png-to-hsi': {
|
||
title: 'Разложить PNG в HSI',
|
||
description: 'Раскладывает изображение на Тон, Насыщенность и Интенсивность.',
|
||
params: { component: 'Компонент', display: 'Режим показа' },
|
||
options: {
|
||
component: { h: 'Тон (H)', s: 'Насыщенность (S)', i: 'Интенсивность (I)' },
|
||
display: { gray: 'Градациями серого', color: 'Пространство как RGB' }
|
||
}
|
||
},
|
||
'png-to-cmyk': {
|
||
title: 'PNG в CMYK-цвета',
|
||
description:
|
||
'Раскладывает изображение на печатные компоненты: Голубой, Пурпурный, Жёлтый и Чёрный (Key).',
|
||
params: { component: 'Компонент', display: 'Режим показа' },
|
||
options: {
|
||
component: {
|
||
c: 'Голубой (C)',
|
||
m: 'Пурпурный (M)',
|
||
y: 'Жёлтый (Y)',
|
||
k: 'Чёрный (K)'
|
||
},
|
||
display: { gray: 'Градациями серого', color: 'Пространство как RGB' }
|
||
}
|
||
},
|
||
'png-to-ycbcr': {
|
||
title: 'PNG в YCbCr-цвета',
|
||
description:
|
||
'Раскладывает изображение на Яркость (Y) и цветоразностные компоненты Cb / Cr.',
|
||
params: { component: 'Компонент', display: 'Режим показа' },
|
||
options: {
|
||
component: { y: 'Яркость (Y)', cb: 'Синий-разностный (Cb)', cr: 'Красный-разностный (Cr)' },
|
||
display: { gray: 'Градациями серого', color: 'Пространство как RGB' }
|
||
}
|
||
},
|
||
'png-to-lab': {
|
||
title: 'PNG в LAB-цвета',
|
||
description:
|
||
'Раскладывает изображение на perceptual-компоненты: Светлость, зелёный–пурпурный и синий–жёлтый.',
|
||
params: { component: 'Компонент', display: 'Режим показа' },
|
||
options: {
|
||
component: {
|
||
l: 'Светлость (L)',
|
||
a: 'Зелёный–пурпурный (a)',
|
||
b: 'Синий–жёлтый (b)'
|
||
},
|
||
display: { gray: 'Градациями серого', color: 'Пространство как RGB' }
|
||
}
|
||
},
|
||
'circle-mask-png': {
|
||
title: 'Круглая маска PNG',
|
||
description:
|
||
'Вырезает из изображения круг. Диаметр задаётся в процентах от меньшей стороны.',
|
||
params: {
|
||
size: 'Диаметр, % меньшей стороны',
|
||
offsetX: 'Смещение X, %',
|
||
offsetY: 'Смещение Y, %'
|
||
}
|
||
},
|
||
'square-mask-png': {
|
||
title: 'Прямоугольная маска PNG',
|
||
description:
|
||
'Вырезает прямоугольник со сторонами в процентах от меньшей стороны изображения.',
|
||
params: {
|
||
widthPct: 'Ширина, % меньшей стороны',
|
||
heightPct: 'Высота, % меньшей стороны',
|
||
offsetX: 'Смещение X, %',
|
||
offsetY: 'Смещение Y, %'
|
||
}
|
||
},
|
||
'star-mask-png': {
|
||
title: 'Маска-звезда PNG',
|
||
description:
|
||
'Вырезает звезду с настраиваемым числом лучей, глубиной впадин и поворотом.',
|
||
params: {
|
||
points: 'Лучи',
|
||
innerRadius: 'Радиус впадин, %',
|
||
size: 'Внешний радиус, % меньшей стороны',
|
||
rotation: 'Поворот, °',
|
||
offsetX: 'Смещение X, %',
|
||
offsetY: 'Смещение Y, %'
|
||
}
|
||
},
|
||
'wavy-mask-png': {
|
||
title: 'Волнистая маска PNG',
|
||
description:
|
||
'Вырезает круг с волнистым краем: радиус модулируется синусом с заданной амплитудой и частотой.',
|
||
params: {
|
||
size: 'Базовый радиус, % меньшей стороны',
|
||
amplitude: 'Амплитуда волн, %',
|
||
waves: 'Количество волн',
|
||
phase: 'Фаза, °',
|
||
offsetX: 'Смещение X, %',
|
||
offsetY: 'Смещение Y, %'
|
||
}
|
||
},
|
||
'trim-empty-space-png': {
|
||
title: 'Обрезать пустые поля PNG',
|
||
description:
|
||
'Обрезает прозрачные рамки вокруг содержимого. Пиксели с альфой выше порога считаются содержимым.',
|
||
params: { threshold: 'Порог альфы' }
|
||
},
|
||
'change-canvas-size-png': {
|
||
title: 'Изменить размер холста PNG',
|
||
description:
|
||
'Задаёт точный размер холста: лишнее обрезается, недостающее дополняется прозрачностью. Якорь выбирает, какая часть изображения остаётся.',
|
||
params: { width: 'Ширина', height: 'Высота', anchor: 'Якорь' },
|
||
options: {
|
||
anchor: {
|
||
'top-left': 'Сверху слева',
|
||
'top-center': 'Сверху по центру',
|
||
'top-right': 'Сверху справа',
|
||
'middle-left': 'По центру слева',
|
||
center: 'По центру',
|
||
'middle-right': 'По центру справа',
|
||
'bottom-left': 'Снизу слева',
|
||
'bottom-center': 'Снизу по центру',
|
||
'bottom-right': 'Снизу справа'
|
||
}
|
||
}
|
||
},
|
||
'change-aspect-ratio-png': {
|
||
title: 'Изменить соотношение сторон PNG',
|
||
description:
|
||
'Вписывает изображение в целевое соотношение сторон: обрезать центр до заполнения или дополнить прозрачностью.',
|
||
params: { ratio: 'Целевое отношение', mode: 'Режим' },
|
||
options: {
|
||
ratio: {
|
||
'1:1': '1:1',
|
||
'4:3': '4:3',
|
||
'3:4': '3:4',
|
||
'3:2': '3:2',
|
||
'2:3': '2:3',
|
||
'16:9': '16:9',
|
||
'9:16': '9:16'
|
||
},
|
||
mode: { crop: 'Обрезать до заполнения', pad: 'Дополнить до вписывания' }
|
||
}
|
||
},
|
||
'swap-orientation-png': {
|
||
title: 'Поменять ориентацию PNG',
|
||
description:
|
||
'Поворачивает изображение на 90°, если ориентация отличается от целевой — ландшафт становится портретом и наоборот. Квадрат не трогается.',
|
||
params: { target: 'Целевая ориентация' },
|
||
options: { target: { portrait: 'Портрет', landscape: 'Ландшафт' } }
|
||
},
|
||
'symmetric-copy-png': {
|
||
title: 'Симметричная копия PNG',
|
||
description:
|
||
'Удваивает холст, зеркалируя сохранённую половину на пустую — мгновенный симметричный узор.',
|
||
params: { axis: 'Линия зеркала', keepSide: 'Какая сторона остаётся' },
|
||
options: {
|
||
axis: {
|
||
vertical: 'Вертикальная (ширина ×2)',
|
||
horizontal: 'Горизонтальная (высота ×2)'
|
||
},
|
||
keepSide: { left: 'Левая', right: 'Правая', top: 'Верхняя', bottom: 'Нижняя' }
|
||
}
|
||
},
|
||
'show-transparent-png': {
|
||
title: 'Показать прозрачные области PNG',
|
||
description:
|
||
'Подсвечивает выбранным цветом каждый прозрачный или полупрозрачный пиксель — дыры становятся заметными.',
|
||
params: {
|
||
mode: 'Режим маски',
|
||
color: 'Цвет подсветки',
|
||
opacity: 'Непрозрачность подсветки, %'
|
||
},
|
||
options: {
|
||
mode: { binary: 'Чёрно-белая маска', highlight: 'Цветная подсветка' }
|
||
}
|
||
},
|
||
'show-grayscale-pixels-png': {
|
||
title: 'Показать серые пиксели PNG',
|
||
description:
|
||
'Находит пиксели с почти равными каналами и рисует их маску. Допуск — в единицах канала.',
|
||
params: { tolerance: 'Допуск по каналам', mode: 'Режим маски', color: 'Цвет подсветки', opacity: 'Непрозрачность подсветки, %' },
|
||
options: {
|
||
mode: { binary: 'Чёрно-белая маска', highlight: 'Цветная подсветка' }
|
||
}
|
||
},
|
||
'show-color-pixels-png': {
|
||
title: 'Показать цветные пиксели PNG',
|
||
description: 'Находит цветные (не серые) пиксели за пределами допуска и рисует их маску.',
|
||
params: { tolerance: 'Допуск по каналам', mode: 'Режим маски', color: 'Цвет подсветки', opacity: 'Непрозрачность подсветки, %' },
|
||
options: {
|
||
mode: { binary: 'Чёрно-белая маска', highlight: 'Цветная подсветка' }
|
||
}
|
||
},
|
||
'light-pixel-mask-png': {
|
||
title: 'Маска светлых пикселей PNG',
|
||
description: 'Выбирает пиксели ярче порога яркости.',
|
||
params: { threshold: 'Порог яркости, %', mode: 'Режим маски', color: 'Цвет подсветки', opacity: 'Непрозрачность подсветки, %' },
|
||
options: {
|
||
mode: { binary: 'Чёрно-белая маска', highlight: 'Цветная подсветка' }
|
||
}
|
||
},
|
||
'dark-pixel-mask-png': {
|
||
title: 'Маска тёмных пикселей PNG',
|
||
description: 'Выбирает пиксели темнее порога яркости.',
|
||
params: { threshold: 'Порог яркости, %', mode: 'Режим маски', color: 'Цвет подсветки', opacity: 'Непрозрачность подсветки, %' },
|
||
options: {
|
||
mode: { binary: 'Чёрно-белая маска', highlight: 'Цветная подсветка' }
|
||
}
|
||
},
|
||
'unique-color-mask-png': {
|
||
title: 'Маска уникальных цветов PNG',
|
||
description:
|
||
'Выбирает цвета, которые встречаются не чаще заданного числа раз, — редкие и одиночные пиксели.',
|
||
params: { rarity: 'Максимум повторов', mode: 'Режим маски', color: 'Цвет подсветки', opacity: 'Непрозрачность подсветки, %' },
|
||
options: {
|
||
mode: { binary: 'Чёрно-белая маска', highlight: 'Цветная подсветка' }
|
||
}
|
||
},
|
||
'extract-color-from-png': {
|
||
title: 'Извлечь цвет из PNG',
|
||
description:
|
||
'Оставляет только пиксели, близкие к выбранному цвету, остальное делает прозрачным — обратное «Удалить цвет».',
|
||
params: { color: 'Какой цвет оставить', tolerance: 'Допуск похожести, %' }
|
||
},
|
||
'watermark-tile-png': {
|
||
title: 'Плитка-водяной знак PNG',
|
||
description:
|
||
'Покрывает изображение повторяющейся диагональной полупрозрачной плиткой текста — защитный водяной знак.',
|
||
params: {
|
||
text: 'Текст',
|
||
fontSize: 'Размер шрифта, px',
|
||
color: 'Цвет текста',
|
||
opacity: 'Непрозрачность, %',
|
||
angle: 'Угол, °',
|
||
stepX: 'Шаг X, px',
|
||
stepY: 'Шаг Y, px',
|
||
font: 'Шрифт',
|
||
bold: 'Жирный'
|
||
},
|
||
options: {
|
||
font: { sans: 'Без засечек', serif: 'С засечками', mono: 'Моноширинный' }
|
||
}
|
||
},
|
||
'watermark-image-png': {
|
||
title: 'Знак картинкой PNG',
|
||
description:
|
||
'Накладывает другой PNG (логотип, подпись): масштаб от ширины холста, прозрачность, позиция 3×3. Знак живёт, пока открыта страница, — после восстановления цепочки выберите его заново.',
|
||
params: {
|
||
scale: 'Ширина знака, % от холста',
|
||
opacity: 'Непрозрачность, %',
|
||
position: 'Позиция',
|
||
margin: 'Отступ, px'
|
||
},
|
||
options: {
|
||
position: {
|
||
'top-left': 'Сверху слева',
|
||
'top-center': 'Сверху по центру',
|
||
'top-right': 'Сверху справа',
|
||
'middle-left': 'По центру слева',
|
||
center: 'По центру',
|
||
'middle-right': 'По центру справа',
|
||
'bottom-left': 'Снизу слева',
|
||
'bottom-center': 'Снизу по центру',
|
||
'bottom-right': 'Снизу справа'
|
||
}
|
||
}
|
||
},
|
||
'add-text-png': {
|
||
title: 'Надпись на PNG', description:
|
||
'Рисует текст на изображении: шрифт, размер, цвет, жирность, позиция на сетке 3×3 и опциональная подложка.',
|
||
params: {
|
||
text: 'Текст',
|
||
fontSize: 'Размер шрифта, px',
|
||
color: 'Цвет текста',
|
||
font: 'Шрифт',
|
||
bold: 'Жирный',
|
||
position: 'Позиция',
|
||
margin: 'Отступ, px',
|
||
plate: 'Подложка',
|
||
plateColor: 'Цвет подложки',
|
||
plateOpacity: 'Прозрачность плашки, %'
|
||
},
|
||
options: {
|
||
font: { sans: 'Без засечек', serif: 'С засечками', mono: 'Моноширинный' },
|
||
position: {
|
||
'top-left': 'Сверху слева',
|
||
'top-center': 'Сверху по центру',
|
||
'top-right': 'Сверху справа',
|
||
'middle-left': 'По центру слева',
|
||
center: 'По центру',
|
||
'middle-right': 'По центру справа',
|
||
'bottom-left': 'Снизу слева',
|
||
'bottom-center': 'Снизу по центру',
|
||
'bottom-right': 'Снизу справа'
|
||
}
|
||
}
|
||
},
|
||
'date-stamp-png': {
|
||
title: 'Дата-штамп PNG',
|
||
description:
|
||
'Ставит текущую дату и время по строке формата (токены YYYY MM DD hh mm ss). Оформление — как у надписи.',
|
||
params: {
|
||
format: 'Формат',
|
||
fontSize: 'Размер шрифта, px',
|
||
color: 'Цвет текста',
|
||
font: 'Шрифт',
|
||
bold: 'Жирный',
|
||
position: 'Позиция',
|
||
margin: 'Отступ, px',
|
||
plate: 'Подложка',
|
||
plateColor: 'Цвет подложки',
|
||
plateOpacity: 'Прозрачность плашки, %'
|
||
},
|
||
options: {
|
||
font: { sans: 'Без засечек', serif: 'С засечками', mono: 'Моноширинный' },
|
||
position: {
|
||
'top-left': 'Сверху слева',
|
||
'top-center': 'Сверху по центру',
|
||
'top-right': 'Сверху справа',
|
||
'middle-left': 'По центру слева',
|
||
center: 'По центру',
|
||
'middle-right': 'По центру справа',
|
||
'bottom-left': 'Снизу слева',
|
||
'bottom-center': 'Снизу по центру',
|
||
'bottom-right': 'Снизу справа'
|
||
}
|
||
}
|
||
},
|
||
'skew-png': {
|
||
title: 'Наклонить PNG',
|
||
description: 'Сдвигает содержимое по горизонтали и вертикали — эффект перспективы.',
|
||
params: { degX: 'Наклон по X, °', degY: 'Наклон по Y, °' }
|
||
},
|
||
'rotate-free-png': {
|
||
title: 'Повернуть на произвольный угол',
|
||
description: 'Поворот на любой угол. Холст расширяется под новые габариты, углы остаются прозрачными.',
|
||
params: { angle: 'Угол, °' }
|
||
},
|
||
'zoom-png': {
|
||
title: 'Приблизить PNG',
|
||
description: 'Увеличивает содержимое к центру. Холст прежнего размера — края обрезаются.',
|
||
params: { scale: 'Масштаб, %' }
|
||
},
|
||
'shift-png': {
|
||
title: 'Сдвинуть PNG',
|
||
description: 'Перемещает содержимое на заданное смещение по X и Y.',
|
||
params: { offsetX: 'Смещение X, px', offsetY: 'Смещение Y, px', color: 'Цвет фона' }
|
||
},
|
||
'vignette-png': {
|
||
title: 'Виньетка PNG',
|
||
description: 'Плавно затемняет края изображения, центр не затрагивает.',
|
||
params: { strength: 'Сила затемнения, %' }
|
||
},
|
||
'jpeg-artifacts-png': {
|
||
title: 'Артефакты JPEG',
|
||
description: 'Имитирует пережатие в JPEG с низким качеством — видимые квадраты и размытие цветов.',
|
||
params: { quality: 'Качество JPEG' }
|
||
},
|
||
'gamma-png': {
|
||
title: 'Гамма-коррекция PNG',
|
||
description: 'Корректирует яркость средних тонов. <1 темнее, >1 светлее, 1 — без изменений.',
|
||
params: { value: 'Гамма' }
|
||
},
|
||
'auto-contrast-png': {
|
||
title: 'Автоконтраст PNG',
|
||
description: 'Растягивает диапазон каждого канала на весь доступный диапазон яркости.'
|
||
},
|
||
'temperature-png': {
|
||
title: 'Температура PNG',
|
||
description: 'Положительные значения делают изображение теплее (оранжевее), отрицательные — холоднее (синеватее).',
|
||
params: { percent: 'Температура' }
|
||
},
|
||
'tint-png': {
|
||
title: 'Тонировать PNG',
|
||
description: 'Умножает цветовые каналы на выбранный оттенок с заданной силой.',
|
||
params: { color: 'Цвет тонирования', strength: 'Сила, %' }
|
||
},
|
||
'svg-to-png': {
|
||
title: 'SVG в PNG',
|
||
description: 'Декодирует SVG-разметку в растровое изображение. Вставьте SVG-код слева.',
|
||
params: { width: 'Ширина результата, px' }
|
||
},
|
||
'png-is-transparent': {
|
||
title: 'Проверить: PNG прозрачный?',
|
||
description: 'Сообщает, есть ли в изображении прозрачные или полупрозрачные пиксели.',
|
||
results: {
|
||
transparentYes: 'Да — есть прозрачные или полупрозрачные пиксели.',
|
||
transparentNo: 'Нет — все пиксели полностью непрозрачны.'
|
||
}
|
||
},
|
||
'png-orientation': {
|
||
title: 'Ориентация PNG',
|
||
description: 'Сообщает, портрет это, ландшафт или квадрат.',
|
||
results: {
|
||
orientationPortrait: 'Портрет — высота больше ширины.',
|
||
orientationLandscape: 'Ландшафт — ширина больше высоты.',
|
||
orientationSquare: 'Квадрат — стороны равны.'
|
||
}
|
||
}
|
||
}
|
||
};
|