Обрізання зображень за допомогою лише інструментів командного рядка


34

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

Наприклад:

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

Чи є такий інструмент (не GUI)?



@ThomasWeller це запит на командний рядок, а не інструмент графічного інтерфейсу, а також пов’язане з вами поставлене питання стосується GUI, тому, будь ласка, просто прочитайте питання ще раз
Maythux

2
Зв'язане запитання не визначає тип інструменту. Друга відповідь стосується інструменту командного рядка: imagemagick. Я знаю, що там обговорюються питання про те, чи є питання повторюваним, якщо відповідь однаковий. Люди можуть погодитися або не погодитися.
Томас Веллер

1
@ThomasWeller, але відповідь не зручна, більше того, вона не показує, як і чому він використовував варіанти .. Чесно кажучи, ви зрозуміли варіанти, що використовуються ?! Я сам не можу отримати цю інформацію, це лише перша відповідь тут, без пояснень, що робить відповідь низькою якістю
Maythux

@downvoters Чи повинен я знати, що з тобою? !!
Maythux

Відповіді:


38

Ось вирішення способу використання convertпакету зображень Magick.

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вище, я хочу обрізати:

  • верхній 5 пікс
  • знизу 7 пікселів
  • справа 14 пікселів
  • зліва 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

2
Кажуть, що Imagemagick 7 використовує команду "магія" замість "конвертувати". Якщо хтось 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!
Dɑvïd

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! hhhh Я не розумію чому
Maythux

3

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


Цей урожай за співвідношенням, а не з різною маржею
Maythux

Ні, -cropваріант дає xі yЦе компенсації і gravity. тож ви можете використати його для обрізання площі
M.Fooladgar

Я опублікував це як відповідь, все одно дякую за вашу допомогу, але ви повинні написати це у своїй відповіді перед4
Maythux

@Arronical Спасибі Я вже отримую це і розміщую як відповідь. будь ласка, перевірте це
Maythux

3

Використовуйте mogrify -crop <W>x<H>+<X>+<Y> <files>.

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


1

cropКоманда потребує в 4 речі. Щоб зрозуміти це, візьміть зображення, яке потрібно обрізати. Тепер уявіть, що на зображенні ви малюєте прямокутник розміру, який ви хочете зберегти. Площа поза цим прямокутником буде ліквідована, обрізана. Прямокутник не повинен бути нахилений, тобто верхня сторона повинна бути горизонтальною.

Тепер запишіть ці 4 речі:

  1. ширина (Вт) у пікселях прямокутника
  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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.