Question

J'ai besoin de recadrer un certain nombre d'images dans jpeg Format de 20 pixels sur le côté droit sans perte sur Linux.

j'ai vérifié jpegtran, mais il a besoin de la taille du fichier dans les pixels avant de recadrer, et je ne sais pas comment construire un fichier batch avec cela.

Comment puis-je recadrer sans perte 20 pixels du côté droit des images par programme?

Était-ce utile?

La solution

Mon script de coquille est un peu rouillé, alors faites une sauvegarde de vos images avant d'essayer ce script.

#!/bin/bash
FILES=/path/to/*.jpg

for f in $FILES
do
    identify $f | awk '{ split($3, f, "x"); f[1] -= 20; cl = sprintf("jpegtran -crop %dx%d+0+0 %s > new_%s", f[1], f[2], $1, $1); system(cl); }'
done

Points à noter:

  • Ajustez le chemin à la valeur correcte
  • Avez-vous besoin de * .jpeg?
  • identify est une commande ImageMagick
  • awk saisira les dimensions de pixels de identify à utiliser comme paramètre (avec la largeur réduite de 20px) pour jpegtran Pour recadrer l'image
  • La nouvelle image est enregistrée comme new_[old_name].jpg
  • jpegtran pourrait ajuster la région de culture afin qu'elle puisse effectuer sans perte. Vérifiez que les images résultantes sont de la bonne taille et pas légèrement plus grandes.

Autres conseils

Très similaire à la réponse acceptée, ce qui suit fonctionnerait également avec des noms de fichiers contenant des espaces. Et c'est sans doute plus simple, en utilisant identifyest intégré -format option Au lieu d'analyser la sortie avec awk.

#!/bin/bash

X=0; Y=0   # offset from top left corner

for f in /path/to/*.jpg; do
    read -r W H < <(identify -format '%w %h' "$f") # get width and height
    (( W -= 20 ))                                  # substract 20 from width
    out="${f%%.jpg}-crop-20.jpg"                   # add "-crop-20" to filename
    jpegtran -crop ${W}x$H+$X+$Y "$f" > "$out"     # crop
done
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top