GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Automatisieren Sie die Bildverarbeitung mit diesem Bash-Skript

Schriftsteller arbeiten nicht nur mit Worten, sie müssen oft mit Bildern arbeiten. Beim technischen Schreiben werden viele Screenshots präsentiert, um die Technologie und Prozesse zu vermitteln. Unterschiedliche Veröffentlichungsplattformen können unterschiedliche Anforderungen an Bilder haben, z. B. Bildformat oder Dateigröße.

Als IT-Berater und Systemingenieur habe ich viele technische Dokumentationen als Kundenleistungen geschrieben, im Allgemeinen mit Microsoft Word (.doc) als erforderliches Format. Jedes Dokument kann schnell wachsen, wenn Inhalte hinzugefügt werden. Früher waren Screenshots oft Bitmaps (.bmp), die eine sehr große Dateigröße haben können. Ein Dokument, das die Installation eines Betriebssystems auf einem Server beschreibt, könnte am Ende eine sehr große Datei werden.

Die Bilder zu verkleinern, ohne sie unlesbar zu machen, war eine mühsame Übung. Bitmaps können in JPEG-Dateien und später in PNG-Dateien konvertiert werden. Die Bearbeitung war auch später noch eine Herausforderung, als ich meine Office-Suite auf LibreOffice umstellte. Glücklicherweise speichern die meisten Screenshot-Tools heutzutage in kleineren Formaten wie PNG.

Opensource.com legt bestimmte Beschränkungen für Bilder fest, die in seinen Artikeln verwendet werden. Ich habe eine schnelle dreistufige Methode entwickelt, um Bilder für meine Artikel vorzubereiten. Der erste Schritt besteht darin, bei der Inszenierung klug vorzugehen, z. B. die Größe eines Fensters zu ändern oder eine Schriftart zu ändern. Zwei zusätzliche Schritte wurden sehr repetitiv. Diese sollen sicherstellen, dass das Bild die Breitenbegrenzung von 600 Pixeln nicht überschreitet, und einen Rahmen anwenden.

Weitere Linux-Ressourcen

  • Spickzettel für Linux-Befehle
  • Spickzettel für fortgeschrittene Linux-Befehle
  • Kostenloser Online-Kurs:RHEL Technical Overview
  • Spickzettel für Linux-Netzwerke
  • SELinux-Spickzettel
  • Spickzettel für allgemeine Linux-Befehle
  • Was sind Linux-Container?
  • Unsere neuesten Linux-Artikel

Das prepimg.sh-Skript

Ich habe ein Bash-Skript namens prepimg.sh geschrieben diese Aufgaben zu bewältigen. Dieses Skript verwendet zwei Tools aus der ImageMagick-Suite.

Größe des Bildes ändern

Das Screenshot-Dienstprogramm speichert das Bild unter Pictures Verzeichnis mit einem generischen Namen – so etwas wie Screenshot-20210923222312.png . Meine prepimg.sh Das Skript überprüft die Pixelbreite der Dateien in diesem Verzeichnis und ändert die Größe aller Dateien, die das Limit überschreiten. Dieser Schritt verwendet die identify Programm aus der ImageMagick-Suite, um die Breite (%w) zu bestimmen.

$ identify -format %w Screenshot-20210903202655.png
1217

Der Breitenwert wird der Variablen W zugewiesen zur Verwendung als Komparator zum Limit von 600. Das Limit selbst ist über die Variable $MAXWIDTH konfigurierbar . Wenn festgestellt wird, dass die Breite MAXWIDTH überschreitet, wird ein anderes ImageMagick-Programm namens convert wird aufgerufen, um die Bildbreite zu reduzieren. Hier ist die Bildverarbeitungsfunktion aus meinem Skript:

     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     
     ...    

Das Bild wird bei Bedarf verkleinert und in einem anderen Verzeichnis gespeichert, das durch $READY definiert wird Variable. In diesem Fall wird das Bild tatsächlich etwas kleiner skaliert – 598 Pixel – um Platz für das Hinzufügen eines Rahmens zu schaffen, den ich als Nächstes zeige.

Fügen Sie dem Bild einen Rand hinzu

Manchmal scheint ein Bild mit dem Hintergrund der Webseite zu verschmelzen. Dies liegt daran, dass die Vordergrundfarbe des Bildes bis zum Rand die gleiche Farbe wie der Hintergrund der Website hat. Hier ist ein Beispiel:

