Image Tools
github.com/Tensionix/image-tools ↗
Картинки бывают не только в JPG. Нужно извлечь изображения из PDF, а не только экспортировать страницы? Напечатать контактный лист с вашими параметрами? Изменить цветовой профиль или DPI под рулон бумаги? Точно подогнать тысячу файлов под загрузку аватара? Не проблема — и всё это пачками, без облаков и без установки.
Audion Image Tools
Содержание
- Зачем это сделано
- Принципы
- Что умеет
- Дальше
- Техническая часть
- Запуск
- Значения по умолчанию
- Выбор цветового профиля
- Папки
- Источник и назначение
Портативный набор для работы с изображениями: конверсия, цвет, размеры, обрезка, водяные знаки, замощение, контактные листы, а ещё страницы PDF и картинки внутри DOCX, PPTX и PDF.
Зачем это сделано
Обработка картинок распадается на две разные задачи, и путать их дорого.
Первая — принять то, что дали. Съёмка приходит в RAW с фотоаппарата, скан в многокадровом TIFF, макет в PSD, снимок с телефона в HEIC. Программа должна открыть всё это, не спрашивая, откуда оно взялось.
Вторая — отдать предсказуемо. Здесь важно обратное: узкий круг форматов, где поведение выверено до мелочей — что происходит с прозрачностью, как пишется цветовой профиль, меняются ли пиксели.
Отсюда главное решение: вход широкий, выход узкий. На входе — максимум того, что вообще можно открыть. Глубокая и предсказуемая обработка сосредоточена вокруг JPG и PNG.
Принципы
Три уровня поддержки формата названы вслух. Не «поддерживается», а насколько.
| уровень | что это значит | форматы |
|---|---|---|
| устойчивое ядро | выверено, работает всегда | BMP, GIF, JPG, PNG, TGA, TIFF, WebP, AVIF |
| через адаптер | нужен дополнительный слой | HEIC и HEIF, RAW с фотоаппаратов — CR2, CR3, DNG |
| как получится | открывается не всегда | WMF, IFF, XIF; PSD — по мере сил |
Что доступно на конкретной машине, программа говорит сама:
python system_core\main.py formats
Цвет выбирается, а не угадывается. Для экрана — sRGB, для печати — CMYK, и в каждом случае явно: встроенный путь без внешнего файла или конкретный профиль с диска. Программа не решает за вас, какой из двух CMYK-профилей вам нужен, — потому что это зависит от типографии, а не от файла.
Операции, не трогающие пиксели, отделены от тех, что трогают. Запись разрешения меняет только метку в файле; подгонка под рулон пересчитывает разрешение по размеру в миллиметрах, оставляя пиксели как есть. Это написано у каждой такой операции, чтобы не искать потом, откуда взялась потеря качества.
Совместимость важнее компактности. WebP, AVIF и HEIF есть для лёгкой доставки, но JPG остаётся тем, что откроется везде, и заменять его на них по умолчанию программа не станет.
Что умеет
| раздел | о чём |
|---|---|
| Конверсия | в JPG, PNG, TIFF, WebP, AVIF, HEIF, HEIC; качество пресетами или точным значением |
| Цвет | нормализация с явным выбором профиля, оттенки серого, безопасная прозрачность для JPG |
| Размеры | под экран 1080p, 1440p, 2160p; под 16:9, A4, A3; под рулон по стороне в миллиметрах |
| Разрешение | запись выбранного разрешения без изменения пикселей |
| Обрезка | однотонная рамка, умная обрезка белого фона, защитное поле в миллиметрах |
| Сборка PDF | сразу после обрезки, со встроенным PNG или JPG |
| Водяной знак | подпись в углу или диагональная защитная надпись с прозрачностью и цветом |
| Замощение | одна картинка на A5, A4, A3 или рулон — для наклеек, с полями и зазором в миллиметрах |
| Контактный лист | сетка миниатюр: типовые размеры или свой |
| Кадры | многокадровую картинку (TIFF, GIF, WebP, APNG) - в нумерованные кадры PNG с их паузами; кадры - обратно в GIF, WebP или APNG |
| Поворот | исправление по метке ориентации; JPEG на 90, 180, 270 градусов без потерь (jpegtran) |
| Точный размер | вписать, дополнить полями, обрезать или растянуть до размера в пикселях; масштаб от 0,1 до 1000 % |
| Коррекция | уровни, яркость, контраст, гамма, насыщенность, ч/б, сепия, тонировка, инверсия, белое в прозрачное; PNG 256 цветов |
| Метаданные | EXIF и GPS убираются без перезаписи картинки, пиксели сверяются |
| ICO | все размеры, которые просит Windows, в одном файле |
| Страницы PDF | повернуть выбранные страницы, склеить, разделить по диапазонам, очистить метаданные; каждая копия проверяется, прежде чем назвать её готовой |
| Картинки в документах | DOCX, PPTX, PDF: проверить DPI, поднять, уменьшить, уложить документ в размер в МБ, sRGB или CMYK, извлечь; маленький PNG - герб, значок - остаётся PNG |
| Предпросмотр | до, после, рядом - для операций, которые вслепую трудно настроить |
Файлы PDF и картинки внутри документов программа читает и пишет библиотекой PyMuPDF, а она распространяется под GNU AGPL 3.0. Собственный код программы остаётся под Apache 2.0, но сборка целиком — программа вместе с PyMuPDF — идёт на условиях GNU AGPL 3.0; подробнее — в файле NOTICE.
Дальше
- Руководство — работа по шагам.
install\README_INSTALL.md— сборка окружения и окна (по-английски).
Техническая часть
Запуск
Start.exe окно
image_cli.cmd describe все разделы, операции и поля в JSON
image_cli.cmd run --operation downscale_percent --set scale_mode=custom --set custom_percent=75
Окно - родное окно Windows (папка App\). Кнопка окна не делает ничего сверх консольной команды: она запускает image_cli.cmd с теми же настройками, и журнал при каждом запуске пишет эту строку. Коды выхода: 0 - готово, 1 - ошибка, 130 - остановлено, 2 - неверный вызов, и тогда ничего не запускается.
Пачку из многих файлов журнал показывает одной живой строкой: доля сделанного, сколько сделано и сколько всего, скорость, сколько осталось по времени и текущий файл - каждое своим цветом. Файл, с которым что-то пошло не так, остаётся в журнале строкой; все строки всех файлов лежат в журнале операции в logs\.
Значения по умолчанию
| что | значение |
|---|---|
| качество JPG | 83; пресеты 60, 75, 90; точное значение от 1 до 100 |
| сжатие PNG | в окне один пресет, в командной строке — параметр |
| качество контактного листа | 75 или 92 |
| диагональная надпись | около 60 % диагонали |
Выбор цветового профиля
| задача | что выбрать |
|---|---|
| экран, сайт, обычная передача | sRGB |
| печать | CMYK |
| нужен встроенный путь без внешнего файла | Pillow sRGB |
| нужен явный внешний эталон | профиль color.org |
| широкий классический печатный сценарий | Photoshop5DefaultCMYK.icc |
| покрытая печать по конкретному стандарту | CoatedFOGRA39.icc |
Папки
App\ окно и PowerShell, который программа несёт с собой
Start.exe открывает окно
input\ быстрая папка источников
output\ результаты
logs\ журнал каждой операции, отчёты запусков
report\ отчёты проверок
workspace\ временная область
config\ операции, раскладка окна, умолчания, профили ICC
system_core\ движок и консольная команда
install\ портативное окружение
wheelhouse\ пакеты для установки без сети
Источник и назначение
ИСТОЧНИК и НАЗНАЧЕНИЕ - два рабочих пути, у каждого своя история и закреплённые пути; источником может быть и один файл. Под ними: СБРОСИТЬ возвращает оба пути на папки программы input и output (история очищается, закреплённые остаются, файлы не трогаются); СПИСОК пишет в журнал, что лежит в источнике; В ИСТОЧНИК делает результат источником следующей операции; ОЧИСТИТЬ удаляет содержимое источника, назначения или обоих - в Корзину, после вопроса, где названы пути. По-английски: SOURCE, TARGET, RESET, LIST, TO SOURCE, CLEAR.
Программа портативная: распакованная папка и есть установленная программа. Реестр не трогается, удаление — удалить папку.
$name = "Audion_Image_Tools_v3.0.0_Full.zip"
Invoke-WebRequest "https://audion.dev/get/image-tools/3.0.0/Audion_Image_Tools_v3.0.0_Full.zip" -OutFile $name
Invoke-WebRequest "https://audion.dev/get/image-tools/3.0.0/Audion_Image_Tools_v3.0.0_Full.zip.sha256" -OutFile "$name.sha256"
$want = (Get-Content "$name.sha256").Split(" ")[0]
$have = (Get-FileHash $name -Algorithm SHA256).Hash.ToLower()
if ($want -ne $have) { throw "сумма не сошлась: загрузка повреждена" }
Expand-Archive $name -DestinationPath ".\image-tools"