3

Мне трудно найти решение для того, что я пытаюсь сделать.

Проще говоря, использование этих изображений для интернет-магазина.

Пакетная обработка IrfanView с использованием границ обрезки autio в основном сортирует обрезку. Мне нужно вырезать белый / черный или любую другую однородную границу в обрабатываемых изображениях.

Но мне нужно держать изображение в идеальном квадрате. Как 300x300 пикселей.

Так, например, если обрезанное изображение имеет длинную фокусировку, оно обрезает пустое пространство / поле до тех пор, пока оно не достигнет верха и низа. тогда он обрезает только левый и правый угол до точки, где размер левого и правого равен длине. Либо удалив только часть пробела (поля), либо, если необходимо, добавьте немного пробела (поля).

4 ответа4

3

imagemagick есть изумительная опция -trim . Я помню, как использовал его вместе с -size около года назад на связке из 4500 снимков, чтобы убрать пустую монохромную рамку и сохранить только продукт. Я помню , чтобы использовать все изображения в директории a и создать пустой реж b затем из директории используя что - то вроде

for i in *; do convert-im6.q16 $i -trim -resize 300 ../b/$i; done

Затем я подождал около часа, и у меня было 4500 изображений в директории b с обрезанным монохромным фоном и шириной 300 пикселей. Команда convert-im6.q16 может называться немного по-другому в других системах, например, convert или что-то в этом роде.

1

Предполагая, что ваши исходные изображения не имеют фактической черно-белой рамки, и вы просто хотите избежать их создания, вы можете использовать convert Imagemagick:

convert in.jpg -geometry 300x300^ -gravity center -crop 300x300+0+0 out.jpg

Каретка (^) обеспечивает заполнение изображения шириной и высотой.

Однако только использование параметра -geometry приведет к тому, что у вас будет изображение с одной из сторон слишком большой, при условии, что у вас нет квадратного исходного материала. Таким образом, вам нужно обрезать вокруг центра, чтобы получить окончательное разрешение изображения. +0+0 гарантирует, что вы не получите обрезанные части как отдельные файлы, так как они вам не нужны.

Если у вас действительно есть границы на исходном изображении, вы можете попробовать использовать -trim сразу после in.jpg .

1

Я использовал IrfanView для создания работоспособного решения.

Используя Пакетное Преобразование / Переименование из Файла >>, я просто добавляю изображения в диалог Входных файлов.

  1. Используйте дополнительные параметры в настройках пакетного преобразования, затем нажмите «Дополнительно».

  2. Установите флажок ИЗМЕНИТЬ РАЗМЕР и выберите УСТАНОВИТЬ НОВЫЙ РАЗМЕР, затем УСТАНОВИТЕ ОДИН ИЛИ ОБА СТОРОН. В высоту / ширину положить одинаковый размер (я использую 300px). Что это будет делать, так это изменить размер изображения до максимальной точки этого размера. Таким образом, он будет иметь самый большой размер (в зависимости от того, является ли изображение портретным или альбомным) - и он получит 300 пикселей. А другая сторона будет пропорционально масштабирована при условии сохранения соотношения сторон.

  3. Вы также хотите сделать Smart Crop, в случае IrfanView он называется Auto Crop Borders - вы увидите этот параметр справа от диалога RESIZE.

Прежде чем завершить это, вы должны убедиться, что он сначала выполняет обрезку, а затем изменение размера, в противном случае у вас получится что-то меньше, чем 300px, потому что, если он сначала изменяет размер до 300px, а затем обрезает после этого ... Вы можете представить себе результат.

  1. Поэтому в правом нижнем углу установите флажок «Заказ на обработку» и нажмите «Изменить заказ». Переместите границы автоматической обрезки наверх. Нажмите OK, нажмите OK еще раз, и вы готовы конвертировать. Clik Start Batch.

Это не совсем решило мой точный вопрос, но это не имеет значения, пока я смог получить самую большую сторону до 300px и умную обрезку перед изменением размера. Остальное я могу сделать с помощью CSS в моем html, что может быть лучшим решением.

0

Мои требования немного отличались тем, что я хотел обрезать прозрачные пиксели, но это может быть функционально так же, как удаление границы? Может быть.

Ни один из этих ответов не работал для меня. После размещения Баунти, я продолжал поиски и обнаружили , что 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 шага:

  1. Удалить прозрачные края
  2. Измените размер так, чтобы ширина / высота не превышала 300 пикселей.
  3. Сделайте ширину и высоту 300 пикселей.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .