Baris perintah untuk memotong gambar secara otomatis?

18

Dengan menggunakan menu Gimp, Anda dapat memotong gambar secara otomatis (menghapus batas putih). Saya memiliki banyak gambar dengan batas putih ukuran berbeda. Saya ingin menghapus mereka menggunakan Gimp di baris perintah tapi saya tidak tahu apa perintahnya.

Adakah yang punya ide?

Mungkin dengan menggunakan ImageMagick?

GuillaumeThomas
sumber

Jawaban:

38

(Terutama untuk referensi pribadi di masa depan,) menggunakan ImageMagick:

convert -trim image.jpg image.jpg

Untuk memangkas / autocrop seluruh direktori:

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

Atau menggunakan find :

find -name "*.jpg" -exec convert -trim "{}" "{}" \;
Natirip
sumber
2
Juga dari suite ImageMagick, mogrifyakan melakukan pekerjaan yang sama dengan konversi, tetapi akan menimpa yang asli alih-alih membuat salinan.
Yab
-transparan tidak bekerja untuk saya, tetapi -trim bekerja. Terima kasih.
Ivan ZG Xiao
4

Saya sudah lama tidak menggunakan ini, tapi mudah-mudahan ini bisa membantu. Buat skrip batch gimp (saya sebut mine crop-png.scm), dan letakkan di ~ / .gimp-2.6 / scripts /).

(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)
  )
)

Kemudian simpan skrip shell ini (mis., Pngcrop.sh) dan beri nama pada file png seperti ini: '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
sumber