1

Я знаю, что я могу пакетно обрезать изображения с помощью автоматизатора на 50% по горизонтали, но затем он обрезается с обеих сторон ... Мне нужно, чтобы 50% обрезали только с левой / правой стороны.

1 ответ1

3

Я не знаю об Automator; Я бы использовал bash (в командной строке) для такого рода вещей.

Если у вас установлен ImageMagick (вы можете получить его из homebrew), вы можете использовать конвертирование, чтобы отрезать ту или иную сторону изображения.

Это даст вам левую сторону изображения (так что будет отрезана правая половина):

convert input.png -crop 50%x100%+0+0 output.png

Нет обрезки становится Левая сторона

Это даст вам правую сторону (обрезать левую половину изображения):

convert input.png -gravity east -crop 50%x100%+0+0 output.png

Нет обрезки становится Правая сторона

Для работы с каждым файлом, заканчивающимся на .png в данном каталоге, вы можете поместить его в цикл bash for :

for f in *.png; do convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"; done

Чтобы сделать это рекурсивно (каждый *.png в рабочем каталоге и каждый *.png в любых подкаталогах), используйте globstar:

shopt -s globstar; for f in **/*.png; do convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"; done

Все это создаст отдельный выходной файл (в этих примерах для каждого file.png будет создан file-cropped.png). Чтобы работать с файлами без создания отдельного вывода, используйте mogrify (сопутствующий инструмент convert). Конечно, это приведет к перезаписи существующих файлов, поэтому будьте осторожны при их использовании. Mogrify может принимать несколько входных данных из командной строки, поэтому здесь нет необходимости использовать цикл for :

mogrify -crop 50%x100%+0+0 *.png
##  Recursively:
shopt -s globstar; mogrify -crop 50%x100%+0+0 **/*.png

Если вы работаете с действительно огромным количеством файлов (тысячами), указанные выше глобусы могут подавиться; в этом случае вы должны использовать find:

##  For convert:
find . -type f -name '*.png' -execdir bash -c 'convert "$0" -crop 50%x100%+0+0 "${0%.*}-cropped.png"' '{}' \;

##  For mogrify:
find . -type f -name '*.png' -execdir mogrify -crop 50%x100%+0+0 '{}' \;

Вы можете поместить любую из этих вещей в скрипт bash следующим образом:

#!/usr/bin/env bash
for f in *.png; do convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"; done
exit 0

Или более приятная на вид версия:

#!/usr/bin/env bash
for f in *.png; do
  convert "$f" -crop 50%x100%+0+0 "${f%.*}-cropped.png"
done
exit 0

... сохраните это в текстовом файле, называемом crop-left.sh и установите его как исполняемый файл:

chmod u+x crop-left.sh

Чтобы использовать его из командной строки, было бы

./crop-left.sh

Я не знаю, как встроить это в Automator, так как я никогда не использовал эту программу, но, вероятно, это можно сделать.

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