Сжатие PNG и удаление фона: проверка цветов и прозрачности
Меньший файл должен сохранять нужные цвета и прозрачность. Показываем, как нашли неявную палитру в Sharp, исправили запуск rembg и проверили реальные PNG по компонентам, маске и содержимому скачанного ZIP.
Уменьшить PNG и не изменить пиксели
У изображения прозрачный край, точные фирменные цвета или небольшая диаграмма. Нужно уменьшить файл для сайта и сохранить то, что нарисовано. Одного расширения PNG для этого недостаточно: обработчик может использовать палитру и изменить цветовые компоненты. В DOKIVO исправили четыре режима сжатия PNG, чтобы они сохраняли контрольные значения RGBA, а не только похожий внешний вид.
Одновременно исправили отдельную причину отказа удаления фона: установленный запуск rembg не находил собственный модуль диагностики. Это не новый алгоритм выделения объекта и не замена модели. Мы восстановили рабочий путь запуска, проверили одиночную обработку и пакетный ZIP, а результат прочитали независимым инструментом.
Для этих задач доступны сжатие PNG и удаление фона. Это разные действия: сжатие сохраняет исходное изображение, а удаление фона намеренно меняет прозрачность выбранного окружения. Понимание разницы помогает не ожидать от одного режима результата другого.
Почему проверяется RGBA, а не только размер файла
RGBA — четыре компонента пикселя: красный, зелёный, синий и альфа. Альфа задаёт прозрачность, поэтому ошибка может быть незаметна на одном фоне и проявиться ореолом на другом. Для схемы, логотипа или интерфейсного изображения важно проверять не только ширину и высоту, но и значения компонентов.
До исправления режимы могли выдавать меньший PNG, но меняли RGB и альфу контрольного изображения. Причина оказалась в параметрах Sharp 0.35.4: наличие настройки effort включало палитровое преобразование. У этого поведения есть практическое следствие: слово «сжатие» в названии инструмента ещё не доказывает, что пиксели остались прежними.
Исправление минимальное: настройку effort убрали, palette:false задали явно. Четыре режима различаются уровнем deflate, а не неявным переходом к палитре. Это пример технического решения, в котором небольшая правка параметров важнее большого переписывания обработчика.
| Свойство | Зачем нужно | Чем подтверждали |
|---|---|---|
| Размеры изображения | Не потерять геометрию | Независимое декодирование PNG |
| RGB | Сохранить цвет контрольных пикселей | Покомпонентное сравнение Pillow |
| Альфа | Сохранить прозрачные края | Точное сравнение альфа-канала |
| Байты файла | Оценить объём и идентичность выдачи | Размер и SHA-256 скачанного результата |
Четыре режима на одном контрольном PNG
Для фактической проверки сайта использовали синтетический RGBA8 PNG размером 360 × 240, объёмом 346 018 байт. Каждый из четырёх режимов получил один и тот же вход. Готовые файлы скачали и отдельно прочитали Pillow в серверном окружении: размеры совпали, изменённых компонентов RGBA оказалось ноль, альфа-канал совпал точно во всех четырёх случаях.
| Режим | Исходник, байт | Результат, байт | Изменённых RGBA-компонентов |
|---|---|---|---|
| Максимальный | 346 018 | 297 898 | 0 |
| Сильный | 346 018 | 336 310 | 0 |
| Сбалансированный | 346 018 | 336 310 | 0 |
| Мягкий | 346 018 | 336 310 | 0 |
Три режима здесь дали одинаковый объём. Это нормальный измеренный результат, который не нужно искусственно делать красивее. Даже при одинаковых пикселях и длине файлы могут отличаться служебными данными и SHA. Главный критерий этого исправления — сохранность компонентов, а не обязательное различие размеров каждого режима.
Один контрольный градиент не покрывает все PNG. Проверка не доказывает сохранность каждого ICC-профиля, 16-битного изображения или необычного набора метаданных. Для важного файла откройте свой результат в целевом редакторе и оцените нужные свойства отдельно. Универсальный процент сжатия по этому примеру не обещаем.
Что именно исправили в удалении фона
Обработчик удаления фона использовал установленную команду rembg, но её путь запуска не видел собственный модуль диагностики. Адаптер теперь добавляет фиксированный доверенный каталог сервера только для этой установленной команды. Пользовательское имя файла и каталог задания не превращаются в произвольные пути импорта.
Модели, зависимости и правила маски не заменяли. Поэтому нельзя объяснять этот выпуск словами «стало лучше распознавать волосы» или «новая нейросеть». Подтверждённое улучшение другое: реальный установленный запуск выполняет задачу, а одиночный и пакетный варианты дают согласованный результат на контрольном входе.
Объект: альфа 255
Проверенные точки объекта полностью непрозрачны. Это локальный контроль маски, а не доказательство качества всей границы на любой фотографии.
Фон: альфа около нуля
В выбранных точках фон прозрачен или почти прозрачен. Для готового макета проверьте край на светлой и тёмной подложке: так легче заметить ореол.
В принятой проверке использовали синтетический портрет 900 × 1200. Полученный PNG имел тот же размер, а выбранные точки объекта и фона соответствовали ожидаемой прозрачности. Готовый файл визуально осмотрели. Это осмысленная проверка запуска и маски, но не оценка всех реальных фотографий, стекла, меха и полупрозрачных предметов.

