Gibt es einen Linux-Befehl, um mehrere Bilddateien in nur einem Schritt zu optimieren?

Gibt es einen Linux-Befehl, um mehrere Bilddateien in nur einem Schritt zu optimieren?

Ich habe eine Reihe von Bildern in einem Ordner:

images/image1.jpg
images/image2.jpg
...

Diese Bilder sind nicht für das Web optimiert.

Ich frage mich nur, ob es einen Linux-Befehl gibt, um diese Bilder in nur einem Schritt zu optimieren?

AKTUALISIEREN: Ich muss für jedes Bild zwei Dinge tun:

  1. Wenn die Breite des Bildes größer als 900 Pixel ist, reduzieren Sie die Breite auf 900 Pixel (unter Beibehaltung der Proportionen).

  2. Speichern Sie die Datei in geringerer Qualität, sagen wir 70 % des Originals.

Antwort1

InstallierenBildMagick:

sudo apt-get install imagemagick

Und verwenden Sie den convertBefehl wie folgt:

mkdir new
for file in images/*jpg
do convert -quality 70% -resize '>900x' "$file" new/$(basename "$file")
done

Antwort2

Wenn Sie sehr viele Dateien haben und dies schnell erledigen möchten, können Sie auch das parallele Programm verwenden:

sudo apt install imagemagick parallel

Und dann folgendes:

find . \( -name '*.jp*g' -o -name '*.png' \) -a ! -name '*.min.*' -type f -print0 | \
parallel -0 'convert {} -resize '>900x' -quality '70%' \
    -set filename:newname "%d/%[basename].min.%[extension]" "%[filename:newname]"'

Lassen Sie uns das durchgehen:

  • find-- nach Dateien suchen
    • .-- im aktuellen Verzeichnis
    • \( -name '*.jp*g' -o -name '*.png' \)- die entweder PNG oder JPEG sind (sowohl „jpg“ als auch „jpeg“ sind gängige Erweiterungen!)
    • -a ! -name '*.min.*'-- und überspringen Sie Dateien, die bereits minimiert sind
    • -type f- und es handelt sich um tatsächliche Dateien, nicht um symbolische Links oder Verzeichnisse mit seltsamen Namen
    • -print0-- Drucken Sie diese Dateien durch das Null-Byte getrennt aus (damit Leerzeichen nichts zerstören)
  • parallel-- Lesen Sie aus dem vorherigen Befehl und führen Sie diesen Befehl parallel für jedes Element aus
    • -0-- jedes Element ist durch das Null-Byte getrennt
    • convert {}-- rufen Sie das ImageMagick-Programm "Konvertieren" auf und ersetzen Sie dabei den Dateinamen durch{}
      • resize '>900x' -quality '70%'-- Ändern Sie die Bildgröße auf maximal 900 Pixel auf der X-Achse und ändern Sie die JPEG-Qualität auf 70 %.Es gibtvieleweitere mögliche Optionen hier.
      • -set filename:newname "%d/%[basename].min.%[extension]"-- Erstellen Sie eine Variable mit dem neuen Dateinamen.Alle gültigen Werte finden Sie in der Dokumentation..
        • %d-- das Verzeichnis, in dem sich die Datei befindet
        • %[basename]-- der Dateiname ohne Erweiterungen
        • %[extension]-- die ursprüngliche Dateierweiterung
      • "%[filename:newname]"-- der Ausgabedateiname, den wir im vorherigen Schritt eingerichtet haben

verwandte Informationen