Обрезка изображений с использованием только инструментов командной строки

Я хочу обрезать изображение только на моем CLI Ubuntu, используя только инструмент командной строки , указывающий пиксели для обрезки по четырем направлениям. (то же самое, что и в libreoffice)

Например:

crop image.jpg -top 5px -bottom 7px -right 14px -left 3px

Есть ли такой инструмент (не GUI)?

34
задан 9 August 2018 в 22:14

6 ответов

Вот обходное решение с помощью convert от пакета волшебства изображения.

sudo apt-get install imagemagick

Для изображения image.jpg

$ identify image.jpg 

image.jpg JPEG 720x482 720x482+0+0 8-bit DirectClass 100KB 0.000u 0:00.009

Как показано выше, входное изображение составляет 720x482 пкс.

Теперь, чтобы сделать обрезку Вас должны определить два фактора:

  1. начальная точка обрезки (включает 2 направления)
  2. обрезанный прямоугольный размер (Здесь можно включать другие направления)

Теперь назад к изображению image.jpg выше, я хочу обрезать:

  • главные 5 пкс
  • нижняя часть 7 пкс
  • правильные 14 пкс
  • оставили 3 пкс

тогда, Вы могли сделать это с (width x height + left + top / w x h + l + t формат):

convert image.jpg -crop 703x470+3+5 output.jpg

Теперь

$ identify output.jpg 

output.jpg JPEG 703x470 703x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000
0
ответ дан 9 August 2018 в 22:14

Для создания "удобной для пользователя" cli-опции сценарий ниже может использоваться. Просто выполните команду:

<script> <image> <crop_left> <crop_right> <crop_top> <crop_bottom>

Это создает кадрированное изображение image.jpeg, именованный image[cropped].jpeg в том же каталоге.

Сценарий

#!/usr/bin/env python3
import subprocess
import sys

# image, crop- dimensions
img = sys.argv[1]; left = sys.argv[2]; right = sys.argv[3]; top = sys.argv[4]; bottom = sys.argv[5]
# arrange the output file's name and path
img_base = img[:img.rfind(".")]; extension = img[img.rfind("."):]; path = img[:img.rfind("/")]
img_out = img_base+"[cropped]"+extension
# get the current img' size
data = subprocess.check_output(["identify", img]).decode("utf-8").strip().replace(img, "")
size = [int(n) for n in data.replace(img, "").split()[1].split("x")]
# calculate the command to resize
w = str(size[0]-int(left)-int(right)); h = str(size[1]-int(top)-int(bottom)); x = left; y = top
# execute the command
cmd = ["convert", img, "-crop", w+"x"+h+"+"+x+"+"+y, "+repage", img_out]
subprocess.Popen(cmd)

Как использовать

  1. Использование сценария imagemagick

    sudo apt-get install imagemagick
    
  2. Сохраните сценарий выше как crop_image (никакое расширение) в ~/bin.

  3. Создайте каталог при необходимости. В этом случае, также выполненный source ~/.profile составлять шоу каталога в $PATH.
  4. Сделайте исполняемый файл сценария.

Теперь просто запустите скрипт его именем, как упомянуто, например:

crop_image /path/to/image.jpg 20 30 40 50

Пробелы не являются никакой проблемой, пока в этом случае, Вы используете кавычки:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50
9
ответ дан 9 August 2018 в 22:14

Можно использовать, преобразовывают команду в image magick пакет.
Для установки sudo apt-get install imagemagick или sudo yum install ImageMagick.
Тогда использование -crop geometry для обрезки изображения. Поскольку больше чтений читает здесь

0
ответ дан 9 August 2018 в 22:14

Если Вы хотите отрезать белые регионы, imagemagick имеет специальную команду для него:

convert -trim input.jpg output.jpg
0
ответ дан 10 August 2018 в 08:14

crop для команды нужны 4 вещи. Для понимания это берет изображение, которое Вы хотите обрезать. Теперь, предположите на изображении, рисование прямоугольника размера, который Вы хотите сохранить. Область вне этого прямоугольника будет устранена, обрезана. Прямоугольник не должен быть наклонен, т.е. главная сторона должна быть горизонтальной.

Теперь, запишите эти 4 вещи:

  1. ширина (W) в пикселе прямоугольника
  2. высота (H) прямоугольника
  3. расстояние покинутой вертикальной стороны прямоугольника от левого поля (L) изображения
  4. расстояние главной стороны прямоугольника от верхнего поля / конец изображения (T).

Таким образом Вы имеете теперь W, H, L и значения T.Пока все хорошо. Для знания пикселей можно установить инструмент krule в Ubuntu. Очень полезный.

Теперь, откройте терминал и перейдите к папке, где изображение хранится. Используйте следующую команду и поместите значения W, H, L и T правильно:

convert input.jpg -crop WxH+L+T output.jpg
0
ответ дан 17 April 2019 в 22:47

Используйте mogrify -crop <W>x<H>+<X>+<Y> <files>.

Осторожный: файлы перезаписываются без уведомления.

0
ответ дан 17 April 2019 в 22:47

Другие вопросы по тегам:

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