¿Línea de comando para recortar automáticamente una imagen?


18

Al usar el menú de Gimp, puede recortar automáticamente la imagen (eliminando los bordes blancos). Tengo muchas imágenes con bordes blancos de diferentes tamaños. Quiero eliminarlos usando Gimp en la línea de comando, pero no puedo entender cuál es el comando.

Alguien tiene una idea?

¿Quizás usando ImageMagick?

Respuestas:


38

(Principalmente para referencia personal futura), usando ImageMagick:

convert -trim image.jpg image.jpg

Para recortar / recortar automáticamente todo el directorio:

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

O usando find :

find -name "*.jpg" -exec convert -trim "{}" "{}" \;

2
También de la suite ImageMagick, mogrifyhará el mismo trabajo que convertir, pero sobrescribirá el original en lugar de hacer copias.
Yab

-transparent no funciona para mí, pero -trim funciona. Gracias.
Ivan ZG Xiao

4

No he usado esto en mucho tiempo, pero espero que ayude. Cree un script por lotes de gimp (yo llamo mine crop-png.scm) y póngalo en ~ / .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)
  )
)

Luego guarde este script de shell (por ejemplo, pngcrop.sh) y llámelo a los archivos png como este: '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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.