Files
easy-png-tools2/web/src/lib/i18n/ru.ts
T
2026-09-12 14:49:07 +05:00

1352 lines
59 KiB
TypeScript
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.
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: "Этот инструмент не обрабатывает изображения",
sourceRequired: "Сначала загрузите изображение",
textRequired: "Сначала введите текст",
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: "Размеры должны быть положительными и конечными",
tooManyParts: "Слишком много частей ({count}). Ограничение — 1000.",
},
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: "Нижняя",
},
},
},
"feather-edges-png": {
title: "Растушевать края PNG",
description:
"Размывает только альфа-канал: жёсткие края выреза становятся мягкими, цвета не трогаются.",
params: { radius: "Радиус растушёвки, px" },
},
"clean-edges-png": {
title: "Почистить края PNG (defringe)",
description:
"Заменяет цветную кайму полупрозрачных пикселей цветом ближайшего полностью непрозрачного соседа. Альфа остаётся как была.",
params: { radius: "Радиус поиска, px" },
},
"pixelate-png": {
title: "Пикселизация PNG",
description:
"Усредняет каждый блок blockSize×blockSize в один цвет — классическая мозаика.",
params: { blockSize: "Размер блока, px" },
},
"randomize-pixels-png": {
title: "Перемешать пиксели PNG",
description:
"Переставляет блоки изображения между собой. Одинаковый seed даёт одинаковую раскладку.",
params: { blockSize: "Размер блока, px", seed: "Seed" },
},
"add-noise-png": {
title: "Добавить шум PNG",
description:
"Добавляет зерно в стиле плёнки. Детерминировано по seed; монохромный сохраняет баланс оттенков.",
params: { amount: "Сила, %", mode: "Тип шума", seed: "Seed" },
options: { mode: { mono: "Монохромное зерно", color: "Цветной шум" } },
},
"silhouette-png": {
title: "Силуэт PNG",
description:
"Заливает все видимые пиксели одним цветом, сохраняя их прозрачность — мгновенный силуэт.",
params: { color: "Цвет силуэта", threshold: "Порог видимости, %" },
},
"png-to-bytes": {
title: "PNG в байты",
description:
"Выводит каждый пиксель четырьмя десятичными байтами (R G B A), по строке изображения на строку текста.",
},
"bytes-to-png": {
title: "Байты в PNG",
description:
"Собирает изображение из десятичных RGBA-байтов (разделители любые). Укажите ширину — высота рассчитается сама.",
params: { width: "Ширина изображения" },
},
"png-to-rgb-values": {
title: "PNG в RGB-значения",
description:
"Выводит каждый пиксель как rgba(r, g, b, a), ряды через перевод строки.",
},
"rgb-values-to-png": {
title: "RGB-значения в PNG",
description:
"Собирает изображение из чисел rgba(r, g, b, a). Укажите ширину — высота рассчитается сама.",
params: { width: "Ширина изображения" },
},
"verify-is-png": {
title: "Проверить: это PNG?",
description:
"Проверяет сигнатуру вставленного base64 / data-uri и сообщает, настоящий ли это PNG.",
results: {
verifyYes: "Да — сигнатура настоящего PNG.",
verifyNo: "Нет — сигнатура не совпадает с PNG-файлом.",
},
},
"text-to-png": {
title: "Текст в PNG",
description:
"Создаёт PNG из текста: холст подгоняется под размер надписи с полями.",
params: {
text: "Текст",
fontSize: "Размер шрифта, px",
font: "Шрифт",
bold: "Жирный",
color: "Цвет текста",
transparentBg: "Прозрачный фон",
backgroundColor: "Цвет фона",
padding: "Отступ, px",
},
options: {
font: {
sans: "Без засечек",
serif: "С засечками",
mono: "Моноширинный",
},
},
},
"emoji-to-png": {
title: "Эмодзи в PNG",
description:
"Рисует эмодзи или любой Unicode-символ как прозрачный PNG выбранного размера.",
params: { emoji: "Эмодзи / символ", size: "Размер" },
},
"placeholder-png": {
title: "Заглушка PNG",
description:
"Генерирует прямоугольник-заглушку с напечатанными размерами в центре.",
params: {
width: "Ширина",
height: "Высота",
backgroundColor: "Фон",
color: "Цвет текста",
showText: "Печатать размеры",
},
},
"color-spectrum-png": {
title: "Спектр цветов PNG",
description:
"Полный радужный переход 0–360° вдоль выбранной оси с настройкой насыщенности и светлоты.",
params: {
width: "Ширина",
height: "Высота",
direction: "Направление",
saturation: "Насыщенность, %",
lightness: "Светлота, %",
},
options: {
direction: { horizontal: "По горизонтали", vertical: "По вертикали" },
},
},
"random-colors-png": {
title: "Случайные цветные блоки PNG",
description:
"Заполняет холст случайными яркими блоками. Детерминировано по seed.",
params: {
width: "Ширина",
height: "Высота",
blockSize: "Размер блока, px",
seed: "Seed",
},
},
"draw-grid-png": {
title: "Нарисовать сетку PNG",
description:
"Рисует сетку с заданными столбцами, строками и толщиной линий на прозрачном или белом фоне.",
params: {
width: "Ширина",
height: "Высота",
cols: "Столбцы",
rows: "Строки",
lineWidth: "Толщина линий, px",
color: "Цвет линий",
transparentBg: "Прозрачный фон",
},
},
"quantize-png": {
title: "Квантовать PNG",
description:
"Уменьшает изображение до k цветов через median-cut палитру. Прозрачные пиксели сохраняются.",
params: { colors: "Цветов (k)" },
},
"decrease-color-count-png": {
title: "Уменьшить число цветов PNG",
description:
"Тот же движок median-cut с фиксированными пресетами степеней двойки — быстрый спуск до 2–256 цветов.",
params: { maxColors: "Максимум цветов" },
options: {
maxColors: {
"2": "2",
"4": "4",
"8": "8",
"16": "16",
"32": "32",
"64": "64",
"128": "128",
"256": "256",
},
},
},
"custom-palette-png": {
title: "Своя палитра PNG",
description:
"Сопоставляет каждый пиксель с ближайшим цветом из вашего списка hex через запятую.",
params: { colors: "Палитра (hex через запятую)" },
},
"dithering-png": {
title: "Дизеринг PNG",
description:
"Применяет распространение ошибки Флойда–Стейнберга или упорядоченный Байер при сведении к k цветам.",
params: { colors: "Цветов (k)", pattern: "Узор" },
options: {
pattern: { "floyd-steinberg": "Флойд–Стейнберг", bayer: "Байер 4×4" },
},
},
"compress-png": {
title: "Сжать PNG",
description:
"Уменьшает размер PNG сокращением палитры до выбранного уровня. Честный компромисс: меньше цветов — меньше файл.",
params: { level: "Уровень сжатия" },
options: {
level: {
light: "Лёгкий (192 цвета)",
balanced: "Сбалансированный (96 цветов)",
strong: "Сильный (44 цвета)",
extreme: "Экстремальный (16 цветов)",
},
},
},
"reduce-to-size-png": {
title: "Вписать PNG в размер",
description:
"Бинарным поиском подбирает размер палитры, чтобы закодированный PNG уложился в целевое количество КБ. Если не влезает даже при 2 цветах — вернёт двухцветный вариант.",
params: {
targetKB: "Целевой размер, КБ",
maxColors: "Максимум цветов для перебора",
},
},
"png-file-size": {
title: "Размер файла PNG",
description:
"Кодирует изображение в PNG и показывает итоговый размер файла.",
results: {
line: "Размер PNG: {kb} КБ",
},
},
"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: "Квадрат — стороны равны.",
},
},
},
};