Beschneiden von Bildern nur mit den Befehlszeilenwerkzeugen

9

Ich möchte ein Bild auf meinem CLI nur Ubuntu zuschneiden, indem ich nur Befehlszeilenwerkzeug benutze, um Pixel für die vier Richtungen zu beschneiden. (wie in libreoffice)

Zum Beispiel:

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

Gibt es ein solches Tool (nicht GUI)?

    
Maythux 03.06.2015, 10:31

5 Antworten

20

Hier ist ein Workaround mit convert von image magick pack.

sudo apt-get install imagemagick

Für ein Bild image.jpg

$ identify image.jpg 

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

Wie oben gezeigt, ist das Eingangsbild 720x482px.

Nun zum Beschneiden müssen Sie zwei Faktoren bestimmen:

  1. Startpunkt des Zuschneidens (beinhaltet 2 Richtungen)
  2. Die beschnittene Rechteckgröße (Hier können Sie die anderen Richtungen einschließen)

Nun zurück zum Bild image.jpg oben, ich möchte Top 5px -unter 7px -right 14px -left 3px croppen, dann könntest du es tun:

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

Jetzt

$ identify output.jpg 

output.jpg JPEG 713x470 713x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000
    
Maythux 03.06.2015 10:48
6

Um eine "benutzerfreundliche" cli-Option zu erstellen, kann das folgende Skript verwendet werden. Führen Sie einfach den folgenden Befehl aus:

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

Erzeugt ein beschnittenes Bild von image.jpeg , namens image[cropped].jpeg im selben Verzeichnis.

Das Skript

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

Wie benutzt man

?
  1. Das Skript verwendet imagemagick

    sudo apt-get install imagemagick
    
  2. Speichern Sie das obige Skript als crop_image (keine Erweiterung) in ~/bin .

  3. Erstellen Sie das Verzeichnis bei Bedarf. In diesem Fall führen Sie auch source ~/.profile aus, damit das Verzeichnis in $PATH angezeigt wird.
  4. Machen Sie das Skript ausführbar.

Führen Sie das Skript nun einfach wie angegeben aus, wie z. B .:

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

Leerzeichen sind kein Problem, solange Sie in diesem Fall Anführungszeichen verwenden:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50
    
Jacob Vlijm 03.06.2015 23:23
3

Wenn Sie weiße Regionen abschneiden wollen, hat imagemagick einen speziellen Befehl dafür:

convert -trim input.jpg output.jpg
    
Martin Thoma 09.03.2017 10:57
2

Sie können den Befehl convert in image magick pack verwenden.
So installieren Sie sudo apt-get install imagemagick oder sudo yum install ImageMagick .
Verwenden Sie dann -crop geometry , um das Bild zu beschneiden. Für weitere Lesungen lesen Sie hier

    
M.Fooladgar 03.06.2015 10:40
0

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

Vorsicht: Die Dateien werden ohne vorherige Ankündigung überschrieben.

    
R2-D2 15.11.2017 23:34

Tags und Links