Frage

Ich muss eine Reihe von Bildern in die Ernte machen jpeg Format um 20 Pixel auf der rechten Seite verlustlos unter Linux.

Ich überprüfte jpegtran, Aber es braucht die Dateigröße in Pixeln, bevor es zubereitet wird, und ich weiß nicht, wie man eine Batch -Datei damit erstellt.

Wie kann ich programmgesteuert 20 Pixel von der rechten Seite von Bildern Verlustlos zubereiten?

War es hilfreich?

Lösung

Mein Shell -Scripting ist ein wenig verrostet. Bitte machen Sie bitte eine Sicherung Ihrer Bilder, bevor Sie dieses Skript ausprobieren.

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

Punkte zu beachten:

  • Passen Sie den Pfad auf den richtigen Wert an
  • Benötigen Sie *.jpeg?
  • identify ist ein ImageMagick -Befehl
  • awk wird die Pixelabmessungen von greifen identify als Parameter zu verwenden (mit der Breite um 20px) für jpegtran das Bild zubereiten
  • Das neue Bild wird als gespeichert als new_[old_name].jpg
  • jpegtran Kann die Anbausregion so einstellen, dass sie verlustlos funktionieren kann. Überprüfen Sie, ob die resultierenden Bilder die richtige Größe und nicht etwas größer sind.

Andere Tipps

Sehr ähnlich wie bei der akzeptierten Antwort würde Folgendes auch mit Dateinamen mit Leerzeichen funktionieren. Und es ist wohl einfacher, verwendet identify's eingebaut -format Möglichkeit Anstatt die Ausgabe mit awk zu analysieren.

#!/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
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top