Обрезка изображений с использованием только инструментов командной строки
Я хочу обрезать изображение только на моем 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.
Теперь для обрезки нужно определить два фактора:
- начальная точка обрезки (включает 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)
Как пользоваться
Скрипт использует
imagemagick
sudo apt-get install imagemagick
Сохраните скрипт выше как
crop_image
(без расширения) в~/bin
,- Создайте каталог при необходимости. В этом случае также запустить
source ~/.profile
чтобы каталог появился в$PATH
, - Сделайте скрипт исполняемым.
Теперь просто запустите скрипт по его имени, как указано, например:
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 вещи:
- ширина (W) в пикселях прямоугольника
- высота (H) прямоугольника
- расстояние от левой вертикальной стороны прямоугольника до левого края / конца (L) изображения
- расстояние от верхней стороны прямоугольника до верхнего края / конца изображения (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
обрезать изображение. Для получения дополнительной информации читайте здесь