Kadrowanie zdjęć przy użyciu tylko narzędzi wiersza poleceń


34

Chcę wykadrować obraz na moim Ubuntu tylko z interfejsem CLI przy użyciu narzędzia wiersza poleceń wskazującego tylko piksele do kadrowania dla czterech kierunków. (tak samo jak w libreoffice)

Na przykład:

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

Czy istnieje takie narzędzie (nie GUI)?



@ThomasWeller to pyta o wiersz poleceń, a nie narzędzie GUI, a dołączone przez ciebie pytanie dotyczy GUI, więc proszę ponownie przeczytaj pytanie
— Maythux

2
Połączone pytanie nie określa typu narzędzia. Druga odpowiedź dotyczy narzędzia wiersza poleceń: imagemagick. Wiem, że toczą się dyskusje na temat SO, czy pytanie jest duplikatem, jeśli odpowiedź jest taka sama. Ludzie mogą się zgodzić lub nie.
— Thomas Weller

1
@ThomasWeller, ale odpowiedź nie jest wygodna, a ponadto nie pokazuje, w jaki sposób i dlaczego skorzystał z opcji. Sam nie mogę uzyskać tych informacji, to tylko pierwsza odpowiedź tutaj, bez żadnego wyjaśnienia, co powoduje, że odpowiedź jest niskiej jakości
— Maythux

@downvoters Czy powinienem wiedzieć, co się z tobą dzieje? !!
— Maythux,

Odpowiedzi:


38

Oto obejście problemu convertz pakietu magii obrazu.

sudo apt-get install imagemagick

Na zdjęcie image.jpg

$ identify image.jpg 

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

Jak pokazano powyżej, obraz wejściowy to 720 x 482 pikseli.

Teraz, aby wykonać kadrowanie, musisz określić dwa czynniki:

  1. punkt początkowy kadrowania (obejmuje 2 kierunki)
  2. Rozmiar przyciętego prostokąta (tutaj możesz uwzględnić inne kierunki)

Wróćmy do image.jpgpowyższego obrazu , chcę przyciąć:

  • top 5px
  • dolna 7px
  • prawo 14px
  • w lewo 3px

możesz to zrobić w formacie ( widthx height+ left+ top/ wx h+ l+ t):

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

Teraz

$ identify output.jpg 

output.jpg JPEG 703x470 703x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000

2
Mówi się, że Imagemagick 7 używa polecenia „magia” zamiast „konwertować”. Jeśli ktoś command not found: convertmagick
— napotka

1
To była wielka pomoc, ale zajęło mi trochę czasu, aby owinąć głowę wokół „obliczeń”. Miałem zestaw 1280x1024 obrazów, z których musiałem przyciąć górę i dół, więc ostateczny obraz miałby „środkowe” 718 pikseli od oryginału (zdejmując czarny pas u góry iu dołu). Musiałem użyć tego: convert in.png -crop 1280x718+0+152 out.pnggdzie rozumiem tę linię, co oznacza: convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.pngchociaż to nie wydaje się zgadzać z liczbami @ Maythux ... FWIW!
— Dɑvïd

3
Nie powinno być 703x470zamiast 713x470? Jak przycinanie w lewo + w prawo = 3+14 = 17px, to po odjęciu 720jest 703, a nie 713.
— Mooncrater

To pomogło! Zaproponowałem również edycję FIX zarówno dla formatu 703px zamiast 713px (na co się zgadzam), jak i odwróconego formatu lewy i górnyWxH+l+t
— el-teedee

12

Jeśli chcesz przyciąć białe regiony, masz imagemagickspecjalne polecenie:

convert -trim input.jpg output.jpg

9

Aby utworzyć opcję „przyjazną dla użytkownika”, można użyć poniższego skryptu. Po prostu uruchom polecenie:

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

Tworzy przycięty obraz o image.jpegnazwie image[cropped].jpegw tym samym katalogu.

Scenariusz

#!/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)

Jak używać

  1. Używa skryptu imagemagick

    sudo apt-get install imagemagick
    
  2. Zapisz powyższy skrypt jako crop_image(bez rozszerzenia) w ~/bin.

  3. Utwórz katalog, jeśli to konieczne. W takim przypadku uruchom także, source ~/.profileaby katalog się pojawił $PATH.
  4. Spraw, by skrypt był wykonywalny.

Teraz wystarczy uruchomić skrypt według jego nazwy, jak wspomniano, np .:

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

Spacje nie stanowią problemu, o ile w takim przypadku używasz cudzysłowów:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50

@Maythux Nie wiesz, co oznacza Twoja ostatnia edycja, masz na myśli powyższe rozwiązanie, które nie działa w twoim systemie? To tylko cli.
— Jacob Vlijm

Przepraszam, że nie było mnie trzy dni temu, więc nie wiem, dlaczego dostajesz głos negatywny, zamiast tego tutaj moja +1, ponieważ zasługujesz.
— Maythux,

Ale myślę, że nawet to działa, byłoby to trochę trudniejsze dla początkującego niż używanie rodzimego narzędzia do przycinania, ale dla mnie kocham twoją drogę, całkiem fajnie, przepraszam za opóźnienie
— Maythux

Wow, dzięki. Opinia, którą otrzymałem z tego powodu: meta.askubuntu.com/questions/14082/…
— Jacob Vlijm

Nie wiem, dlaczego dobra odpowiedź / pytanie jest odrzucane, chyba że złe użycie reputacji, to pytanie dostaje -3 !!! hhhh Nie rozumiem dlaczego
— Maythux

3

Możesz użyć polecenia konwersji w image magickpakiecie.
Aby zainstalować sudo apt-get install imagemagicklub sudo yum install ImageMagick.
Następnie użyj -crop geometrydo przycięcia obrazu. Więcej odczytów przeczytasz tutaj


Ta uprawa według stosunku, a nie z różnymi marginesami
— Maythux

Nie, -cropopcja daje xi yTo są przesunięcia i gravity. więc możesz użyć go do czasu przycięcia kwadratu
— M.Fooladgar

Wysłałem to jako odpowiedź, dziękuję za twoją pomoc, ale powinieneś napisać to w swojej odpowiedzi przed4
— Maythux

@Arronical Thanks Już to rozumiem i opublikowałem jako odpowiedź. sprawdź to
— Maythux,

3

Zastosowanie mogrify -crop <W>x<H>+<X>+<Y> <files>.

Ostrożnie: pliki są zastępowane bez powiadomienia.


1

cropKomenda potrzebuje 4 rzeczy. Aby to zrozumieć, weź zdjęcie, które chcesz przyciąć. Teraz wyobraź sobie, że na obrazie rysujesz prostokąt o rozmiarze, który chcesz zachować. Obszar poza tym prostokątem zostanie wyeliminowany, przycięty. Prostokąt nie może być przechylany, tzn. Górna strona musi być pozioma.

Teraz zanotuj te 4 rzeczy:

  1. szerokość (W) w pikselu prostokąta
  2. wysokość (H) prostokąta
  3. odległość lewej pionowej strony prostokąta od lewego marginesu / końca (L) obrazu
  4. odległość górnej strony prostokąta od górnego marginesu / końca obrazu (T).

Zatem masz teraz wartości W, H, L i T. Jak na razie dobrze. Aby poznać piksele, możesz zainstalować narzędzie krule w Ubuntu. Bardzo przydatne.

Teraz otwórz terminal i przejdź do folderu, w którym jest przechowywany obraz. Użyj następującego polecenia i poprawnie wprowadź wartości W, H, L i T:

convert input.jpg -crop WxH+L+T output.jpg
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.