Ritaglio di immagini utilizzando solo gli strumenti della riga di comando

10

Voglio ritagliare un'immagine solo sulla mia CLI Ubuntu usando solo strumento da riga di comando che indica i pixel da ritagliare per le quattro direzioni. (come quello trovato in libreoffice)

Ad esempio:

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

Esiste un tale strumento (non una GUI)?

    
posta Maythux 03.06.2015 - 10:31

5 risposte

21

Ecco una soluzione alternativa che utilizza convert da image magick pack.

sudo apt-get install imagemagick

Per un'immagine image.jpg

$ identify image.jpg 

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

Come mostrato sopra, l'immagine in ingresso è 720x482px.

Ora per fare il ritaglio devi determinare due fattori:

  1. punto di partenza del ritaglio (include 2 direzioni)
  2. La dimensione del rettangolo ritagliato (qui puoi includere le altre direzioni)

Ora torna all'immagine image.jpg sopra, voglio ritagliare top 5px -bottom 7px -right 14px -left 3px quindi potresti farlo:

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

Ora

$ identify output.jpg 

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

Per creare un'opzione clik "user friendly", è possibile utilizzare lo script seguente. Basta eseguire il comando:

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

Crea un'immagine ritagliata di image.jpeg , chiamata image[cropped].jpeg nella stessa directory.

Lo script

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

Come usare

  1. Lo script utilizza imagemagick

    sudo apt-get install imagemagick
    
  2. Salva lo script sopra come crop_image (senza estensione) in ~/bin .

  3. Crea la directory, se necessario. In tal caso, esegui anche source ~/.profile per mostrare la directory in $PATH .
  4. Rendi eseguibile lo script.

Ora esegui semplicemente lo script con il suo nome, come detto, ad esempio:

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

Gli spazi non sono un problema, purché in quel caso utilizzi le virgolette:

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

Se vuoi tagliare le regioni bianche, imagemagick ha un comando speciale per questo:

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

È possibile utilizzare il comando convert in image magick pack.
Per installare sudo apt-get install imagemagick o sudo yum install ImageMagick .
Quindi usa -crop geometry per ritagliare l'immagine. Per ulteriori letture, leggi qui

    
risposta data M.Fooladgar 03.06.2015 - 10:40
0

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

Attenzione: i file vengono sovrascritti senza preavviso.

    
risposta data R2-D2 15.11.2017 - 23:34

Leggi altre domande sui tag