Bilder nur mit den Befehlszeilentools zuschneiden


34

Ich möchte ein Bild auf meinem Ubuntu nur mit der Befehlszeile zuschneiden , wobei nur die Pixel angegeben werden, die für die vier Richtungen zugeschnitten werden sollen. (wie in libreoffice)

Beispielsweise:

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

Gibt es so ein Tool (nicht GUI)?



@ThomasWeller dies für Kommandozeile zu fragen und nicht die GUI - Tool sowie die verknüpfte Frage versorgen Sie ist über GUI so einfach wieder die Frage lesen bitte
Maythux

2
Die verknüpfte Frage gibt den Werkzeugtyp nicht an. Die zweite Antwort handelt von einem Kommandozeilen-Tool: imagemagick. Ich weiß, dass es Diskussionen über SO gibt, ob eine Frage ein Duplikat ist, falls die Antwort dieselbe ist. Die Leute können zustimmen oder nicht zustimmen.
Thomas Weller

1
@ThomasWeller aber die Antwort ist nicht bequem, außerdem zeigt es nicht, wie und warum er die Optionen verwendet hat .. Ehrlich gesagt, haben Sie die verwendeten Optionen verstanden ?! Ich selbst kann diese Information nicht bekommen, es ist nur die erste Antwort hier, es ist ohne Erklärung, was die Antwort von geringer Qualität macht
Maythux

@Downvoters Soll ich wissen, was los ist mit dir? !!
Maythux,

Antworten:


38

Hier ist eine Problemumgehung mit convertImage 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 Eingabebild 720x482px.

Um das Zuschneiden zu machen, müssen Sie zwei Faktoren bestimmen:

  1. Startpunkt des Zuschneidens (beinhaltet 2 Richtungen)
  2. Die Größe des zugeschnittenen Rechtecks ​​(hier können Sie die anderen Richtungen angeben)

Nun zurück zum Bild image.jpgoben, ich möchte zuschneiden:

  • top 5px
  • untere 7px
  • rechts 14px
  • links 3px

dann könnte man es machen mit ( widthx height+ left+ top/ wx h+ l+ tformat):

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

Jetzt

$ identify output.jpg 

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

2
Es heißt, dass Imagemagick 7 den Befehl "magick" anstelle von "convert" verwendet. Wenn jemand auf ein command not found: convertProblem magick
stößt

1
Dies war eine große Hilfe, aber ich brauchte eine Weile, um mich mit den "Berechnungen" zu beschäftigen. Ich hatte einen Satz von 1280x1024 Bildern, von denen ich oben und unten abschneiden musste, sodass das endgültige Bild die "mittleren" 718 Pixel vom Original hatte (ein schwarzes Band oben und unten entfernen). Ich musste Folgendes verwenden: convert in.png -crop 1280x718+0+152 out.pngWo ich diese Zeile verstehe, um convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.pngFolgendes zu bedeuten :, obwohl das nicht mit den @ Maythux-Zahlen übereinzustimmen scheint ... FWIW!
D 19vïd

3
Sollte es nicht 703x470statt sein 713x470? Als linkes + rechtes Zuschneiden = 3+14 = 17pxist das, wenn es von subtrahiert 720wird 703, und nicht 713.
Mooncrater

Das hat geholfen! Ich schlug auch vor, 703px anstelle von 713px (dem ich zustimme) zu bearbeiten und links und oben im Format WxH+l+t
umzukehren

12

Wenn Sie weiße Bereiche entfernen möchten, imagemagickgibt es einen speziellen Befehl:

convert -trim input.jpg output.jpg

9

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

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

Es wird ein zugeschnittenes Bild von erstellt image.jpeg, das image[cropped].jpegim selben Verzeichnis benannt ist.

Das Drehbuch

#!/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 ggf. das Verzeichnis. Führen Sie source ~/.profilein diesem Fall auch aus , damit das Verzeichnis in angezeigt wird $PATH.
  4. Machen Sie das Skript ausführbar.

Führen Sie nun einfach das Skript mit seinem Namen aus, wie zB:

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

@Maythux Sie sind sich nicht sicher, was Ihre letzte Bearbeitung bedeutet. Sie meinen, dass die oben genannte Lösung auf Ihrem System nicht funktioniert? Es ist nur Cli.
Jacob Vlijm,

Es tut mir leid, dass ich vor drei Tagen abwesend war, daher weiß ich nicht, warum Sie eine Ablehnung erhalten, sondern hier meine +1, da Sie es verdienen.
Maythux

Aber ich denke, selbst wenn es funktioniert, wäre dies für einen Neuling etwas schwieriger als die Verwendung eines einheimischen Erntetools, aber für mich liebe ich Ihre Art, ziemlich cool, entschuldigen Sie noch einmal die Verzögerung
Maythux,

Wow, danke. Die Ablehnung, die ich aus diesem Grund bekommen habe: meta.askubuntu.com/questions/14082/…
Jacob Vlijm

Ich weiß nicht, warum eine gute Antwort / Frage abgelehnt wird, es sei denn, die Reputation ist schlecht, diese Frage hat den Wert -3 !!! hhhh ich verstehe nicht warum
Maythux

3

Sie können den Befehl convert in image magickpack verwenden.
Zu installieren sudo apt-get install imagemagickoder sudo yum install ImageMagick.
Verwenden Sie dann, -crop geometryum das Bild zuzuschneiden. Für weitere Lesungen lesen Sie hier


Diese Ernte nach Verhältnis und nicht mit unterschiedlichen Rändern
Maythux

Nein, -cropOption gibt xund ydas sind Offsets und gravity. Damit können Sie die Zeit verwenden, um ein Quadrat
zuzuschneiden

Ich habe es als Antwort gepostet, trotzdem danke für deine Hilfe, aber du solltest das in deine Antwort schreiben, bevor4
Maythux,

@Arronical Danke Ich habe es schon bekommen und als Antwort gepostet. Bitte überprüfen Sie es
Maythux

3

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

Achtung: Die Dateien werden ohne Vorankündigung überschrieben.


1

Der cropBefehl benötigt 4 Dinge. Um es zu verstehen, nehmen Sie das Bild, das Sie zuschneiden möchten. Stellen Sie sich nun vor, Sie zeichnen auf dem Bild ein Rechteck der Größe, die Sie beibehalten möchten. Der Bereich außerhalb dieses Rechtecks ​​wird entfernt und beschnitten. Das Rechteck darf nicht gekippt werden, dh die Oberseite muss waagerecht sein.

Nun notieren Sie diese 4 Dinge:

  1. die Breite (W) in Pixel des Rechtecks
  2. Höhe (H) des Rechtecks
  3. Abstand der linken vertikalen Seite des Rechtecks ​​vom linken Rand / Ende (L) des Bildes
  4. Abstand der oberen Seite des Rechtecks ​​vom oberen Rand / Ende des Bildes (T).

Somit haben Sie jetzt W-, H-, L- und T-Werte. So weit, ist es gut. Um die Pixel zu kennen, können Sie das Krule- Tool in Ubuntu installieren . Sehr hilfreich.

Öffnen Sie nun das Terminal und wechseln Sie in den Ordner, in dem das Bild gespeichert ist. Verwenden Sie den folgenden Befehl und geben Sie die Werte für W, H, L und T richtig ein:

convert input.jpg -crop WxH+L+T output.jpg
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.