Если вы работаете с ImageMagick и заметили, что после использования -trim изображение обрезается неравномерно (например, только слева), не спешите винить себя в неправильных настройках. Часто причина кроется в деталях, которые не сразу бросаются в глаза: неравномерное освещение, градиенты фона или те самые предательские виньетки (затемнения по краям кадра). Давайте разберёмся, как заставить инструмент работать корректно даже в таких условиях.
Почему обрезка работает только с одной стороны?
Команда -trim анализирует края изображения, определяя “фоновый” цвет по углам. Если фон неравномерный (как на примере с монетой, где правый верхний угол значительно темнее), алгоритм может посчитать, что справа – не фон, а часть объекта. Особенно это заметно при использовании -fuzz: высокие значения захватывают больше оттенков, но иногда «цепляются» за нежелательные области.
Кстати, ошибка geometry does not contain image возникает, когда ImageMagick вообще не находит зоны для обрезки – обычно из-за слишком низкого или, наоборот, завышенного параметра -fuzz. Но выход есть!
Настройка точной обрезки: шаг за шагом
1. Экспериментируем с trim:percent-background
Этот параметр определяет, какой процент пикселей на краях должен совпадать с фоновым цветом. По умолчанию – 100%, что редко подходит для реальных фото. Попробуйте снизить значение до 98-99.5%:
magick input.jpg -fuzz 45% -define trim:percent-background=99% -trim +repage output.jpg
Чем ниже процент, тем агрессивнее обрезка (но есть риск задеть объект).
2. Предварительная обработка краёв
Если на изображении есть явные виньетки, «отрежьте» их через -shave перед основным trim. Например, удалите по 50 пикселей с каждого края:
magick input.jpg -shave 50x50 -fuzz 40% -trim +repage output.jpg
Это упростит алгоритму задачу, так как тёмные углы исчезнут.
3. Комбинируйте подходы
Иногда лучше запустить обрезку дважды: сначала с высоким -fuzz, затем с более точными настройками. Например:
magick input.jpg -fuzz 55% -trim +repage -fuzz 30% -define trim:percent-background=97% -trim +repage output.jpg
Первый проход убирает большую часть фона, второй – корректирует оставшиеся участки.
Совет: Всегда сохраняйте исходник перед обработкой. Если переборщите с -shave, можно нечаянно обрезать часть объекта.
Не забывайте, что автоматизация – не панацея. Для сложных случаев (например, с сильными перепадами света или текстурным фоном) может потребоваться ручная маска или даже ML-инструменты вроде Rembg. Но для большинства задач настройки ImageMagic(k) хватит с головой.
Кстати, если видите, что после обработки края объекта стали «рваными», добавьте -blur 0x1 перед -trim – это сгладит мелкие шумы без потери детализации. И да, параметры всегда подбираются эмпирически: сделайте 5-10 вариантов с разными значениями и сравните результаты.