Проверяли реальные файлы, а не только успешный HTTP
После исправлений серверная группа прошла 21 проверку без пропусков. В неё вошли установленная rembg CLI, одиночная и пакетная обработка, четыре режима PNG, маска, композиция, отмена и неверный вход. Ранние неуспешные ожидания сохранили и разобрали; итоговый успех не был получен снижением порогов качества.
На действующем сайте приняли шесть настоящих ответов: пять PNG и ZIP с двумя PNG. Отдельное чтение результатов подтвердило размеры, компоненты и корректность ZIP. Обе записи пакета совпали с одиночным результатом побайтно, имена и порядок сохранились. В этом тесте исходник намеренно повторяли: это контроль согласованности single/batch, а не два независимых портрета.
В этом отчёте описано исправление для dokivo.ru. Новый запуск на международных доменах этим отчётом не подтверждался. Интерфейс не менялся, отдельную мобильную приёмку самого исправления не заявляли. Такое уточнение позволяет отделить проверенный результат обработки от работы, которая не входила в этот выпуск.
Как выбрать действие для своего изображения
- Если требуется сохранить все пиксели, откройте сжатие PNG. Сначала сравните один режим на копии важного файла.
- Если требуется убрать окружение объекта, используйте удаление фона. Сжатие само по себе этого не делает.
- После скачивания проверьте размеры, прозрачность и край объекта. Откройте PNG на подходящей подложке и при нужном увеличении.
- Для пакета распакуйте ZIP и проверьте число результатов, имена и каждый важный файл. Один удачный элемент не подтверждает весь набор автоматически.
Оставляйте исходник рядом с готовым файлом. Это помогает честно оценить экономию объёма и вернуться к оригиналу, если изображение используется для печати или дальнейшего редактирования. В техническом сравнении полезно разделять равенство пикселей, визуальную пригодность и идентичность файла: это три разных свойства одного результата.
Частые вопросы
PNG всегда сжимается без изменения цветов?
Формат поддерживает разные способы хранения. Для наших четырёх исправленных режимов контроль RGBA8 прошёл без изменений компонентов. Это конкретный подтверждённый результат, а не свойство любой программы с расширением PNG.
Почему три режима дали один размер?
Итог зависит от данных и deflate. В контрольном примере три результата заняли по 336 310 байт при одинаковых пикселях. Разница режима не обязана давать отдельный размер для каждого входа.
В удалении фона заменили модель?
Нет. Исправлен путь запуска установленной rembg CLI. Модель и правила маски сохранились; новых заявлений о качестве волос или прозрачных предметов этот выпуск не даёт.
Прозрачный фон будет виден в любом просмотрщике?
Программа может показывать прозрачность чёрным, белым или шахматным фоном. Оценивать нужно альфа-канал и наложение на подложку; цвет пустого пространства окна сам по себе не является свойством PNG.