Wie Sie im obigen Bild sehen können, ist es unmöglich zu sagen, wo sich der Rand des Bildes befindet. Dieses Problem ist nicht auf die Farbe Weiß beschränkt. Dies hängt von jeder einzelnen Website und den verwendeten Themenfarben ab. Wenn also der Hintergrund rot ist und der Bildrand ebenfalls rot ist, tritt dasselbe Problem auf. Mein Skript löst dies, indem es convert verwendet Werkzeug. Die -Grenze Option fügt jeder Bilddatei einen Rahmen mit einer Größe von 1 Pixel hinzu. Diese Option allein würde ausreichen, aber ich möchte auch die Farbe mit der -bordercolor festlegen Möglichkeit. Hier ist ein Beispiel:

convert -bordercolor black -border 1 Screenshot-20210903202655.png

Unten ist das gleiche Bild mit einem Rand. Sieht das nicht schöner aus?

Ihr Bild ist fertig

Ich verwende einen for Schleife, um das Screenshot-Verzeichnis zu durchlaufen. Es ruft die Funktion process_img auf für jede Datei. Die Funktion behandelt sowohl die Breite als auch den Rahmen. Der vollständige Code führt einige Plausibilitätsprüfungen durch, z. B. um sicherzustellen, dass die Datei tatsächlich ein Bild ist.

process_img() {
     # verify that file is an image file, and then get dimensions
     if file "${SCREENSHOTS}"/"${1}" | grep -qE 'image|bitmap'; then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is an image"
         W=$(identify -format %w "${SCREENSHOTS}"/"${1}")
     else
         echo "File ${SCREENSHOTS}/${1} is not an image."
         W=0
     fi
 
     # resize and border
     if [ "$W" -gt "$MAXWIDTH" ]
     then
         [[ $VERBOSE -gt 0 ]] && echo "${1} is ${W} - reducing"
         convert -resize "${MAXWIDTH}" \
                 -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     else
         convert -bordercolor $BORDER \
                 -border 1 \
                 "${SCREENSHOTS}"/"${1}" \
                 "${READY}"/"${1}"
     fi
 }

Der letzte Schritt des Skripts besteht darin, die verarbeiteten Dateien in einem Unterverzeichnis namens Ready zu speichern , was durch die Variable namens $READY bestimmt wird . Dadurch bleiben die Originaldateien für die weitere Verwendung erhalten.

Verwendung

Prepimg.sh enthält die erwartete Hilfefunktion, die ihre Argumente und ihre Verwendung beschreibt:

$ prepimg.sh -h
prepimg.sh Version 0.7 - written by Alan Formy-Duval
prepimg.sh [OPTIONS]
--verbose, -v Be verbose
--directory, -d Screenshot directory (default: /home/alan/Pictures/Screenshots)
--ready, -r Ready directory (default: /home/alan/Pictures/Screenshots/Ready)
--border, -b Border color (default: black)

Kodex und Schlussfolgerung

Der im Artikel vorgestellte Code ist unvollständig und sollte als Pseudocode betrachtet werden. Sie können das vollständige Skript in meinem Git-Repository anzeigen.

Die ImageMagick-Suite ist eine leistungsstarke Sammlung von Tools zum Bearbeiten von Bildern. Zusätzlich zu den Funktionen, die in meinem kleinen Skript enthalten sind, können Sie noch viele weitere Dinge tun. Der Korrespondent Jim Hall schrieb kürzlich auch darüber, wie man damit die Größe eines Bildes ändert.

Egal, ob Sie Bash-Skripting oder Codierung in einer anderen Sprache wie C oder Python bevorzugen, die Automatisierung ist eine große Hilfe. Immer wieder habe ich gesehen, wie ein bisschen Code so viele Kopfschmerzen lindern und es uns ermöglichen kann, unsere Zeit besser zu nutzen.


Linux
  1. Basisname mit Leerzeichen in einem Bash-Skript?

  2. Rufen Sie das Python-Skript von bash mit Argument auf

  3. Bash-Skript, das eine begrenzte Anzahl von Befehlen parallel verarbeitet

  4. Berechtigung zum Ausführen von cron mit bash.sh verweigert

  5. Führen Sie den Bash-Befehl auf der Jenkins-Pipeline aus

Verwenden Sie dieses hilfreiche Bash-Skript, wenn Sie Sterne beobachten

So schreiben Sie ein Bash-Skript mit Beispielen

Shell-Scripting Teil I:Erste Schritte mit Bash-Scripting

Bash-Anfängerserie Nr. 10:Automatisierung mit Bash

Bash Scripting Einführungstutorial mit 5 praktischen Beispielen

Bash-Skript für Schleife mit Beispielen erklärt