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

34

Je veux recadrer une image sur ma CLI uniquement Ubuntu à l'aide de l'outil de ligne de commande indiquant uniquement les pixels à recadrer pour 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)?

Maythux
la source
Possibilité de dupliquer Existe
Thomas Weller
@ThomasWeller demande la ligne de commande et non l'outil graphique ainsi que la question liée que vous avez fournie concerne l'interface graphique. Veuillez donc lire la question à nouveau
Maythux le
2
La question liée ne spécifie pas le type d'outil. La deuxième réponse concerne un outil de ligne de commande: imagemagick. Je sais que des discussions sont en cours pour déterminer si une question est un doublon au cas où la réponse serait la même. Les gens peuvent être d'accord ou non.
Thomas Weller
1
@ThomasWeller, mais la réponse n’est pas pratique, d’autre part, elle ne montre pas comment et pourquoi il a utilisé les options. Franchement, avez-vous compris les options utilisées?! Je ne peux moi-même pas obtenir cette information, c'est juste la première réponse ici, c'est sans explication qui rend la réponse de mauvaise qualité
Maythux le
@ downvoters Devrais-je savoir quel est le problème avec vous? !!
Maythux

Réponses:

38

Voici une solution de contournement utilisant convertun pack d’images magick.

sudo apt-get install imagemagick

Pour une photo 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.jpgci-dessus, je veux recadrer:

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

alors vous pouvez le faire avec ( widthformat x height+ left+ top/ wx h+ l+ t):

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
Maythux
la source
2
On dit que Imagemagick 7 utilise la commande "magick" à la place de "convert". Si vous rencontrez un command not found: convertproblème, essayezmagick
iplus26
1
C'était une aide précieuse, mais il m'a fallu un certain temps pour comprendre les "calculs". J'avais besoin d'un ensemble d'images 1280x1024 dont je devais rogner le haut et le bas, de sorte que l'image finale aurait le "milieu" de 718 pixels de l'original (en enlevant une bande noire en haut et en bas). J'avais besoin d'utiliser ceci: convert in.png -crop 1280x718+0+152 out.pnglà où je comprends cette ligne convert in.png -crop [final-right-x]x[final-right-y]+[crop-left]+[crop-top] out.png, cela signifie:, bien que cela ne semble pas correspondre aux chiffres de @ Maythux ... FWIW!
Dɑvïd
3
Ça ne devrait pas être à la 703x470place de 713x470? Comme la culture gauche + droite = 3+14 = 17px, que lorsque soustrait 720est 703, et non 713.
Mooncrater
Cela a aidé! J'ai également suggéré de modifier FIX 703px au lieu de 713px (ce que j'accepte), et d'inverser les formats left et top dans le formatWxH+l+t
el-teedee
12

Si vous souhaitez supprimer les régions blanches, imagemagickutilisez une commande spéciale:

convert -trim input.jpg output.jpg
Martin Thoma
la source
9

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éimage[cropped].jpeg dans le même répertoire.

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

Comment utiliser

  1. Le script utilise imagemagick

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

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

Maintenant, exécutez simplement le script par son nom, comme indiqué, 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
Jacob Vlijm
la source
@ Maythux Vous ne savez pas ce que votre dernière édition signifie, vous voulez dire que la solution ci-dessus ne fonctionne pas sur votre système? C'est cli seulement.
Jacob Vlijm
Je suis désolé, j'étais absent il y a trois jours, donc je ne sais pas pourquoi vous obtenez un vote par opposition, mais plutôt mon +1 depuis que vous le méritez.
Maythux
Mais je pense que même si cela fonctionne, ce serait un peu plus dur pour un débutant que d'utiliser un outil de culture indigène, mais pour moi j'aime votre chemin, plutôt cool, encore désolé pour le retard
Maythux
Ouah merci. Le downvote que j'ai obtenu à cause de cela: meta.askubuntu.com/questions/14082/…
Jacob Vlijm Le
Je ne sais pas pourquoi une bonne réponse / question est votée à moins d'une mauvaise utilisation de la réputation, cette question va de -3 !!! hhhh Je ne comprends pas pourquoi
Maythux Le
3

Vous pouvez utiliser la commande convert in image magickpack.
Pour installer sudo apt-get install imagemagickou sudo yum install ImageMagick.
Ensuite, utilisez -crop geometrypour recadrer l'image. Pour plus de lectures, lisez ici

M.Fooladgar
la source
Cette récolte par rapport et pas avec des marges différentes
Maythux
Non, l' -cropoption donne xet yqui sont des compensations et gravity. vous pouvez donc l'utiliser pour prendre le temps de recadrer un carré
M.Fooladgar le
Je l’a posté comme réponse, merci de votre aide malgré tout, mais vous devriez l’écrire dans votre réponse avant4
Maythux
@Arronical Merci je l'ai déjà et posté comme réponse. s'il vous plaît vérifier
Maythux
3

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

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

R2-D2
la source
1

le crop commande 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 krule outil 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
Googly Googly
la source