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

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

Например:

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

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

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

Как показано выше, входное изображение имеет размер 720x482px.

Теперь для обрезки нужно определить два фактора:

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

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

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

тогда вы могли бы сделать это с (widthИксheight+left+top / wИкс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

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

convert -trim input.jpg output.jpg

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

<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

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

Использование mogrify -crop <W>x<H>+<X>+<Y> <files>,

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

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

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