Cortar imagens usando somente ferramentas de linha de comando

8

Eu quero cortar uma imagem na minha CLI apenas Ubuntu usando ferramenta de linha de comando apenas , indicando pixels para cortar para as quatro direções. (o mesmo que o fundado no libreoffice)

Exemplo Foe:

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

Existe tal ferramenta (não GUI)?

    
por Maythux 03.06.2015 / 10:31

5 respostas

17

Aqui está uma solução alternativa usando convert da imagem magick pack.

sudo apt-get install imagemagick

Para uma foto image.jpg

$ identify image.jpg 

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

Como mostrado acima, a imagem de entrada é 720x482px.

Agora, para fazer o corte, você precisa determinar dois fatores:

  1. ponto inicial do recorte (inclui duas direções)
  2. O tamanho do retângulo recortado (aqui você pode incluir as outras direções)

Agora, de volta para a imagem image.jpg acima, quero recortar o top 5px -bottom 7px -right 14px -left 3px, então você poderá:

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

Agora

$ identify output.jpg 

output.jpg JPEG 713x470 713x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000
    
por Maythux 03.06.2015 / 10:48
3

Para criar uma cláusula "user friendly", o script abaixo pode ser usado. Basta executar o comando:

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

Cria uma imagem recortada de image.jpeg , denominada image[cropped].jpeg no mesmo diretório.

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

Como usar

  1. O script usa imagemagick

    sudo apt-get install imagemagick
    
  2. Salve o script acima como crop_image (sem extensão) em ~/bin .

  3. Crie o diretório, se necessário. Nesse caso, também execute source ~/.profile para fazer o diretório aparecer em $PATH .
  4. Torne o script executável.

Agora, basta executar o script pelo nome, conforme mencionado, por exemplo:

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

Espaços não são problema, contanto que, nesse caso, você use aspas:

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

Se você quiser aparar regiões brancas, imagemagick tem um comando especial para isso:

convert -trim input.jpg output.jpg
    
por Martin Thoma 09.03.2017 / 10:57
1

Você pode usar o comando de conversão em image magick pack.
Para instalar sudo apt-get install imagemagick ou sudo yum install ImageMagick .
Em seguida, use -crop geometry para cortar a imagem. Para mais leituras, leia aqui

    
por M.Fooladgar 03.06.2015 / 10:40
0

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

Cuidado: os arquivos são sobrescritos sem aviso prévio.

    
por R2-D2 15.11.2017 / 23:34