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)?
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:
Revenons maintenant à l’image image.jpg
ci-dessus, je souhaite recadrer:
alors vous pouvez le faire avec (width
xheight
+ left
+ top
/w
xh
+ 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
Si vous souhaitez supprimer les régions blanches, imagemagick
a une commande spéciale pour cela:
convert -trim input.jpg output.jpg
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.
#!/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)
Le script utilise imagemagick
Sudo apt-get install imagemagick
Enregistrez le script ci-dessus sous le nom crop_image
(sans extension) dans ~/bin
.
source ~/.profile
pour afficher le répertoire dans $PATH
.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
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
Utilisez mogrify -crop <W>x<H>+<X>+<Y> <files>
.
Attention, les fichiers sont écrasés sans préavis.
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:
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