Пакетное изображение автоматически обрезает, применяет фиксированную ширину и поддерживает соотношение сторон

1944
StuyvesantBlue

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

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

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

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

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

3
Более того, IrfanView, выполняющий пакетное преобразование, сначала выполняющий автоматическую обрезку границ, а затем изменяющий размер, дает мне результат, с которым я мог бы работать. Но делать оба в одном преобразовании нет. Есть ли способ заставить IrfanView сначала выполнить автоматическую обрезку, а затем выполнить изменение размера всего за один раз, вместо того, чтобы делать преобразования отдельно? StuyvesantBlue 8 лет назад 1
О боже, теперь я вижу, что в правом нижнем углу расширенных настроек для пакетной обработки в IrfanView есть возможность настроить порядок обработки. StuyvesantBlue 8 лет назад 1
Если вы решили свою проблему, опубликуйте решение как ответ ... оно может быть полезным для других или улучшено другими. :) Hastur 8 лет назад 0
@ Хастур Понял. Не совсем решил проблему, но дает мне кое-что, с чем я могу работать ... StuyvesantBlue 8 лет назад 1

4 ответа на вопрос

3
gmelis

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или как- то еще.

1
StuyvesantBlue

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

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

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

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

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

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

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

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

ИМХО, лучше, если вы найдете пакетное решение, возможно, с imagemagick. Шаги должны быть следующими: 1 автокроп 2, найдите большую сторону 3, масштаб без деформации до 300 для большей стороны, 4 суммы с центром в белый квадрат 300х300. Если вы смотрите границу от 20 пикселей до 280. Imagemagick станет вашим лучшим другом. Linux должен быть хорошей средой для сценария ... удачи. Hastur 8 лет назад 0
1
qubodup

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

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

Caret ( ^) гарантирует, что изображение заполняет как ширину, так и высоту.

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

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

0
Scott Beeson

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

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

Похожие вопросы