web-dev-qa-db-fra.com

Recadrage d'images à l'aide des outils de ligne de commande uniquement

Je souhaite recadrer une image sur ma CLI uniquement sous Ubuntu à l'aide de outil de ligne de commande uniquement indiquant les pixels à recadrer dans les quatre directions. (identique à celui trouvé dans libreoffice)

Par exemple:

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

Existe-t-il un tel outil (pas une interface graphique)?

29
Maythux

Voici une solution de contournement utilisant convert de Image Magick Pack.

Sudo apt-get install imagemagick

Pour une image image.jpg

$ identify image.jpg 

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

Comme indiqué ci-dessus, l'image d'entrée est 720x482px.

Maintenant, pour faire le recadrage, vous devez déterminer deux facteurs:

  1. point de départ du recadrage (comprend 2 directions)
  2. La taille du rectangle recadré (Ici, vous pouvez inclure les autres directions)

Revenons maintenant à l’image image.jpg ci-dessus, je souhaite recadrer:

  • top 5px
  • 7px bas
  • 14px à droite
  • 3px gauche

alors vous pouvez le faire avec (widthxheight + left + top/wxh + l + t format):

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

À présent

$ identify output.jpg 

output.jpg JPEG 703x470 703x470+0+0 8-bit DirectClass 102KB 0.000u 0:00.000
34
Maythux

Si vous souhaitez supprimer les régions blanches, imagemagick a une commande spéciale pour cela:

convert -trim input.jpg output.jpg
11
Martin Thoma

Pour créer une option de client "conviviale", vous pouvez utiliser le script ci-dessous. Il suffit de lancer la commande:

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

Il crée une image recadrée de image.jpeg, nommée image[cropped].jpeg dans le même répertoire.

Le scénario

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

Comment utiliser

  1. Le script utilise imagemagick

    Sudo apt-get install imagemagick
    
  2. Enregistrez le script ci-dessus sous le nom crop_image (sans extension) dans ~/bin.

  3. Créez le répertoire si nécessaire. Dans ce cas, exécutez également source ~/.profile pour afficher le répertoire dans $PATH.
  4. Rendre le script exécutable.

Maintenant, exécutez simplement le script par son nom, comme mentionné, par exemple:

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

Les espaces ne posent aucun problème, tant que dans ce cas, vous utilisez des guillemets:

crop_image '/path/with spaces in the name/to/image.jpg' 20 30 40 50
9
Jacob Vlijm

Vous pouvez utiliser la commande convert dans image magick pack.
Pour installer Sudo apt-get install imagemagick ou Sudo yum install ImageMagick.
Utilisez ensuite -crop geometry pour rogner l'image. Pour plus de lectures, lisez ici

3
M.Fooladgar

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

Attention, les fichiers sont écrasés sans préavis.

3
R2-D2

La commande crop a besoin de 4 choses. Pour le comprendre, prenez l’image que vous souhaitez recadrer. Maintenant, imaginez que sur l’image, vous tracez un rectangle de la taille que vous souhaitez conserver. La zone en dehors de ce rectangle sera éliminée, recadrée. Le rectangle ne doit pas être incliné, c’est-à-dire que le côté supérieur doit être horizontal.

Maintenant, notez ces 4 choses:

  1. la largeur (W) en pixel du rectangle
  2. hauteur (H) du rectangle
  3. distance du côté vertical gauche du rectangle à partir de la marge gauche (L) de l'image
  4. distance du bord supérieur du rectangle à partir de la marge supérieure/extrémité de l'image (T).

Ainsi, vous avez maintenant les valeurs W, H, L et T. Jusqu'ici tout va bien. Pour connaître les pixels, vous pouvez installer l’outil krule dans Ubuntu. Très utile.

Maintenant, ouvrez le terminal et allez dans le dossier où l'image est stockée. Utilisez la commande suivante et entrez correctement les valeurs de W, H, L et T:

convert input.jpg -crop WxH+L+T output.jpg
1
Googly Googly