Автоматичне обрізання Batch Image, нанесення фіксованої ширини та підтримка співвідношення сторін


3

Мені важко знайти рішення того, що я намагаюся зробити.

Простіше кажучи, використання цих зображень призначено для інтернет-магазину.

Пакетна обробка IrfanView з використанням меж урожаю autio в основному сортує обрізання. Мені потрібно вирізати біле / чорне або будь-яку рівномірну межу в образах, що обробляються.

Але мені потрібно тримати зображення в ідеальному квадраті. Як і 300x300 пікселів.

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


1
Додамо, якщо IrfanView проводить пакетне перетворення, спочатку робляться автоматичні обрізки меж, а потім змінюється розмір, дає мені результат, з яким я міг би працювати. Але робити обидва в одному перетворенні - це не так. Чи є спосіб змусити IrfanView спершу зробити автоматичну обрізку, а потім виконати розмір усіх за один раз, а не робити перетворення окремо?
StuyvesantBlue

1
О, боже, я бачу, що в нижньому правому куті Розширених налаштувань пакетної обробки в IrfanView є можливість регулювати порядок обробки.
StuyvesantBlue

Якщо ви вирішите своє питання, опублікуйте це рішення як відповідь ... воно може бути корисним для інших або покращеним іншими. :)
Гастур

1
@Hastur Зрозумів. Не точно вирішив це питання, але дає мені щось, з чим я можу працювати ...
StuyvesantBlue

Відповіді:


3

imagemagickмає дивовижний варіант -trim. Пам’ятаю, я використовував його разом з -sizeблизько року тому на купі з 4500 фотографій, щоб видалити порожню монохромну облямівку і зберегти лише продукт. Я пам’ятаю, як вписати всі зображення в каталог aі створити порожній реж b; то від dir aвикористовуючи щось подібне

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

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


1

Я використовував IrfanView для досягнення ефективного рішення.

Використовуючи пакетне перетворення / перейменування з файлу >> Я просто додаю зображення до діалогового вікна вхідних файлів.

  1. Використовуйте розширені параметри в налаштуваннях пакетного перетворення, а потім натисніть кнопку Додатково.

  2. Поставте прапорець РАЗМІН та виберіть НАСТРОЮВАТИ НОВИЙ РОЗМІР, а потім встановіть ОДИН АБО СТОРІН СІД. По висоті / ширині поставте однаковий розмір (я використовую 300 пікселів). Для цього потрібно змінити розмір зображення до максимальної точки такого розміру. Таким чином, він займе найбільший розмір (залежно від того, портретне чи пейзажне зображення) - і це зробить ці 300 пікселів. А інша сторона буде масштабуватися пропорційно за умови збереження співвідношення сторін.

  3. Ви також хочете зробити Smart Crop, у випадку IrfanView це називається Автоматичне обрізання кордонів - це налаштування ви побачите праворуч від діалогового вікна RESIZE.

Перш ніж завершити це, ви хочете переконатися, що спочатку відбувається обрізання, а потім зміна розміру, інакше ви закінчите щось менше, ніж 300 пікселів, тому що якщо спочатку він змінює розмір до 300 пікселів, а потім обробляє після цього ... ви можете уявити результат.

  1. Тож у нижньому правому куті поставте галочку на замовлення на спеціальну обробку та натисніть кнопку Змінити замовлення. Перемістіть межі автоматичного обрізання до вершини. Натисніть кнопку ОК, знову натисніть кнопку ОК, і ви готові до конверсії. Clik Start Batch.

Це точно не вирішило моє точне запитання, але це не має значення, поки я зміг отримати найбільшу сторону до 300 пікселів та розумне обрізання перед зміною розміру. Решту я можу виконати за допомогою CSS у своєму html, що насправді може бути кращим рішенням.


ІМХО краще, якщо ви знайдете пакетне рішення, можливо, з Imagemagick. Етапи повинні бути 1 автокропом, 2 знайти більшу сторону 3 шкалою без деформації до 300 для більшої сторони, 4 суми зосереджені на білому квадраті 300х300. Якщо ви переглядаєте межу від 20 пікселів до 280. Imagemagick стане найкращим другом. Linux повинен бути гарним середовищем для сценарію ... удачі.
Гастур

1

Припускаючи, що ваші оригінальні зображення не мають фактичної чорної чи білої рамки, і ви просто хочете уникати створення таких, ви можете використовувати Imagemagick convert:

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

Карета ( ^) гарантує, що зображення заповнює як ширину, так і висоту.

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

Якщо у вас є вихідні межі у вихідному зображенні, ви можете спробувати скористатися -trimвідразу після in.jpg.


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 пікселів.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.