Пакетное изображение автоматически обрезает, применяет фиксированную ширину и поддерживает соотношение сторон
Мне трудно найти решение того, что я пытаюсь сделать.
Проще говоря, использование этих изображений для интернет-магазина.
Пакетная обработка IrfanView с использованием границ обрезки autio в основном сортирует обрезку. Мне нужно вырезать белый / черный или любую другую однородную границу в обрабатываемых изображениях.
Но мне нужно держать изображение в идеальном квадрате. Как 300x300 пикселей.
Так, например, если обрезаемое изображение имеет длинную фокусировку, оно обрезает пустое пространство / поле до тех пор, пока не достигнет верха и низа. тогда он обрезает только левый и правый угол до точки, где размер левого и правого каналов равен длине. Либо удалив только часть пробела (поля), либо, если необходимо, добавьте немного пробела (поля).
4 ответа
imagemagick
имеет изумительный вариант -trim
, Я помню, как использовал его вместе с -size
около года назад на связке из 4500 снимков убрали пустую монохромную рамку и оставили только продукт. Я помню, как положил все изображения в каталог a
и создание пустого каталога b
; тогда из режиссера a
используя что-то вроде
for i in *; do convert-im6.q16 $i -trim -resize 300 ../b/$i; done
Затем я ждал около часа, и у меня было 4500 изображений в каталоге b
с обрезанным монохромным фоном и шириной 300 пикселей. convert-im6.q16
команда может быть названа немного по-другому в других системах, например convert
или что-то.
Я использовал IrfanView для создания работоспособного решения.
Используя Пакетное Преобразование / Переименование из Файла >>, я просто добавляю изображения в диалог Входных файлов.
Используйте дополнительные параметры в настройках пакетного преобразования, затем нажмите "Дополнительно".
Установите флажок ИЗМЕНИТЬ РАЗМЕР и выберите УСТАНОВИТЬ НОВЫЙ РАЗМЕР, затем УСТАНОВИТЕ ОДИН ИЛИ ОБА СТОРОН. В высоту / ширину положите одинаковый размер (я использую 300px). Что это будет делать, так это изменить размер изображения до максимальной точки этого размера. Таким образом, он будет иметь самый большой размер (в зависимости от того, является ли изображение портретным или альбомным) - и он получит 300 пикселей. А другая сторона будет пропорционально масштабирована при условии сохранения соотношения сторон.
Вы также хотите сделать Smart Crop, в случае IrfanView он называется Auto Crop Borders - вы увидите этот параметр справа от диалога RESIZE.
Прежде чем завершить это, вы должны убедиться, что он сначала выполняет обрезку, а затем изменение размера, в противном случае у вас получится что-то меньше, чем 300px, потому что, если он сначала изменяет размер до 300px, а затем обрезает после этого... Вы можете представить себе результат.
- Поэтому в правом нижнем углу установите флажок "Заказ на обработку" и нажмите "Изменить заказ". Переместите границы автоматической обрезки наверх. Нажмите OK, нажмите OK еще раз, и вы готовы конвертировать. Clik Start Batch.
Это не совсем решило мой точный вопрос, но это не имеет значения, пока я смог получить самую большую сторону до 300px и умную обрезку перед изменением размера. Остальное я могу сделать с помощью CSS в моем html, что может быть лучшим решением.
Предполагая, что ваши исходные изображения не имеют фактической черной или белой границы, и вы просто хотите избежать их создания, вы можете использовать Imagemagick's convert
:
convert in.jpg -geometry 300x300^ -gravity center -crop 300x300+0+0 out.jpg
Каретка (^
) гарантирует, что изображение заполняет как ширину, так и высоту.
Однако только используя -geometry
Параметр оставит вас с изображением с одной из сторон слишком большой, при условии, что у вас нет квадратного исходного материала. Таким образом, вам нужно обрезать вокруг центра, чтобы получить окончательное разрешение изображения. +0+0
гарантирует, что вы не получите обрезанные части как отдельные файлы, так как они вам не нужны.
Если у вас на самом деле есть границы в исходном изображении, вы можете попробовать использовать -trim
сразу после in.jpg
,
Мои требования немного отличались тем, что я хотел обрезать прозрачные пиксели, но это может быть функционально так же, как удаление границы? Может быть.
Ни один из этих ответов не работал для меня. После размещения щедрости я продолжил поиск и обнаружил, что extent
был недостающий кусок.
magick convert *.png -trim -background none -resize 300x300 -gravity center -extent 300x300 out/processed.png
Вот то, что делает каждый параметр, насколько я понимаю:
-trim
: Обрезать все прозрачные пиксели (слева, справа, сверху, снизу)-background none
: сохранить прозрачность для изменения размера (порядок важен!)-resize 300x300
: Делает максимальную ширину и высоту 300. Не делает его квадратным.-gravity center
: Центрирует изображение (может быть необязательным, может работать как с изменением размера, так и с экстентом, мало тестировалось).-extent 300x300
Изменение размера холста, это то, что снова делает его квадратным.
Что в основном означает 3 шага:
- Удалить прозрачные края
- Измените размер так, чтобы ширина / высота не превышала 300 пикселей.
- Сделайте ширину и высоту 300 пикселей.