Befehlszeile zum automatischen Zuschneiden eines Bildes?

18

Über das Menü von Gimp können Sie das Bild automatisch zuschneiden (weiße Ränder entfernen). Ich habe viele Bilder mit weißen Rändern in verschiedenen Größen. Ich möchte sie mit Gimp in der Befehlszeile entfernen, kann aber nicht herausfinden, was der Befehl ist.

Hat jemand eine Idee?

Vielleicht mit ImageMagick?

GuillaumeThomas
quelle

Antworten:

38

(Hauptsächlich zum Nachschlagen in der Zukunft) Verwenden von ImageMagick:

convert -trim image.jpg image.jpg

So schneiden Sie das gesamte Verzeichnis ab:

for a in *.jpg; do convert -trim "$a" "$a"; done

Oder mit find :

find -name "*.jpg" -exec convert -trim "{}" "{}" \;
Natirips
quelle
2
Auch aus der ImageMagick-Suite mogrifywird die gleiche Aufgabe wie beim Konvertieren ausgeführt, das Original wird jedoch überschrieben, anstatt Kopien zu erstellen.
Yab
-transparent funktioniert bei mir nicht, aber -trim funktioniert. Vielen Dank.
Ivan ZG Xiao
4

Ich habe es eine Weile nicht mehr benutzt, aber es wird hoffentlich helfen. Erstellen Sie ein Gimp-Batch-Skript (ich nenne mein crop-png.scm) und fügen Sie es in ~ / .gimp-2.6 / scripts / ein.

(define (crop-png filename)
  (let* 
    (
    (image (car (gimp-file-load RUN-NONINTERACTIVE filename filename)))
    (drawable (car (gimp-image-get-active-layer image)))
    )

  ; crop the image
  (plug-in-autocrop RUN-NONINTERACTIVE image drawable)

  ; save in original png format
  (file-png-save RUN-NONINTERACTIVE image drawable filename filename
       0 6 0 0 0 1 1)

  ; clean up the image
  (gimp-image-delete image)
  )
)

Speichern Sie dann diesen Shell-Scrip (zB pngcrop.sh) und rufen Sie ihn in den png-Dateien wie folgt auf: 'pngcrop.sh * .png'

#!/bin/bash

if [ $# -le 0 ]; then
    echo
    echo "Usage: $(basename $0) file1.png [file2.png ...]"
    echo
    echo "  This script uses gimp to autocrop PNG files and"
    echo "  save them to PNG format.  You must have"
    echo "  crop-png.scm installed in your gimp "
    echo "  scripts directory."
    echo
    exit 1
fi

# set the filelist
files=$*

# # set the base command
# CMD="gimp -i -b "

# loop and add each file
for i in ${files[*]} ; do
  # #echo $i
  # ARGS="\"(crop-png \\\"$i\\\")\""
  # CMD="$CMD $ARGS"

  gimp -i -b "(crop-png \"$i\")" -b "(gimp-quit 0)"
done

# # add the end to quit
# TAIL="-b \"(gimp-quit 0)\""
# CMD="$CMD $TAIL"
# 
# #echo $CMD
# eval $CMD
warmlogic
quelle