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

34

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

Например:

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

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

Maythux
источник
@ThomasWeller это запрашивает командную строку, а не инструмент GUI, плюс поставленный вами связанный вопрос касается GUI, поэтому, пожалуйста, просто прочитайте вопрос еще раз
Maythux
2
В связанном вопросе не указан тип инструмента. Второй ответ об инструменте командной строки: imagemagick. Я знаю, что есть дискуссии о том, является ли вопрос дубликатом, если ответ тот же. Люди могут соглашаться или не соглашаться.
Томас Веллер
1
@ThomasWeller, но ответ не очень удобен, более того, он не показывает, как и почему он использовал параметры ... Честно говоря, вы понимали, какие параметры использовались ?! Я сам не могу получить эту информацию, это только первый ответ здесь, без объяснений, что делает ответ низким качеством
Maythux
@ downvoters Должен ли я знать, что с тобой? !!
Maythux

Ответы:

38

Вот обходной путь с использованием 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 пикселя

тогда вы можете сделать это с ( формат widthx height+ left+ top/ wx 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
Maythux
источник
2
Говорят, что Imagemagick 7 использует команду «magick» вместо «convert». Если у кого-то command not found: convertmagick
возникнут
1
Это было большой помощью, но мне потребовалось некоторое время, чтобы обернуть голову вокруг «расчетов». У меня был набор изображений 1280x1024, из которых мне нужно было обрезать верх и низ, поэтому итоговое изображение будет иметь «средние» 718 пикселей от оригинала (без черных полос сверху и снизу). Мне нужно было использовать это: convert in.png -crop 1280x718+0+152 out.pngгде я понимаю эту строку, чтобы означать: convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.pngхотя это, кажется, не совпадает с числами @ Maythux ... FWIW!
Девид
3
Разве это не должно быть 703x470вместо 713x470? Как обрезка влево + вправо = 3+14 = 17px, что при вычитании из 720есть 703, а не 713.
Mooncrater
Это помогло! Я также предложил редактировать в FIX и 703px вместо 713px (что я согласен), и перевернутые влево и вверх в форматеWxH+l+t
el-teedee
12

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

convert -trim input.jpg output.jpg
Мартин Тома
источник
9

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

<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
Якоб Влейм
источник
@Maythux Не знаете, что означает ваше последнее редактирование, вы имеете в виду, что приведенное выше решение не работает в вашей системе? Это только кли.
Джейкоб Влейм
Извините, я был три дня назад, так что я не знаю, почему вы получаете пониженную оценку, вместо этого здесь мой +1, так как вы заслуживаете.
Maythux
Но я думаю, даже если это сработает, для новичка это будет немного сложнее, чем с помощью инструмента для родного урожая, но для меня я люблю ваш путь, довольно круто, извините еще раз за задержку
Maythux
Вау, спасибо. Понижение, которое я получил из-за этого: meta.askubuntu.com/questions/14082/…
Джейкоб Влейм
Я не знаю, почему хороший ответ / вопрос отрицается, если только плохое использование репутации, этот вопрос идет -3 !!! хххх, я не понимаю, почему
Maythux
3

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

M.Fooladgar
источник
Этот урожай по соотношению, а не с разной
наценкой
Нет, -cropвариант дает xи yЭто смещения и gravity. так что вы можете использовать это время, чтобы обрезать квадрат
M.Fooladgar
Я отправил это как ответ, спасибо за вашу помощь в любом случае, но вы должны написать это в своем ответе до 4
Maythux
@ Arronical Спасибо, я уже получил это и отправил как ответ. пожалуйста, проверьте это
Maythux
3

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

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

R2-D2
источник
1

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
Гугли Гугли
источник